實際開發中項目經理總會告訴開發人員:開發時要遵守什麼什麼樣的約定命名規范怎麼怎樣樣
約定優於配置很重要!比較規范的公司(或者項目組)會把規范寫到文檔中讓開發人員去遵守
問題來了怎麼才能知道大家有沒有按照規范走呢?有人會說了找個工具校驗一下就可以了開源工具很多是的這是對的但對於項目中使用的程序工具開發環境呢有工作經驗的人應該都知道很多時候新手出現詭異的問題一部分原因是因為環境不對或者軟件版本不符;這時應該怎麼檢查呢?
Maven提供了MavenEnforcerPlugin插件用來校驗約定遵守情況(或者說校驗開發環境)比如JDK的版本Maven的版本開發環境(LinuxWindows等)依賴jar包的版本等等;官網地址:
下面介紹該插件的使用:
<plugin>
<groupId>orgapachemavenplugins</groupId>
<artifactId>mavenenforcerplugin</artifactId>
<version></version>
<executions>
<execution>
<id>enforce</id>
<phase>validate</phase>
<goals>
<goal>displayinfo</goal>
<goal>enforce</goal>
</goals>
</execution>
</executions>
<configuration>
<!規則檢查不通過就構建失敗;Default:false >
<!<failFast>true</failFast>>
<rules>
<requireMavenVersion>
<version></version>
</requireMavenVersion>
<requireJavaVersion>
<version></version>
</requireJavaVersion>
<bannedDependencies>
<!是否檢查傳遞性依賴(間接依賴)>
<searchTransitive>true</searchTransitive>
<excludes>
<exclude>junit:junit</exclude>
</excludes>
<message>must use TestNG</message>
</bannedDependencies>
</rules>
</configuration>
</plugin>
該插件基於<rules>進行校驗以上配置了三條規則:
requireMavenVersion表示Maven的版本大於等於;
requireJavaVersion表示JDK的版本大於等於;
bannedDependencies表示禁止使用的依賴其可用配置如下:
searchTransitive:是否搜索間接依賴;
excludes:禁止依賴列表;其表示格式為groupId[:artifactId][:version][:type][:scope][:classifier]中括號內為可選可使用通配符替換整體或者部分;例如以下demo為有效:
<excludes>
<!groupId[:artifactId][:version][:type][:scope][:classifier]>
<exclude>orglog</exclude>
<exclude>orglog:logj</exclude>
<exclude>orglog:logj:</exclude>
<exclude>orglog:*:</exclude><!排除及其以上版本等價於[)>
<exclude>orglog:*:[]</exclude><!明確排除版本>
<exclude>orglog:*:*:jar:test</exclude>
<exclude>*:*:*:jar:compile:tests</exclude>
<exclude>orgapache*:maven*:*</exclude>
</excludes>
includes:從禁止的依賴中排除的依賴列表(當excludes使用通配符時可使用此屬性排除);
message:校驗失敗打印的提示信息;
如果想要配置更為復雜的版本范圍可參考:
除了以上的配置外該插件內置了很多其他的規則內置規則完整列表在:
maven默認提供了多種校驗規則滿足我們各種需求;同時又提供了mavenenforcerruleapi允許我們自定義規則具體參見:
補充如下(重要)
到目前為止Maven沒有提供類似Java的@Deprecated注解用於聲明依賴廢棄因為在pomxml中會引入一些錯誤的過時了的廢棄的依賴又由於Maven的依賴傳遞特性很容易會引入不想要的jar(尤其是有沖突的jar)
基於此種情況使用MavenEnforcerPlugin插件可以達到以上的目的
From:http://tw.wingwit.com/Article/program/Web/201405/30981.html