Maven插件之Maven-Enforcer-Plugin2014-03-29 csdn博客 wangjunjun2008实际开发中,项目经理总会告诉开发人员:开发时要遵守什么什么样的约定,命名规范怎么怎样 样....约定优于配置,很重要!比较规范的公司(或者项目组),会把规范写到文档中,让开发人员去遵守。问题来了,怎么才能知道大家有没有按照规范走呢?有人会说了,找个工具校验一下就可以了,开源工具 很多。是的,这是对的。但对于项目中使用的程序、工具、开发环境呢,有工作经验的人应该都知道,很多 时候,新手出现诡异的问题,一部分原因是因为环境不对,或者软件版本不符;这时应该怎么检查呢?Maven提供了Maven-Enforcer-Plugin插件,用来校验约定遵守情况(或者说校验开发环境)。比如JDK的 版本,Maven的版本,开发环境(Linux,Windows等),依赖jar包的版本等等;官网地址:http://maven.apache.org/enforcer/maven-enforcer-plugin/下面介绍该插件的使用:
<plugin><groupId>org.apache.maven.plugins</groupId><artifactId>maven-enforcer-plugin</artifactId><version>1.3.1</version><executions><execution><id>enforce</id><phase>validate</phase><goals><goal>display-info</goal><goal>enforce</goal></goals></execution></executions><configuration><!--规则检查不通过就构建失败;Default:false. --><!--<failFast>true</failFast>--><rules><requireMavenVersion><version>3.0.4</version></requireMavenVersion><requireJavaVersion><version>1.6.0</version></requireJavaVersion><bannedDependencies><!--是否检查传递性依赖(间接依赖)--><searchTransitive>true</searchTransitive><excludes><exclude>junit:junit</exclude></excludes><message>must use TestNG</message></bannedDependencies></rules></configuration></plugin>
该插件基于<rules>进行校验,以上配置了三条规则:requireMavenVersion表示Maven的版本大于等于3.0.4;requireJavaVersion表示JDK的版本大于等于1.6.0;bannedDependencies表示禁止使用的依赖,其可用配置如下:searchTransitive:是否搜索间接依赖;excludes:禁止依赖列表;其表示格式为groupId[:artifactId][:version][:type][:scope] [:classifier]中括号内为可选,可使用通配符替换整体或者部分;例如,以下demo为有效:<excludes><!--groupId[:artifactId][:version][:type][:scope][:classifier]--><exclude>org.log</exclude><exclude>org.log:log4j</exclude><exclude>org.log:log4j:1.0</exclude><exclude>org.log:*:1.2</exclude><!--排除1.2及其以上版本,等价于[1.2,)-- ><exclude>org.log:*:[1.2]</exclude><!--明确排除1.2版本--><exclude>org.log:*:*:jar:test</exclude><exclude>*:*:*:jar:compile:tests</exclude><exclude>org.apache.*:maven-*:*</exclude></excludes>includes:从禁止的依赖中排除的依赖列表(当excludes使用通配符时,可使用此属性排除);message:校验失败,打印的提示信息;如果想要配置更为复杂的版本范围,可参考:http://maven.apache.org/enforcer/enforcer- rules/versionRanges.html除了以上的配置外,该插件内置了很多其他的规则,内置规则完整列表 在:http://maven.apache.org/enforcer/enforcer-rules/index.htmlmaven默认提供了多种校验规则,满足我们各种需求;同时又提供了maven-enforcer-rule-api允许我们 自定义规则,具体参见:http://maven.apache.org/enforcer/enforcer-api/writing-a-custom- rule.html补充如下(重要):
到目前为止,Maven没有提供类似Java的@Deprecated注解,用于声明依赖废弃。因为在pom.xml中会引入 一些错误的、过时了的、废弃的依赖;又由于Maven的依赖传递特性,很容易会引入不想要的jar(尤其是 有冲突的jar)。
基于此种情况,使用Maven-Enforcer-Plugin插件可以达到以上的目的。