一尘不染

Maven-检测相同依赖项的多个版本

java

我刚刚遇到了一个案例,即我的Maven项目有两个直接依赖项,其中有两个不同版本的特定传递性依赖项。

在我的特殊情况下,我直接依赖以下内容:

    <dependency>
        <groupId>org.jclouds.driver</groupId>
        <artifactId>jclouds-sshj</artifactId>
        <version>${jclouds.version}</version>
    </dependency>

    <dependency>
        <groupId>org.mule.modules</groupId>
        <artifactId>mule-module-jersey</artifactId>
        <version>${mule.version}</version>
    </dependency>

这两个依赖项都对com.sun.jersey:jersey-
core具有(较深)的传递性依赖关系,但是每个都有不同的版本。Maven并没有失败,甚至没有警告(或者,如果没有,我从来没有看到过!)正在发生这样的事情……因此,直到调试了球衣版本时发生的问题,我才注意到它。由jclouds依赖引入的核心导致某些事情中断。

是否存在一个maven插件或其他工具可以检测到这种深度传递依赖重写,并在检测到此类冲突时至少警告用户(或使maven执行失败)…即使默认的maven行为是只是选择解决依赖性时出现的第一个版本?


阅读 236

收藏
2020-12-03

共1个答案

一尘不染

使用Dependency Enforcer插件。当依赖关系无法正确收敛时,它将停止构建。

  <plugin>
    <groupId>org.apache.maven.plugins</groupId>
    <artifactId>maven-enforcer-plugin</artifactId>
    <version>1.0.1</version>
    <executions>
      <execution>
        <id>enforce</id>
        <configuration>
          <rules>
            <DependencyConvergence />
          </rules>
        </configuration>
        <goals>
          <goal>enforce</goal>
        </goals>
      </execution>
    </executions>
  </plugin>
2020-12-03