当引用相同工件的冲突版本时,如何让Maven失败?

时间:2010-07-29 17:09:58

标签: maven-2

如果在我的依赖关系树中使用不同版本引用相同的工件,我希望我的Maven构建失败。这似乎是一个相当简单的选择,但我无法弄清楚如何做到这一点。有线索吗?

3 个答案:

答案 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)