大家好,我是北军。在我们平时的开发过程中,经常会遇到引入各种jar包导致的Maven依赖冲突。今天我们将学习如何使用Maven命令来检测pom.xml中的重复依赖项。为什么要检测重复依赖pom.xml中经常会引入各种jar包依赖其他jar。特别是一些常用的工具库更容易出现版本冲突。例如,让我们看一下这个pom.xml。<项目>[...]org.apache.commonscommons-lang33.12.0org.apache.commonscommons-lang3<版本>3.11[...]从上面的代码来看,commons-lang3被引用了两次,版本号也不一样。现在让我们看看如何使用Maven命令来检测这些重复的依赖项。依赖树命令让我们在最终运行mvndependency:tree的命令,看看输出结果$mvndependency:tree[INFO]Scanningforprojects...[WARNING][WARNING]Someproblemswereencounteredwhilebuildingtheeffectivemodelforcom.javanorth:maven-duplicate-dependencies:jar:0.0.1-SNAPSHOT[WARNING]'dependencies.dependency.(groupId:artifactId:type:classifier)'必须是唯一的:org.apache.commons:commons-lang3:jar->version3.12.0vs3.11@line14,column15[WARNING][WARNING]强烈建议解决这些问题,因为它们会威胁到构建的稳定性。[WARNING][WARNING]因此,未来的Maven版本可能不再支持构建此类格式错误的项目。[警告][信息][信息]-------------------------[INFO]构建maven-duplicate-dependencies0.0.1-SNAPSHOT[INFO]--------------------------------[罐子]--------------------------------[信息][信息]---maven-dependency-plugin:2.8:tree(default-cli)@maven-重复依赖项---[警告]工件xml-apis:xml-apis:jar:2.0.2已重新定位到xml-apis:xml-apis:jar:1.0.b2[INFO]com.javanorth:maven-duplicate-dependencies:jar:0.0.1-SNAPSHOT[INFO]\-org.apache.commons:commons-lang3:jar:3.11:compile[INFO]------------------------------------------------------------------[信息]构建成功[信息]--------------------------------------------------------------------[信息]总时间:1.136秒...我们可以看,commons-lang3jar的3.11版本和3.12版本是同时引入的。出现这种情况是因为Maven在pom.xml中选择了后面出现的dependencyanalysis-duplicate命令现在让我们运行mvndependency:analyze-duplicate,看看output输出。$mvndependency:analyze-duplicate[INFO]正在扫描项目...[WARNING][WARNING]在为com.javanorth:maven-duplicate-dependencies:jar:0.0.1-SNAPSHOT[构建有效模型时遇到了一些问题警告]'dependencies.dependency.(groupId:artifactId:type:classifier)'必须是唯一的:org.apache.commons:commons-lang3:jar->version3.12.0vs3.11@line14,column15[WARNING][警告]强烈建议解决这些问题,因为它们会威胁到构建的稳定性。[警告][警告]因此,未来的Maven版本可能不再支持构建此类格式错误的项目。[警告][信息][信息]---------------------------[信息]构建maven-duplicate-dependencies0.0.1-SNAPSHOT[INFO]--------------------------------[jar]----------------------------------[信息][信息]---maven-dependency-plugin:2.8:analyze-duplicate(default-cli)@maven-重复依赖dencies---[警告]工件xml-apis:xml-apis:jar:2.0.2已重新定位到xml-apis:xml-apis:jar:1.0.b2[INFO]在你的pom.xml中:oorg.apache.commons:commons-lang3:jar[INFO]--------------------------------------------------[信息]构建成功[信息]---------------------------------------------------------------------[信息]总时间:0.835秒。.我们注意到WARNING和INFO日志语句都提到了重复依赖项的存在。如果存在重复依赖项,构建将失败在上面的示例中,我们看到了如何检测重复依赖项,BUILD仍然成功,但这可能会导致使用不正确的jar版本。使用[MavenEnforcer插件](https://maven.apache.org/enforcer/maven-enforcer-plugin/index.html),我们可以确保在存在重复依赖项的情况下构建不会成功。我们需要将此Maven插件添加到pom.xml并添加banDuplicatePomDependencyVersions规则。[...]org.apache.maven.pluginsmaven-enforcer-plugin<版本>3.0.0no-duplicate-declared-dependenciesenforce[...]现在,应该规则约束了我们的Maven结构。$mvnverify[INFO]Scanningforprojects...[WARNING][WARNING]在为com.javanorth:maven-duplicate-dependencies:jar:0.0.1-SNAPSHOT[WARNING]'dependencies构建有效模型时遇到了一些问题.dependency.(groupId:artifactId:type:classifier)'必须是唯一的:org.apache.commons:commons-lang3:jar->version3.12.0vs3.11@line14,column14[WARNING][INFO]------------------------[信息]构建maven-duplicate-dependencies0.0.1-SNAPSHOT[信息]------------------------------[罐子]----------------------------------[信息][信息]---maven-enforcer-plugin:3.0.0:enforce(no-duplicate-declared-dependencies)@maven-duplicate-dependencies---[警告]规则0:org.apache.maven.plugins.enforcer.BanDuplicatePomDependencyVersions失败并显示消息:在此项目中发现1个重复的依赖项声明:-dependency.dependency[org.apache.commons:commons-lang3:jar](2添es)[INFO]--------------------------------------------------------------------[信息]构建失败[信息]------------------------------------------------------------------[错误]无法在项目maven-duplicate-dependencies上执行目标org.apache.maven.plugins:maven-enforcer-plugin:3.0.0:enforce(no-duplicate-declared-dependencies):移除重复依赖一旦发现重复依赖,我们需要在pom.xml中移除它们,只保留我们项目使用的那些唯一依赖总结在本文中,我们学习了如何使用mvndependency:tree和mvndependency:analyze-duplicate命令检测Maven中的重复依赖项,还学习了如何使用MavenEnforcer插件通过应用内置规则使包含重复依赖项的构建失败。