前言
maven-enforcer-plugin是一个规范约束maven构建环境的插件,例如Maven版本,JDK版本和OS系列以及更多内置规则和用户创建的规则,旨在统一项目的开发环境。楼主在构建开源项目spring data jpa时,因为maven版本的问题卡在了enforcer这个插件上。网上关于解决此插件报错的方案都无关痛痒,没有深入到错误的实质,故解决问题后,在此做个记录
插件地址:http://maven.apache.org/enforcer/maven-enforcer-plugin/
插件rule校验失败
楼主在构建spring data jpa时maven抛了如下的异常:
代码语言:javascript复制Failed to execute goal org.apache.maven.plugins:maven-enforcer-plugin:3.0.0-M2:enforce (enforce-maven-version) on project spring-data-jpa: Some Enforcer rules have failed. Look above for specific messages explaining why the rule failed. -> [Help 1]
单看这个异常,就是当前构建环境没有通过插件规则校验,但是没有关键的错误信息提示是触发了哪个校验规则,在网上使用上面的错误信息寻遍了都没看到具体的解决方案。
解决问题
仔细查看日志,其实enforce是有打印日志的,往错误日志的上面一点看就会发现如下警告日志:
代码语言:javascript复制[INFO] --- maven-enforcer-plugin:3.0.0-M2:enforce (enforce-maven-version) @ spring-data-jpa ---
[WARNING] Rule 0: org.apache.maven.plugins.enforcer.RequireMavenVersion failed with message:
Detected Maven Version: 3.3.9 is not in the allowed range 3.5.0.
明确的告诉了你当前的maven版本太低了。所以针对这个问题,楼主总结了如下方案
- 方案一:调整本地环境满足当前的插件约束,比如楼主这里只需要升级本地的maven版本到3.5.0及以上即可解决问题
- 方案二:跳过enforcer的强制约束,在构建的命令加上跳过的指令,如:mvn install -Denforcer.skip=true
- 方案三:设置规则校验失败不影响构建流程,在构建的命令上加指令,如:mvn install -Denforcer.fail=false
结语
本文最后虽然提供了三个解决方案,但是综合来看第三个方案是最优的,首先方案一会比较麻烦,如果只是一些开源项目的话,构建一两次就差不多了,没必要为了一个开源项目单独整一套环境。方案二虽然好使但是有点暴力,直接忽略了环境问题,也有可能带来其他未知的问题,所以楼主推荐方案三的方式,改动最小化,也能看到未通过的规则详情日志,做到心中有数