首页 > 解决方案 > Maven中的重复直接依赖项

问题描述

我故意想看看maven是否允许重复的直接依赖(即非传递依赖),因为它使用依赖调解来解决冲突的传递依赖。

我写这是在我的 pom.xml

  <dependencies>

    <dependency>
      <groupId>junit</groupId>
      <artifactId>junit</artifactId>
      <version>4.11</version>
      <scope>test</scope>
    </dependency>

    <dependency>
      <groupId>junit</groupId>
      <artifactId>junit</artifactId>
      <version>4.10</version>
      <scope>test</scope>
    </dependency>


  </dependencies>

我很惊讶地看到,它选择的是 4.10 版本而不是 4.11。这可能是什么原因?


我将添加更多细节,表明它也违反了依赖中介原则。这是mvn dependency:tree仅独立 junit 4.10 版本 VS 独立 junit 4.11 版本的输出:

[INFO] --- maven-dependency-plugin:2.8:tree (default-cli) @ PracticeMaven ---
[INFO] org.example:PracticeMaven:jar:1.0-SNAPSHOT
[INFO] \- junit:junit:jar:4.10:test
[INFO]    \- org.hamcrest:hamcrest-core:jar:1.1:test

[INFO] --- maven-dependency-plugin:2.8:tree (default-cli) @ PracticeMaven ---
[INFO] org.example:PracticeMaven:jar:1.0-SNAPSHOT
[INFO] \- junit:junit:jar:4.11:test
[INFO]    \- org.hamcrest:hamcrest-core:jar:1.3:test

org.hamcrest:hamcrest-core如果您看到我们在 pom.xml 中提到这两个 junit 时存在冲突。它应该选择org.hamcrest:hamcrest-core:jar:1.3作为首先提到的4.11。但事实并非如此。它选择junit 4.10org.hamcrest:hamcrest-core:jar:1.1

我正在使用最新的 Apache Maven 3.6.3。

标签: javamavenmaven-3

解决方案


为什么你看到这个感到惊讶?

它可能总是取最后一个。如果可能,请避免这种情况(我能看到的唯一用例是更改在父 POM 中定义的依赖项)。


推荐阅读