繁体   English   中英

使用maven执行器插件时如何解决“依赖收敛错误”?

[英]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的问题仍然存在,因为我将它添加为直接依赖项,然后在不同版本的依赖项管理中。

基本上 - 我能够修复错误,但还不能清楚地掌握规则。

  1. 修复一个 - pom.xml - 将依赖管理中的版本更新为明确使用的版本。 所以现在不需要在依赖项中明确给出版本。 但这需要我能够访问父 pom 的依赖管理。 如果我的说法是对的,可能不会每次都是这种情况。

  2. 修复两个pom.xml - 从 spring-security-web 中排除 spring-context 并且它起作用了。 但是如果要进行十几个排除,那将是一个痛苦的过程。

如果这是收敛规则的方法? 在具有 100 多个依赖项和 100 多个传递依赖项的企业项目中,材料清单 (BOM) 将非常庞大,并且需要时间来构建。 嗯嗯。 (我同意,对使用的版本和使用像 <xyz.version> 这样的属性会有更多的控制,升级可以很容易地完成)。

如果有人能列出涉及收敛的规则,我将不胜感激。

依赖收敛错误意味着

  • 依赖不在dependencyManagement中
  • 依赖树中有不同版本的依赖

典型的解决方法是在dependencyManagement 中定义一个条目来解决问题,或者import适当的BOM 导入dependencyManagement。

这最好在多模块项目的主 POM 中完成,但也可以在模块中完成。

请注意,最好省略<dependencies>部分中的<version>标记,以便在任何地方使用 dependencyManagement。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM