java - 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.10
和org.hamcrest:hamcrest-core:jar:1.1
。
我正在使用最新的 Apache Maven 3.6.3。
解决方案
为什么你看到这个感到惊讶?
它可能总是取最后一个。如果可能,请避免这种情况(我能看到的唯一用例是更改在父 POM 中定义的依赖项)。
推荐阅读
- docker - 如何使用 bazel rules_docker 中的 container_image 或 container_layer 为 empty_dir 定义所有者?
- sql - 如何将两个表连接在一起(一对多关系),但只从第二个表中选择第三个匹配项?
- python - 使用字典获取拼字游戏单词的总分
- javascript - 在函数之外获取变量输出
- python - 使用 sqlalchemy 的带有参数的 IN 条件
- python - 在类中调用对象
- google-earth-engine - 我收到此错误:生成图表时出错:轴 # 0 的数据列不能属于字符串类型
- swiftui - 值更改后条件不触发
- powershell - 从网络文件夹静默安装 msi 和 exe
- python - Python3 无法“az login”