Maven 忽略父级中的依赖项管理

Maven 忽略父级中的依赖项管理,maven,dependencies,maven-3,Maven,Dependencies,Maven 3,我有一个项目P1,它创建了一个jar。该项目有一个父POM,P1-parent。P1父项包括以下内容: <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

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

<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>
请注意,这是zookeeper的唯一依赖项(通过“mvn依赖项: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.4作为Kafka的可传递依赖项(例如,输出看起来与我上面粘贴的内容相同,但版本为3.3.4,不包括“(版本管理…”位)。此外,与我的项目一样,他们对zookeeper的唯一依赖项(可传递或其他)是通过P1(由依赖项:tree和grep验证)。问题是,为什么。当它们包括P1时,maven在确定P1的可传递依赖项时不应该查看P1的父POM吗


我使用的是Maven 3.0.5。他们使用的是3.0.3和3.1.1两个版本,并看到了这两个版本的问题。

使用Maven 3时,请确保您使用的是正确版本的
Maven依赖插件
,方法是通过其完全限定名调用它:
org.apache.Maven。插件:Maven依赖插件:2.8:tree
。IIRC最多2个。6给出了错误的树。在这种情况下,建议是:以“mvn validate-X”的形式运行项目,以查看树是否已由Maven的依赖关系管理框架Aether解决。

Maven在这种情况下无法解决版本传递依赖关系问题

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

在下面的链接中查看maven文档中的bom

下面是另一个解释bom的使用的博客


在您的案例中,要解决这个问题,您需要在您面临问题的其他项目的dependencyManagement部分添加父pom的依赖项。

谢谢您的回复!依赖项插件规范必须在任何使用P1、P1-parent或P1本身的项目中使用吗?我将包括maven依赖项插件2.8在最上层家长的插件管理中,因此您可以使用
mvn dependency:tree
谢谢。另一个团队已经离开一天了,所以我还不能测试这个。明天将进行测试,如果有效,则标记为正确。maven 3.2.3遇到了同样的问题。还设置了一个小示例项目,再现所描述的情况。使用maven dependency plugin 2.8没有改变任何东西。还验证了这不仅是
依赖关系:tree
的问题,而且传递依赖关系的错误版本最终会出现在最终工件中(例如war)。其他人对此有想法吗?可能相关:
[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)