gpt4 book ai didi

maven - 检测与 Maven 的依赖冲突

转载 作者:行者123 更新时间:2023-12-03 16:40:07 25 4
gpt4 key购买 nike

我有一个 maven 构建的 Java 应用程序,它引入了许多库。应用程序在一个 git 仓库中(有自己的 Maven 构建),每个库都在自己的 git 仓库中(有自己的 Maven 构建)。此外,应用程序和一些库都依赖于 Guava 。

应用程序的 pom.xml 指定了 guava 版本 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 的库。 library1 也依赖于 Guava 。但是 library1 的 pom.xml 指定了更高版本的 guava:
<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 选择了应用程序级别指定的 guava 版本。但这导致 library1 失败,因为它期待更高版本的 Guava 。

如果我们一直在使用 Grade 并试图指定这种 Guava 版本的组合,我相信 gradle 会导致构建失败,这可能是正确的做法。

鉴于我们可能有具有这种版本差异的 pom.xml 文件,有没有办法设置 maven 以便它会注意到差异并且要么构建失败要么显示关于该问题的非常突出的警告?

最佳答案

您可以在 Maven 中设置 dependencyConvergence 强制规则。该规则要求依赖版本号收敛。

如果一个项目有两个依赖项 A 和 B,它们都依赖于同一个 Artifact 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 - 检测与 Maven 的依赖冲突,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57227538/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com