使用Maven检测依赖项冲突 [英] Detecting dependency conflicts with Maven

查看:21
本文介绍了使用Maven检测依赖项冲突的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我有一个由maven构建的Java应用程序,它引入了许多库。这个应用程序在一个git repo中(有自己的maven版本),每个库都在自己的git repo中(有自己的maven版本)。此外,应用程序和某些库都依赖于芭乐。

应用程序的pom.xml指定了芭乐版本19.0:

<dependencyManagement>
    <dependencies>
        <dependency>
            <groupId>com.google.guava</groupId>
            <artifactId>guava</artifactId>
            <version>19.0</version>
        </dependency>
    </dependencies>
</dependencyManagement>

<dependencies>
    <dependency>
        <groupId>com.google.guava</groupId>
        <artifactId>guava</artifactId>
    </dependency>
</dependencies>

该应用程序还导入了另一个名为Library1的库。图书馆1也依赖番石榴。但是Library1的pom.xml指定了较新版本的番石榴:

<dependencyManagement>
    <dependencies>
        <dependency>
            <groupId>com.google.guava</groupId>
            <artifactId>guava</artifactId>
            <version>23.0</version>
        </dependency>
    </dependencies>
</dependencyManagement>

<dependencies>
    <dependency>
        <groupId>com.google.guava</groupId>
        <artifactId>guava</artifactId>
    </dependency>
</dependencies>

构建应用程序时,Maven选择在应用程序级别指定的芭乐版本。但这导致Library1失败,因为它正在等待较新版本的番石榴。

如果我们一直使用GRADE并尝试指定番石榴版本的这种组合,我相信Gradle会导致构建失败,这可能是正确的做法。

考虑到我们的pom.xml文件可能存在这样的版本差异,是否有办法设置Maven,使其能够注意到该差异,并使构建失败或显示有关该问题的非常显著的警告?

Maven

您可以在推荐答案中设置依赖收敛实施规则。此规则要求依赖项版本号收敛。

如果项目有两个依赖项A和B,它们都依赖于相同的构件C,则如果A依赖于C的不同版本而不是B依赖的C版本,则此规则将使生成失败。

规则可以按如下方式添加。

<project>
  ...
  <build>
    <plugins>
      ...
      <plugin>
        <groupId>org.apache.maven.plugins</groupId>
        <artifactId>maven-enforcer-plugin</artifactId>
        <version>3.0.0-M2</version>
        <executions>
          <execution>
            <id>enforce</id>
            <configuration>
              <rules>
                <dependencyConvergence/>
              </rules>
            </configuration>
            <goals>
              <goal>enforce</goal>
            </goals>
          </execution>
        </executions>
      </plugin>
      ...
    </plugins>
  </build>
  ...
</project>

更多详细信息here

这篇关于使用Maven检测依赖项冲突的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆