巧用 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-corenlp
、xom
和 xalan
。
如果你对依赖路径的查看不够直观,还可以使用 IDEA 自带的“显示依赖” (Show Dependencies) 功能,效果如下图所示。