解决 Maven 依赖性收敛问题
我使用maven-enforcer-plugin来检查依赖性收敛问题。典型的输出为:
[WARNING] Rule 1: org.apache.maven.plugins.enforcer.DependencyConvergence failed
with message:
Failed while enforcing releasability the error(s) are [
Dependency convergence error for junit:junit:3.8.1 paths to dependency are:
+-foo:bar:1.0-SNAPSHOT
+-ca.juliusdavies:not-yet-commons-ssl:0.3.9
+-commons-httpclient:commons-httpclient:3.0
+-junit:junit:3.8.1
and
+-foo:bar:1.0-SNAPSHOT
+-junit:junit:4.11
]
看到此消息,我通常会通过排除传递依赖关系来“解决”它,例如
<dependency>
<groupId>ca.juliusdavies</groupId>
<artifactId>not-yet-commons-ssl</artifactId>
<version>0.3.9</version>
<exclusions>
<!-- This artifact links to another artifact which stupidly includes
junit in compile scope -->
<exclusion>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
</exclusion>
</exclusions>
</dependency>
我想了解这是否真的是一个修复程序,以及以这种方式排除库所涉及的风险。正如我所看到的:
“修复”通常是安全的,只要我选择使用较新版本。这依赖于库作者保持向后兼容性。
通常对Maven构建没有影响(因为更接近的定义获胜),但是通过排除依赖关系,我告诉Maven我知道这个问题,从而安抚maven-enforcer-plugin。
我的想法是否正确,是否有其他方法来处理此问题?我对专注于一般情况的答案感兴趣 - 我意识到上面的例子有点奇怪。junit