关于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的主要内容,如果未能解决你的问题,请参考以下文章

使用 maven 插件执行器规则失败

关于maven插件版本标签

关于 Maven 版本插件

关于maven插件在Myeclipse中的使用

Jetty 插件如何为 Maven 工作?

关于maven 把插件依赖一起打包进jar问题