java - Maven 解析的版本与传递依赖中的版本不匹配
问题描述
我的项目 (A) 依赖于另一个专有项目 (B)。spring-jms
B作为这样的依赖项列出( spring.version
is [4.3.9.RELEASE, 4.3.18.RELEASE]
):
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-jms</artifactId>
<version>${spring.version}</version>
</dependency>
甲->乙->spring-jms
但是,当我mvn clean dependency:tree -Dverbose=true
在 A 中运行时,spring-jms
返回为 5.1.14.RELEASE,它超出了 B 中指定的范围。在树中,spring-jms 列出了两次,并且两个条目都有 5.1.14.RELEASE。
我没有在 A 中列出 spring-jms。我知道我可以将它添加到dependencyManagement
A 中以解决问题,但我仍然想知道它为什么会解决该版本。
下面是显示树的部分spring-jms
。这些是它列出的唯一地方。
[INFO] --- maven-dependency-plugin:2.8:tree (default-cli) @ project A ---
[INFO] project A
[INFO] +- project B
[INFO] | +- (org.springframework:spring-context:jar:5.1.14.RELEASE:compile - omitted for duplicate)
[INFO] | +- org.springframework:spring-jms:jar:5.1.14.RELEASE:compile
[INFO] | | \- (org.springframework:spring-messaging:jar:5.1.14.RELEASE:compile - version managed from 5.1.11.RELEASE; omitted for duplicate)
[INFO] | +- org.springframework:spring-aop:jar:5.1.14.RELEASE:compile
[INFO] | +- org.springframework:spring-oxm:jar:5.1.14.RELEASE:compile
[INFO] | +- org.springframework:spring-expression:jar:5.1.14.RELEASE:compile
[INFO] | +- (org.apache.commons:commons-collections4:jar:4.3:compile - omitted for duplicate)
[INFO] | +- org.bouncycastle:bcprov-jdk15on:jar:1.56:compile
[INFO] | +- org.springframework.integration:spring-integration-jms:jar:5.1.9.RELEASE:compile
[INFO] | | \- (org.springframework:spring-jms:jar:5.1.14.RELEASE:compile - version managed from 5.1.11.RELEASE; omitted for duplicate)
解决方案
运行mvn dependency:tree
命令并尝试找到 spring-jms 的所有外观。
当 maven 解决依赖关系时,如果存在不同版本的依赖关系,它将在依赖关系树的深度方面最接近根。
因此,如果您的项目具有以下树:
YOUR_PROJECT
|___ <PROJECT_B>
| |__spring-jms-v1 // depth = 2
|___spring-jms-v2 // depth = 1
Maven将采取spring-jms-v2
,因为它更接近根
在任何情况下,mvn dependency:tree
都会显示“root”的版本和完整路径