Maven 将提供的依赖项与继承一起使用

Maven 将提供的依赖项与继承一起使用,maven,Maven,我有一个名为“a”的JAR项目,其中包含一些将由wildfly 10提供的LIB: <dependency> <groupId>org.hibernate</groupId> <artifactId>hibernate-core</artifactId> <version>${hibernate.core.version}</version>

我有一个名为“a”的JAR项目,其中包含一些将由wildfly 10提供的LIB:

 <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-表示提供了
的依赖项是不可传递的,这意味着它们的可用性范围是有限的,并且仅对声明依赖项本身的项目及其直接子项(模块)可用,但对作为依赖项导入库的下游项目不可用

然而,文档在该部分中说,可以使用scope
import
从另一个项目继承托管依赖项

它需要一些额外的工作,但这允许继承
提供的
依赖项;在不使用版本的情况下声明它们,以便在多个项目中保持其版本同步

这项工作的关键是在导入其他项目时使用这两个标记:

  • 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>