关于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/

转载于:https://www.cnblogs.com/shengulong/p/8280870.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值