与父Pom的Maven依赖关系无法正常工作

时间:2018-12-18 01:07:37

标签: java maven maven-2 maven-3

我具有以下Maven结构。

父Pom

<dependencyManagement>
  <dependency>
    <groupId>org.glassfish.jersey.core</groupId>
    <artifactId>jersey-client</artifactId>
    <version>2.27</version>
  </dependency>
</dependencyManagement>

服务Pom

<parent>
    <groupId>com.aliseeks.dependencies</groupId>
    <artifactId>AliseeksLive</artifactId>
    <version>1.0-SNAPSHOT</version>
</parent>

<dependencies>
    <dependency>
        <groupId>org.glassfish.jersey.core</groupId>
        <artifactId>jersey-client</artifactId>
    </dependency>
</dependencies>

依赖冲突:

[INFO] +- org.glassfish.jersey.core:jersey-client:jar:2.27:compile
[INFO] |  +- org.glassfish.jersey.core:jersey-common:jar:2.25.1:compile
[INFO] |  |  +- org.glassfish.jersey.bundles.repackaged:jersey-guava:jar:2.25.1:compile

为什么Maven会加入JerseyCommon 2.25JerseyClient 2.27显然取决于JerseyCommon 2.25?这是因为JerseyClient 2.27 POM拥有${project.version}作为变量,并且以某种方式与依赖管理混为一谈了吗?

Dependency Tree Dump

1 个答案:

答案 0 :(得分:0)

jersey-client 2.27版本取决于以下链接的jersey-common 2.27版本:

https://mvnrepository.com/artifact/org.glassfish.jersey.core/jersey-client/2.27

但是在解决传递依赖关系之后,它肯定会提取2.25版本的jersey-common,并且maven发现2.25版本是最近的子代。这就是它决定拉出2.25版本的原因。

作为参考,可以借助maven-enforcer-plugin轻松调查此类依赖冲突问题。以下链接通过示例进一步说明了此插件的用法:

https://dzone.com/articles/solving-dependency-conflicts-in-maven