当项目中引入新的jar包或者升级jar后,重新构建Maven项目时常出现这种报错:
Failed to execute goal org.apache.maven.plugins:maven-enforcer-plugin:3.0.0-M2:enforce (enforce-rules) on project xxx-xxxx: Some Enforcer rules have failed.
报错信息
从报错信息看和Maven enforcer plugin有关,首先让我们了解一下Maven enforcer。
Maven enforcer是什么
Maven Enforcer插件是一个用于强制执行特定规则的Maven插件。它可以帮助您确保项目中的依赖项和构建环境符合特定的要求,例如强制使用特定版本的Java、强制执行依赖项收敛规则等。Maven Enforcer插件非常有用,可以确保项目的稳定性和可靠性。
Maven Enforcer插件提供了许多规则,可以根据需要进行配置。以下是一些常用的规则:
- Require Java Version:强制要求使用特定版本的Java。
- Require Maven Version:强制要求使用特定版本的Maven。
- Require Plugin Versions:强制要求使用特定版本的插件。
- Dependency Convergence:强制要求依赖项收敛,即确保项目中只使用一个版本的依赖项。
- Banned Dependencies:禁止使用特定的依赖项。
- Require Property:强制要求使用特定的属性。
从报错警告信息Dependency Convergence可知,maven-enforcer插件强制要求依赖项收敛时出错,即项目中有多个版本的依赖项。
对项目依赖项进行分析,可以使用mvn dependency命令,这里为了方便查看,使用Dependency Analyzer进行依赖分析。
Dependency Analyzer
Dependency Analyzer是一个开源的Java依赖项分析工具,它可以识别项目中的依赖项,以及这些依赖项之间的关系。使用Dependency Analyzer,可以更轻松地管理项目中的依赖项,并确保它们之间的兼容性和稳定性。
Dependency Analyzer具有以下主要功能:
- 识别依赖项:Dependency Analyzer可以扫描项目中的所有依赖项,并将它们列出。包括直接依赖项和传递性依赖项。
- 分析依赖项:Dependency Analyzer可以分析依赖项之间的关系,并确定它们之间的兼容性。
- 生成报告:Dependency Analyzer可以生成各种报告,例如依赖项列表、依赖项冲突报告等。
Maven-> Analyze Dependencies,点击show conflict only,发现guava的版本有冲突,分别是19.0和31.1-jre。
或者选中pom.xml文件,点击Dependency Analyzer后选中Conflicts,也说明存在多个guava版本。
解决方法
- 方法一是使用exclusion标签。通过在冲突的jar包的dependency内添加exclusion标签将其中引入的guava版本排除,一般是排除低版本,保留最新的。
- 方法二是使用 Dependency Management
如果有多个模块或子项目,可以使用 Maven 的 Dependency Management 来集中管理依赖版本。在父项目的 <dependencyManagement>
标签中,指定所有共享依赖的版本。这样,子项目中的依赖可以直接使用指定的版本,而不必依赖传递性版本。
参考
https://maven.apache.org/enforcer/maven-enforcer-plugin/
https://stackoverflow.com/questions/16100315/solving-maven-dependency-convergence-issues
https://www.cnblogs.com/qyf404/p/4829327.html
标签:插件,依赖,Analyzer,Maven,Dependency,enforcer From: https://www.cnblogs.com/techs/p/17544811.html