首页 > 解决方案 > Maven 解析的版本与传递依赖中的版本不匹配

问题描述

我的项目 (A) 依赖于另一个专有项目 (B)。spring-jmsB作为这样的依赖项列出( spring.versionis [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。我知道我可以将它添加到dependencyManagementA 中以解决问题,但我仍然想知道它为什么会解决该版本。

下面是显示树的部分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)

标签: javaspringmavenspring-jms

解决方案


运行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”的版本和完整路径


推荐阅读