我的项目(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返回5.1.14.RELEASE,这超出了B中指定的范围。在树中,spring-jms -jms列出了两次,两个条目都有5.1.14.RELEASE。
我没有在A中列出spring-jm,我知道我可以将它添加到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)发布于 2020-06-28 12:42:01
如果你的一个依赖项使用的是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>
发布于 2020-06-28 12:56:36
运行mvn dependency:tree命令并尝试查找spring-jms的所有外观。
当maven解析依赖关系时,如果存在不同版本的依赖关系,它将在依赖关系树中采用最接近根的深度。
因此,如果您的项目具有以下树:
YOUR_PROJECT
|___ <PROJECT_B>
| |__spring-jms-v1 // depth = 2
|___spring-jms-v2 // depth = 1Maven将采用spring-jms-v2,因为它更接近根
在任何情况下,mvn dependency:tree都会显示“根”的版本和完整路径。
https://stackoverflow.com/questions/62602235
复制相似问题