假设我有一个包含大量依赖项的复杂项目。依赖项的版本由许多导入范围poms管理。我的项目依赖于工件group:artifact
,它依赖于工件group:transitive-dependency
。当我运行dependency:tree
时,我看到类似的内容:
+- group:artifact:jar:1.3
+- group:transitive-dependency:jar:1.1 (version managed from 1.3)
问题是group:artifact:1.3
需要group:transitive-dependency
版本1.3或更高版本。当然其中一个导入poms正在强制使用错误的版本。但除了搜索所有这些之外,还有什么办法可以知道它是哪一个吗?
答案 0 :(得分:5)
您应该尝试maven-enforcer-plugin并将其配置为执行DependencyConvergence,例如。
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-enforcer-plugin</artifactId>
<version>1.2</version>
<executions>
<execution>
<id>enforce</id>
<configuration>
<rules>
<DependencyConvergence/>
</rules>
</configuration>
<goals>
<goal>enforce</goal>
</goals>
</execution>
</executions>
</plugin>
这将显示哪些顶级依赖项在其依赖项树中具有不同版本的其他依赖项。然后,使用排除项禁止不需要的依赖项变体。
答案 1 :(得分:2)
当2个或更多父Poms与同一个工件发生冲突时会发生这种情况。
例如,
[INFO] | \- com.rbs.gbm.risk:framework-core:jar:1.6.6:compile
[INFO] | +- com.rbos.gbm.risk:log4jextensions:jar:2.3:compile (version managed from 2.2)
[INFO] | +- oro:oro:jar:2.0.8:compile
就我而言,framework-core提到了log4jextentsions 2.2。我的超级pom说log4jextentsions 2.3。不知何故,框架核心说服maven使用log4jextentsions 2.2。
稍后当我更新framework-core pom以使用2.3时,
[INFO] | \- com.rbs.gbm.risk:framework-core:jar:1.6.6:compile
[INFO] | +- com.rbos.gbm.risk:log4jextensions:jar:2.3:compile
[INFO] | +- oro:oro:jar:2.0.8:compile