实际开发中,项目经理总会告诉开发人员:开发时要遵守什么什么样的约定,命名规范怎么怎样样....
约定优于配置,很重要!比较规范的公司(或者项目组),会把规范写到文档中,让开发人员去遵守。
问题来了,怎么才能知道大家有没有按照规范走呢?有人会说了,找个工具校验一下就可以了,开源工具很多。是的,这是对的。但对于项目中使用的程序、工具、开发环境呢,有工作经验的人应该都知道,很多时候,新手出现诡异的问题,一部分原因是因为环境不对,或者软件版本不符;这时应该怎么检查呢?
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.html
maven默认提供了多种校验规则,满足我们各种需求;同时又提供了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插件可以达到以上的目的。