使用Maven检测依赖项冲突 [英] Detecting dependency conflicts with Maven
本文介绍了使用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屋!
查看全文