Maven解析的版本与传递依赖项中的版本不匹配

时间:2020-06-26 20:17:04

标签: java spring maven spring-jms

我的项目(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)

2 个答案:

答案 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将同时显示版本和“根”的完整路径