在 Maven 中跟踪托管依赖项版本
Posted
技术标签:
【中文标题】在 Maven 中跟踪托管依赖项版本【英文标题】:Tracking managed dependency versions in Maven 【发布时间】:2012-12-28 10:43:20 【问题描述】:假设我有一个包含大量依赖项的复杂项目。依赖项的版本由许多导入范围 pom 管理。我的项目依赖于工件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 或更高版本。当然,其中一个导入 pom 正在强制使用错误的版本。但是除了搜索所有这些之外,还有什么方法可以知道是哪一个?
【问题讨论】:
您是否尝试过在您的父项目上运行mvn site
并查看dependency convergence
输出?
传递依赖没有出现在依赖收敛报告中。它也没有显示管理依赖项的位置。
【参考方案1】:
您应该尝试使用 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>
这将显示哪些***依赖项在其依赖项树中具有不同版本的其他依赖项。然后,您可以使用排除来抑制您不想要的依赖项变体。
【讨论】:
【参考方案2】:当 2 个或多个父 Pom 与同一个工件发生冲突时会发生这种情况。
例如:
[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
【讨论】:
以上是关于在 Maven 中跟踪托管依赖项版本的主要内容,如果未能解决你的问题,请参考以下文章
如何将 maven 托管依赖项复制到 war\web-inf\lib 中,以便我可以在 Eclipse 中以调试模式运行我的 GWT 2.0 应用程序?
如果使用的 JVM 是 x86 或 x64,则以不同方式解决 Maven 依赖项?