[英]How to resolve "Dependency convergence error" when using maven enforcer plugin?
我只是想使用一个小的 pom 来获取maven-enforcer-plugin
(在我跳到我的项目 pom 之前,它有 100 多个依赖项。)
在我添加了执行器插件后,我看到Dependency convergence error
。
pom.xml文件在下面(抱歉它不整洁)。
如何在不禁用执行器插件的情况下修复错误。 基本上我想了解如何使用dependencyConvergence
规则背后的概念。
<project xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>com.demo</groupId>
<artifactId>enforcer</artifactId>
<version>0.0.1-SNAPSHOT</version>
<dependencyManagement>
<dependencies>
<!--
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-beans</artifactId>
<version>5.2.13.RELEASE</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-aop</artifactId>
<version>5.2.13.RELEASE</version>
</dependency>
-->
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-core</artifactId>
<version>5.2.10.RELEASE</version>
</dependency>
</dependencies>
</dependencyManagement>
<dependencies>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-context</artifactId>
<version>5.3.5</version>
</dependency>
<dependency>
<groupId>org.springframework.security</groupId>
<artifactId>spring-security-web</artifactId>
<version>5.4.5</version>
</dependency>
</dependencies>
<build>
<plugins>
<plugin>
<artifactId>maven-enforcer-plugin</artifactId>
<version>3.0.0-M3</version>
<executions>
<execution>
<id>dependency-convergence</id>
<goals>
<goal>enforce</goal>
</goals>
<configuration>
<rules>
<dependencyConvergence/>
</rules>
</configuration>
</execution>
</executions>
<configuration>
<rules>
<dependencyConvergence />
</rules>
</configuration>
</plugin>
</plugins>
</build>
</project>
这是否意味着,我必须像在这个版本的pom.xml 中一样在dependencyManagement 中明确声明每个非收敛依赖项(向dependencyManagement 添加依赖项)。
spring-context
的问题仍然存在,因为我将它添加为直接依赖项,然后在不同版本的依赖项管理中。
基本上 - 我能够修复错误,但还不能清楚地掌握规则。
修复一个 - pom.xml - 将依赖管理中的版本更新为明确使用的版本。 所以现在不需要在依赖项中明确给出版本。 但这需要我能够访问父 pom 的依赖管理。 如果我的说法是对的,可能不会每次都是这种情况。
修复两个pom.xml - 从 spring-security-web 中排除 spring-context 并且它起作用了。 但是如果要进行十几个排除,那将是一个痛苦的过程。
如果这是收敛规则的方法? 在具有 100 多个依赖项和 100 多个传递依赖项的企业项目中,材料清单 (BOM) 将非常庞大,并且需要时间来构建。 嗯嗯。 (我同意,对使用的版本和使用像 <xyz.version> 这样的属性会有更多的控制,升级可以很容易地完成)。
如果有人能列出涉及收敛的规则,我将不胜感激。
依赖收敛错误意味着
典型的解决方法是在dependencyManagement 中定义一个条目来解决问题,或者import
适当的BOM 导入dependencyManagement。
这最好在多模块项目的主 POM 中完成,但也可以在模块中完成。
请注意,最好省略<dependencies>
部分中的<version>
标记,以便在任何地方使用 dependencyManagement。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.