我遇到了maven-enforcer-plugin的问题。它抱怨以下(简化)输出:
[WARNING] Rule 0: org.apache.maven.plugins.enforcer.DependencyConvergence failed with message:
Failed while enforcing releasability the error(s) are [
Dependency convergence error for com.company.project:interfaces:1.0.4 paths to dependency are:
+-com.company.project:product:1.0.14-SNAPSHOT
+-com.company.project:some_part_A:1.0.0
+-com.company.project:interfaces:1.0.4
and
+-com.company.project:product:1.0.14-SNAPSHOT
+-com.company.project:some_part_B:1.0.0
+-com.company.project:some_sub_part_BB:1.1.0
+-com.company.project:interfaces:1.0.4
and
+-com.company.project:product:1.0.14-SNAPSHOT
+-com.company.project:interfaces:1.0.6
问题在于some_sub_part_BB:1.1.0
。根据插件,这部分依赖于1.0.4版的接口。但这是不可能的:some_sub_part_BB
版本1.0.0使用接口版本1.0.3,some_sub_part_BB
版本1.1.0直接使用接口版本1.0.6。我没有some_sub_part_BB
使用版本1.0.4的任何工件。
我想我正在查看该插件的一些错误,但我想调试此问题以确保出现问题。这是任何人以前遇到的问题,还是有人可以提供有关如何调试此问题的任何指示? (我对Maven相当新,除了检查所有pom.xml文件外,我不知道在哪里进一步查看。)
附注:想法是在项目级别POM上指定要使用的接口版本,以便所有(子)部分都同意使用哪个接口。但是,正如您所看到的,不同的部分还指定了它们使用的界面,我不认为这是正确的方法。我还没弄明白如何解决这个问题。
答案 0 :(得分:0)
原来这不是一个错误:在pom.xml文件中,您可以在dependencyManagement
部分中推翻工件的版本。就我而言,有人强制执行1.0.4版的接口。 enforcer插件没有显示这个;在使用详细标志生成依赖关系树之后,它才变得明显,即mvn dependency:tree -Dverbose
。