代码之家  ›  专栏  ›  技术社区  ›  Armand

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

  •  22
  • Armand  · 技术社区  · 14 年前

    如果依赖关系树中的不同版本引用了相同的工件,我希望Maven构建失败。这似乎是一个相当琐碎的选择,但我不知道怎么做。有什么线索吗?

    4 回复  |  直到 14 年前
        1
  •  17
  •   Craig P. Motlin    13 年前

    maven enforcer插件有一个 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
    
        2
  •  3
  •   Pascal Thivent    14 年前

    这个 Maven Dependency Plugin 将包括一个新的 dependency:analyze-duplicate 在它的版本2.2中,这是最接近的东西,你可以得到没有具体的发展(它不会失败的建设,但会列出重复的依赖关系)。

    已为添加此目标 MDEP-206 ( 添加新Mojo以查找声明的重复依赖项 ),这是固定的,但版本2.2尚未发布,因此如果要使用此功能,则必须从源树中生成快照:

    https://svn.apache.org/repos/asf/maven/plugins/trunk/maven-dependency-plugin/

    如果您真的想在重复的情况下失败构建,可以编写自己的mojo(扩展上面的mojo)或者提交Maven依赖插件的RFE。

    作为旁注,Maven 3确实如此 开箱即用。准确地说,这将作为 在Maven 3.0中,不中断现有的Maven 2.x构建(请参阅 MNG-4005 )并将增加到 错误 MNG-4622 ).

        3
  •  1
  •   shipmaster    14 年前
        4
  •  1
  •   AlikElzin-kilaka planben    9 年前

    添加以下插件:

    资料来源: http://maven.apache.org/enforcer/enforcer-rules/dependencyConvergence.html

    <plugin>
        <groupId>org.apache.maven.plugins</groupId>
        <artifactId>maven-enforcer-plugin</artifactId>
        <executions>
            <execution>
                <configuration>
                    <rules>
                        <dependencyConvergence/>
                    </rules>
                </configuration>
                <goals>
                    <goal>enforce</goal>
                </goals>
            </execution>
        </executions>
    </plugin>