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