maven - 父项中的 dependencyManagement 被忽略

标签 maven dependencies maven-3

我有一个项目 P1,它创建了一个 jar。该项目有一个父 POM,P1-PARENT。 P1-Parent 包括以下内容:

<dependencyManagement>
    <!-- Kafka uses Zookeeper 3.3.4, but Curator requires 3.4.5. To resolve
         we specify 3.4.5 so all projects using either Kafka or Curator will
         get the later version which is compatible with both projects. -->
    <dependency>
      <groupId>org.apache.zookeeper</groupId>
      <artifactId>zookeeper</artifactId>
      <version>3.4.5</version>
    </dependency>
    <dependency>
      <groupId>org.apache.kafka</groupId>
      <artifactId>kafka_2.10</artifactId>
      <version>0.8.0</version>
    </dependency>
    <dependency>
      <groupId>org.apache.curator</groupId>
      <artifactId>curator-client</artifactId>
      <version>2.2.0-incubating</version>
    </dependency>
    <!-- A bunch of other irrelevant stuff here -->
</dependencyManagement>

这有效——“mvn dependency:tree”的输出包括:

[INFO] +- org.apache.kafka:kafka_2.10:jar:0.8.0:compile
[INFO] |  +- org.apache.zookeeper:zookeeper:jar:3.4.5:compile (version managed from 3.3.4)

请注意,这是对 zookeeper 的唯一依赖(通过“mvn dependency:tree | grep zoo”验证)。

我还有几个其他项目也继承自 P1-PARENT,一切正常,它们都引入了 ZooKeeper 3.4.5。然而,我的一位同事最近开始在他们的一个项目中使用 P1。他们的项目没有继承自 P1-PARENT。他们从 P1 获得的传递依赖是 ZooKeeper 3.3.4,而不是 3.4.5。我们已经通过“mvn dependency:tree”验证了它们将 zookeeper.3.3.4 作为 Kafka 的传递依赖(例如,输出看起来与我在上面粘贴的相同,但版本是 3.3.4,但它不是't 包括“(版本管理...”位)。另外,就像我的项目一样,它们对 ZooKeeper 的唯一依赖(传递或其他方式)是通过 P1(由 dependency:tree 和 grep 验证)。问题是, 为什么。当它们包含 P1 时,maven 在确定 P1 的传递依赖时不应该查看 P1 的父 POM 吗?

我正在使用 Maven 3.0.5。他们使用的是 3.0.3 和 3.1.1 版本,发现这两个版本都存在问题。

最佳答案

在这种情况下,Maven 没有解决版本传递依赖性问题。

这个问题可以通过使用maven bom概念来使用。

在下面的链接中检查 bom 的 maven 文档 http://maven.apache.org/guides/introduction/introduction-to-dependency-mechanism.html#Dependency_Management

这是另一个博客,它解释了 bom 的用法 http://howtodoinjava.com/maven/maven-bom-bill-of-materials-dependency/

在您的情况下,要解决此问题,您需要在面临问题的其他项目的 dependencyManagement 部分中添加父 pom 的依赖项。

关于maven - 父项中的 dependencyManagement 被忽略,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20846181/

相关文章:

java.lang.NoClassDefFoundError : org/slf4j/LoggerFactory even though I have the right dependencies

maven-3 - 没有为 Maven 站点生成 plugin-info.html

java - Maven 会下载一个新的 SNAPSHOT jar 来替换刚刚在同一构建中创建的 jar 吗?

java - 设置 Docker 来处理 Maven 和 Gradle?

maven - 创建一个maven项目模块树?

c++ - 模板类依赖问题

c# - 如何按依赖关系对依赖对象进行排序

java - 是否可以在子目录中(而不是在项目根目录中)定义 pom.xml ?

java - 从 Maven 构建时出现 jvm 堆大小错误

java - 为什么 maven-jlink-plugin 会崩溃?什么是非法论点?