【问题标题】:Maven resolved version doesn't match version in transitive dependencyMaven 解析的版本与传递依赖中的版本不匹配
【发布时间】:2020-10-17 11:56:46
【问题描述】:

我的项目 (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.发布。

我没有在 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)

【问题讨论】:

  • Maven 的 dependency tree 插件可能会有所帮助。
  • 请看我的编辑。依赖树不显示任何其他版本。
  • 您是否使用了verbose 选项?如果没有,请尝试。

标签: java spring maven spring-jms


【解决方案1】:

如果您的依赖项之一使用 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>

【讨论】:

    【解决方案2】:

    运行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 都会显示“根”的版本和完整路径

    【讨论】:

    • 请看我的编辑。依赖树不显示任何其他版本。
    • 你应该在 project-a;s pom 上运行它。在附加的 sn-p 中,我没有看到项目 A 本身的任何依赖关系......为什么?
    猜你喜欢
    • 2022-06-21
    • 2013-07-08
    • 2011-12-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-09-18
    • 1970-01-01
    相关资源
    最近更新 更多