我的项目(A)依赖于另一个专有项目(B)。 B将spring-jms
列为这样的依赖项(spring.version
是[4.3.9.RELEASE, 4.3.18.RELEASE]
):
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-jms</artifactId>
<version>${spring.version}</version>
</dependency>
A-> B-> spring-jms
但是,当我在A中运行mvn clean dependency:tree -Dverbose=true
时,spring-jms
返回5.1.14.RELEASE,它超出了B中指定的范围。在树中,spring-jms被列出两次并且两个条目都具有5.1.14.RELEASE。
我在A中没有列出spring-jms。我知道可以将其添加到A中的dependencyManagement
中来解决此问题,但是我仍然想知道为什么它可以解决该版本。
下面是显示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)
答案 0 :(得分:0)
如果您的依赖项之一使用5.1.14.RELEASE,则可能会发生。如果您使用的是IntelliJ,则可以使用右侧的maven部分来检查依赖关系,在那里您可以找到答案。然后您可以使用排除功能删除该依赖项
<dependency>
<groupId>com.smaple.dependency</groupId>
<artifactId>dependency</artifactId>
<version>version</version>
<exclusions>
<exclusion>
<groupId>springjms</groupId>
...
</exclusion>
</exclusions>
</dependency>
答案 1 :(得分:0)
运行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
将同时显示版本和“根”的完整路径