关于maven的规则插件:Maven Enforcer plugin
Posted 沧海一粟,何以久远
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了关于maven的规则插件:Maven Enforcer plugin相关的知识,希望对你有一定的参考价值。
Maven提供了Maven-Enforcer-Plugin插件,用来校验约定遵守情况(或者说校验开发环境)。比如JDK的版本,Maven的版本,开发环境(Linux,Windows等),依赖jar包的版本等等
看有些文章说,这个插件检查的是maven最终使用的版本情况,我不认同,因为这个插件有个设置是:是否检查传递依赖
如果不设置,就有可能失去对属于间接依赖的插件的检查(假如这个依赖插件只出现在间接依赖里)如果设置了,就会检查传递性依赖,如果传递性依赖不满足条件也会导致项目编译失败,这是不合理的,因为maven最终发布的项目jar包里,有可能并包含这个依赖(在处理冲突时去掉:路径最短原则;第一声明原则)
另外:这个插件无法处理像 [INFO] | \\- org.springframework:spring-expression:jar:3.2.4.RELEASE:compile 这种后面还带“RELEASE”信息的
我们再来看下mvn的dependency插件的功能:
mvn dependency:tree -Dverbose 可以显示哪些版本因为冲突而被忽略
mvn dependency:copy-dependencies -DoutputDirectory=$WORKSPACE/dependencies可以把项目的所有依赖copy到一个指定的目录,通过这个目录,你可以看到项目的所有依赖信息。
你在根目录(父pom文件位置)执行这条命令,就能看到项目的所有依赖(包括传递性依赖);你在子模块(子pom.xml文件所在目录)目录执行这个命令,就能看到子模块的所有依赖(包括传递性依赖),而且是从上图的信息里可以看到,各个模块冲突的依赖已经被忽略。
但是它存在的问题是,如果多个子模块含有一个依赖的多个版本,该如何处理?最终的项目打包会使用哪一个版本呢?
mvn install/mvn deploy 本地安装或者远程部署里,只能存在一个版本的依赖
内嵌的规则:
http://maven.apache.org/enforcer/enforcer-rules/index.html
自定义规则:
http://maven.apache.org/enforcer/enforcer-api/writing-a-custom-rule.html
参考:
1、http://www.cnblogs.com/qyf404/p/4829327.html
2、http://blog.csdn.net/wangjunjun2008/article/details/11599307
3、http://zhwj184.iteye.com/blog/1528627
4、https://oolap.com/2015-10-22-use-maven-enforcer-plugin-check-deps
5、官网:http://maven.apache.org/enforcer/maven-enforcer-plugin/
以上是关于关于maven的规则插件:Maven Enforcer plugin的主要内容,如果未能解决你的问题,请参考以下文章