maven enforcer plugin标记传递依赖中的dependencyConvergence错误

时间:2014-03-19 23:34:02

标签: maven transitive-dependency maven-enforcer-plugin

场景:我的项目启用了maven-enforcer-plugin dependencyConvergence规则。它依赖于一个库,它通过使用dependencyManagement声明来纠正自己的依赖性收敛,但它似乎不会影响下游依赖版本的解析。

我正在讨论的错误消息类型的示例(请注意,d继承了c作为Dependency convergence error for org.apache.commons:commons-lang3:3.0 paths to dependency are: +-com.example:d:1.0-SNAPSHOT +-com.example:c:1.0-SNAPSHOT +-com.example:b:1.0-SNAPSHOT +-org.apache.commons:commons-lang3:3.0 and +-com.example:d:1.0-SNAPSHOT +-com.example:c:1.0-SNAPSHOT +-org.apache.commons:commons-lang3:3.1 模块下的传递依赖项的两个版本:

mvn dependency:tree

c显示出类似的不一致。 [INFO] --- maven-dependency-plugin:2.8:tree (default-cli) @ c --- [INFO] com.example:c:jar:1.0-SNAPSHOT [INFO] +- com.example:b:jar:1.0-SNAPSHOT:compile [INFO] | \- (org.apache.commons:commons-lang3:jar:3.1:compile - version managed from 3.0; omitted for duplicate) [INFO] \- org.apache.commons:commons-lang3:jar:3.1:compile 已管理传递版本:

d

[INFO] --- maven-dependency-plugin:2.8:tree (default-cli) @ d --- [INFO] com.example:d:jar:1.0-SNAPSHOT [INFO] \- com.example:c:jar:1.0-SNAPSHOT:compile [INFO] +- com.example:b:jar:1.0-SNAPSHOT:compile [INFO] | \- (org.apache.commons:commons-lang3:jar:3.0:compile - omitted for conflict with 3.1) [INFO] \- org.apache.commons:commons-lang3:jar:3.1:compile 将其视为冲突:

d

这似乎是一个潜在的无穷无尽的问题。如果我使用d中的dependencyManagement来纠正它,那么我只是将问题向下推送到c的任何消费者。我可以通过在c项目的pom中排除传递依赖来避免错误,但这就是为什么我在{{1}}中有dependencyManagement声明的原因!

我认为这是Maven中的一个错误,或者可能是在enforcer插件中。我错过了什么吗?处理这种情况的正确方法是什么?

这是http://jira.codehaus.org/browse/MNG-3038的情况(自2007年开始!)?在我的例子中,依赖在遍布各处使用。

1 个答案:

答案 0 :(得分:0)

你是对的,这将是一个潜在的无穷无尽的问题。这是因为您没有修复组件“b”中的依赖项。管理'c'或'd'中的依赖关系并不能解决问题:组件'b'可能会破坏新版本,或者甚至可能包含commons-lang:3.0。在后一种情况下,您在类路径中有两个不同版本的commons-lang,如果您的应用程序正常工作,那将非常幸运。