如果在我的依赖关系树中使用不同版本引用相同的工件,我希望我的Maven构建失败。这似乎是一个相当简单的选择,但我无法弄清楚如何做到这一点。有线索吗?
答案 0 :(得分:17)
maven-enforcer-plugin有一个dependencyConvergence规则可以满足您的需求。这是文档中的一个例子。
这会导致构建失败:
<dependencies>
<dependency>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-jdk14</artifactId>
<version>1.6.1</version>
</dependency>
<dependency>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-nop</artifactId>
<version>1.6.0</version>
</dependency>
</dependencies>
在编译期间记录此内容:
[ERROR]
Dependency convergence error for org.slf4j:slf4j-api:1.6.1 paths to dependency are:
+-org.myorg:my-project:1.0.0-SNAPSHOT
+-org.slf4j:slf4j-jdk14:1.6.1
+-org.slf4j:slf4j-api:1.6.1
and
+-org.myorg:my-project:1.0.0-SNAPSHOT
+-org.slf4j:slf4j-nop:1.6.0
+-org.slf4j:slf4j-api:1.6.0
答案 1 :(得分:3)
Maven Dependency Plugin将在其版本2.2中包含一个新的dependency:analyze-duplicate
,这是恕我直言,你可以在没有特定开发的情况下获得最接近的东西(它不会使构建失败,但会列出重复的依赖项)。
此目标已添加到MDEP-206(添加新Mojo以查找声明的重复依赖项),这已修复,但版本2.2尚未发布,因此如果您需要使用此功能,您必须从源树构建一个SNAPSHOT:
https://svn.apache.org/repos/asf/maven/plugins/trunk/maven-dependency-plugin/
如果您真的想在重复的情况下使构建失败,可以编写自己的mojo(扩展上面的)或提交Maven Dependency Plugin的RFE。
作为旁注,如果pom包含两个不同版本的依赖项,Maven 3会执行抛出[a]验证错误。为了完全准确,这将在Maven 3.0中报告为 warning ,以便不破坏现有的Maven 2.x版本(请参阅MNG-4005)并将增加到错误在3.1中(见MNG-4622)。
答案 2 :(得分:1)