大家好,我是指北君。
在我们平时的开发过程中,常常会遇到引入各种不同的 jar 包,然后引发的 Maven
依赖冲突,今天我们来学习下如何使用 Maven 命令检测 pom.xml
中的重复依赖项。
为什么要检测重复的依赖关系
在pom.xml
中, 经常引入各种不同的jar 包, 又会依赖其他的jar。特别是一些常用的工具库,比较容易出现版本冲突,例如,让我们考虑下面的pom.xml
。
1 |
|
从上面的代码中,commons-lang3
被引用了两次,而且版本号也不一样。 现在我们就来看看如何使用Maven命令来检测这些重复的依赖关系。
依赖树命令
让我们在终端运行 mvn dependency:tree
的命令,看看输出结果
1 |
|
我们可以看到,commons-lang3
jar的3.11版和 3.12 版同时被引入进来了,出现这种情况是因为Maven选择了pom.xml
中后来出现的依赖。
依赖关系analyze-duplicate
命令
现在让我们运行 mvn dependency:analyze-duplicate
,看看输出输出结果。
1 |
|
我们注意到,WARNING
和INFO
日志语句都提到了重复依赖的存在。
如果存在重复的依赖,则构建失败
在上面的例子中,我们看到了如何检测重复的依赖关系,但BUILD
仍然是成功的,单这可能导致使用了不正确的 jar 版本。
使用[Maven Enforcer Plugin](https://maven.apache.org/enforcer/maven-enforcer-plugin/index.html),我们可以确保在存在重复依赖的情况下构建不成功。
我们需要在pom.xml
中加入这个Maven插件,并加入banDuplicatePomDependencyVersions
规则。
1 |
|
现在,该规则约束了我们的Maven构建。
1 |
|
删除重复的依赖关系
只要确定了重复的依赖关系,我们就需要在 pom.xml
中删除它们,只保留那些我们项目使用的唯一依赖关系。
总结
本文中,我们学习了如何使用mvn dependency:tree
和mvn dependency:analyze-duplicate
命令检测Maven中的重复依赖,还学习了如何使用Maven Enforcer插件,通过应用内置规则使包含重复依赖的构建失败。