Java 项目依赖冲突检测和处理方法

巧用 IDEA 的工程配置文件检查依赖包的版本

有时我们需要检测项目中依赖的 JAR 包版本是否符合要求。例如,之前 Fastjson 出现重大漏洞,公司要求升级到 1.2.29 版本。

还有一种常见情况是,一个 Java Maven 项目通常包含多个模块。现在需要检查一些常见依赖包 (如 slf4j、jackson 等) 在各个模块中的版本是否一致。

由于存在传递依赖的情况,仅查看 pom.xml 文件是不够的。此时,你可以使用 mvn dependency:tree 命令进行检查,如下所示:

mvn dependency:tree -Dverbose -Dincludes=org.slf4j

这种方法的优点在于准确且信息详细,但较为耗时。下面介绍一种快速的方法,即巧妙利用 IDEA 的工程配置文件 *.iml

这些文件记录了对应模块/项目的所有依赖包版本,包括传递依赖,因此我们只需简单地使用 grep 命令即可进行检查。

fastjson

grep fastjson**/*.iml | grep -v 1.2.29

slf4j

grep slf4j**/*.iml | grep -v '1.7.12'
grep slf4j-log4j12**/*.iml

jackson

grep com.fasterxml.jackson**/*.iml | grep -v '2.9.3'

请注意,当项目在 IDEA 中处于打开状态时,iml 文件可能不会及时更新。建议刷新 Maven 项目依赖,关闭项目后,再使用上述 grep 命令。

使用 Maven Helper 插件

安装完 Maven Helper 插件后,打开 pom.xml 文件时,下方会出现 Dependency Analyzer 选项卡,如下图所示。

可以看出,xml-apis 存在冲突,发生冲突的依赖路径是 stanford-corenlpxomxalan

如果你对依赖路径的查看不够直观,还可以使用 IDEA 自带的“显示依赖” (Show Dependencies) 功能,效果如下图所示。

参考文献