Maven 将提供的依赖项与继承一起使用
我有一个名为“a”的JAR项目,其中包含一些将由wildfly 10提供的LIB:Maven 将提供的依赖项与继承一起使用,maven,Maven,我有一个名为“a”的JAR项目,其中包含一些将由wildfly 10提供的LIB: <dependency> <groupId>org.hibernate</groupId> <artifactId>hibernate-core</artifactId> <version>${hibernate.core.version}</version>
<dependency>
<groupId>org.hibernate</groupId>
<artifactId>hibernate-core</artifactId>
<version>${hibernate.core.version}</version>
<scope>provided</scope>
</dependency>
org.hibernate
冬眠核心
${hibernate.core.version}
假如
我有另一个项目叫做“B”,这是一个战争项目。第二个项目不需要再次插入hibernate依赖项,但如果我不这样做,我就不能使用@Entity和其他类。我应该再次“重新导入”项目“B”中的hibernate核心。有没有办法从项目“A”继承它
但如果我不这样做,我就不能使用@Entity和其他类
我鼓励您阅读世界各地的文档,您可以在其中找到-
提供了:这非常类似于编译,但表示您希望使用JDK
或在运行时提供依赖关系的容器。例如,当
要为Java企业版构建web应用程序,您需要
将ServletAPI和相关JavaEEAPI的依赖关系设置为
提供范围,因为web容器提供这些类。这
作用域仅在编译和测试类路径上可用,,并且
不可传递。
进一步回答您的问题
我应该按照提供的那样“重新导入”项目“B”中的hibernate核心
再一次。有没有办法从项目“A”继承它
如果您在项目B中使用相同的依赖项,我建议将其包括在项目B的依赖项列表中
此外,如果项目是紧密耦合的(从某种意义上说,它们将始终使用相同版本的hibernate core
),您可以通过将范围修改为compile
来使用现有的依赖关系,如果您不提的话,默认情况下也会使用该依赖关系
选择权仍在您想要实现的设计之上,请务必阅读本文-
尽管如此,我还是更喜欢@i000174给出的答案,特别是更安全的一面和更好的控制。我在Maven社区学到的一条黄金法则是明确声明项目所需的依赖项,这只是一种良好的实践 不必多次声明依赖项,Maven在管理依赖项方面做得很好,但是您正在做的一件事是将版本管理保持在一个地方,这很好 Maven-表示提供了
的依赖项是不可传递的,这意味着它们的可用性范围是有限的,并且仅对声明依赖项本身的项目及其直接子项(模块)可用,但对作为依赖项导入库的下游项目不可用
然而,文档在该部分中说,可以使用scopeimport
从另一个项目继承托管依赖项
它需要一些额外的工作,但这允许继承提供的
依赖项;在不使用版本的情况下声明它们,以便在多个项目中保持其版本同步
这项工作的关键是在导入其他项目时使用这两个标记:
pom
导入
专家
A.
1
聚甲醛
进口
托管依赖组id
管理依赖本身
当您说“如果您在项目B中使用相同的依赖项,我建议将其包括在项目B的依赖项列表中。”。在这种情况下,我应该将提供的依赖项也放在war项目中,对吗?当您说“您可以通过修改要编译的范围来使用现有的依赖项”时。我不明白。
<dependencyManagement>
<dependencies>
<dependency>
<groupId>maven</groupId>
<artifactId>A</artifactId>
<version>1.0</version>
<type>pom</type>
<scope>import</scope>
</dependency>
</dependencies>
</dependencyManagement>
<dependencies>
<dependency>
<groupId>managed-dependecy-group-id</groupId>
<artifactId>managed-dependecy-itself</artifactId>
</dependency>
</dependencies>