如何检查Maven中的库冲突


出版日期:

更新:


技术文章 > 如何检查Maven中的库冲突

2026状态和安全使用

结论:运行mvn dependency:tree来检查已解析的图,然后确定哪个路径引入了意外版本。使用更新的直接依赖项 dependencyManagement 或狭义合理的排除来故意修复声明。

你将学到什么

  • “最近定义”中介如何隐藏请求的传递版本。
  • 详细且经过过滤的依赖关系树输出如何缩小冲突。
  • 为什么删除本地软件仓库文件或添加随机排除项不是持久的解决方案。

这适用于哪些人:调查链接错误、意外类或易受攻击的传递版本的 Java 开发人员。

2026 位置:插件选项因版本而异,因此请检查当前的依赖插件文档。将图形检查与组织批准的软件组合分析过程结合起来;一棵干净的树本身并不能证明依赖关系是安全的。

安全注意事项:原始文章中的命令和配置示例尚未在当前生产环境中重新运行。应用之前,请在单独的测试环境中验证支持的版本、备份、访问控制和回滚步骤。

官方主要来源

概述。

如何在Maven中检查库冲突。 Maven会自动解决jar库的依赖关系,但默认配置不会告知你冲突情况。 这就是在这种情况下如何在Maven中检查库冲突。

目录

  1. 当Maven中发生库冲突时
  2. 如何检查
  3. 摘要

1. 当Maven中发生库冲突时

Maven自动解决Java库的依赖问题。 自动依赖项解析意味着,如果你有一个你需要的Jar文件,它将自动获得运行该Jar所需的Jar。 关于具体库的依赖项解决方式的更多信息,请参见以下文章。

Maven如何自动解决jar库的依赖项。

Maven 不会自动消除所有依赖冲突;缺少适当检查时,冲突甚至可能被忽略。本节介绍检测方法。

2. 如何检查

有两种主要的方法来检查图书馆的冲突情况

  • 引入插件
  • 通过命令进行预构建确认。

构建插件通过 pom.xml 添加检查,而命令检查则在构建前手动运行。下面分别说明两种方法。

2-1. 引入插件

以下Maven网站可能会有所帮助。

http://maven.apache.org/enforcer/enforcer-rules/dependencyConvergence.html

在pom.xml中添加以下设置。

pom.xml


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

如果插入了上述设置,就会出现以下错误,如果在构建时有库冲突,则构建失败。

[WARNING] 
Dependency convergence error for org.apache.commons:commons-collections4:4.1 paths to dependency are:
+-com.example.todo:todo-web:1.0.0-SNAPSHOT
  +-org.apache.poi:poi:3.17
    +-org.apache.commons:commons-collections4:4.1
and
+-com.example.todo:todo-web:1.0.0-SNAPSHOT
  +-org.apache.commons:commons-collections4:4.0

[WARNING] Rule 0: org.apache.maven.plugins.enforcer.DependencyConvergence failed with message:
Failed while enforcing releasability. See above detailed error message.

如果在没有插件的情况下进行构建,则不会出现错误,构建会正常终止。 如果你想检测冲突,一定要设置这个。

2-2. 通过命令进行预构建确认。

通过以下命令检查依赖关系

mvn dependency:tree -Dverbose

命令,如果有冲突则显示 "省略冲突"。 也可以把输出范围缩小到只有那些存在冲突的区域,如以下命令。 注意:查找 "是Windows的命令。 对于Linux,这就是 "grep"。

mvn dependency:tree -Dverbose | find "omitted for conflict"

可以通过查看上述命令的结果来检查图书馆冲突。

3. 摘要

如果你想可靠地检测库冲突,我们推荐 "安装插件"。 引入插件可以确保任何冲突被注意到,因为构建会失败。

■技术文章

查看全部技术文章。


■作者简介

查看作者简介。


■联系我们

就本文内容联系我们。