i具有以下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}
作为变量,并且它以某种方式与依赖关系管理混乱?
依赖树ump
Jersey-client 2.27版本取决于泽西岛 - common 2.27版本,根据以下链接:
https://mvnrepository.com/artifact/org.glassfish.jersey.core/jersey-client/2.27
但是,在解决了及物依赖性之后,它肯定会拉出2.25版的泽西岛,而Maven将2.25版本作为最近的孩子。这就是它决定拉2.25版本的原因。
引用的是,可以在maven-enforcer-plugin
的帮助下轻松研究这种类型的依赖冲突问题。以下链接进一步说明了此插件的用法:
https://dzone.com/articles/solving-dependency-conflicts-in-maven