我具有以下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.25
? JerseyClient 2.27
显然取决于JerseyCommon 2.25
?这是因为JerseyClient 2.27
POM拥有${project.version}
作为变量,并且以某种方式与依赖管理混为一谈了吗?
答案 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