Maven聚合項目信息css
1、Maven不只僅是一個自動化構建工具和一個依賴管理工具,它還可以幫助聚合項目信息,促進團隊間的交流html
2、POM能夠包含各類項目信息,如項目描述、版本控制系統地址、缺陷跟蹤系統地址、許可證信息、開發者信息等java
3、Maven能夠自動生成一個Web站點,以Web的形式發佈這些信息apache
4、Maven社區提供了大量的插件,能讓用戶生成各類各樣的項目審查報告,包括測試覆蓋率、靜態代碼分析、代碼變動等瀏覽器
最簡單的站點服務器
1、在Maven2中,站點生成的邏輯是Maven核心的一部分,使用maven-site-plugin最新的2.x版本,配置以下:maven
<pluginManagement>工具
<plugins>佈局
<plugin>post
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-site-plugin</artifactId>
<version>2.1.1</version>
</plugin>
</plugins>
</pluginManagement>
2、在Maven3中,鑑於靈活性和可擴展性的考慮,將這部分從核心中移除了,使用3.x最新版本配置以下:
<pluginManagement>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-site-plugin</artifactId>
<version>3.0-beta-1</version>
</plugin>
</plugins>
</pluginManagement>
3、配置好了正確的maven-site-plugin版本以後,運行mvn site命令直接生成最簡單的站點
Maven運行完畢以後
1、能夠在項目的target/site目錄下找到Maven生成的站點文件
2、該目錄下包含dependencies.html、dependency-convergence.html、index.html等文件和css、images文件夾
3、dependencies.html包含了項目依賴信息,license.html包含了項目許可證信息,index.html則是站點的主頁面
若是這是一個聚合項目
1、導航欄的上方還會包含子模塊的鏈接,可是若是單機這些連接,將沒法轉到子模塊的項目頁面
2、這是因爲多模塊Maven項目自己的目錄結構致使的,若是將站點發布到服務器上,該問題會天然消失
3、若是想在本地查看結構正確的站點,則能夠maven-site-plugin的stage目標,將站點預發佈至某個本地臨時目錄下
4、執行mvn site:stage -DstagingDirectory=D:\tmp,將站點預發佈至某個本地臨時目錄下
site生命週期
1、咱們知道site生命週期有四個階段,它們分別爲pre-site、site、post-site和site-deploy
2、其中pre-site和post-site默認沒有綁定任何插件目標,能夠說它們是預留給用戶作一些站點生成以前及以後的處理的
3、site階段綁定到了maven-site-plugin的site目標,該目標負責綁定了maven-site-plugin的deploy目標,該目標負責將站點部署至遠程服務器
豐富的項目信息
在默認狀況下Maven生成的站點包含了不少項目信息連接,這實際上是由一個爲maven-project-info-reports-plugin的插件生成
1、在Maven3中,該插件配置內置在Maven-site-plugin中
2、在Maven2中,該插件的配置內置在覈心源碼中
3、該插件會基於POM配置生成下列項目信息報告:
n 關於(about):項目描述
n 持續集成(Continuous Integration):項目持續集成服務器的信息
n 依賴(Dependencies):項目依賴信息,包括傳遞性依賴、依賴圖、依賴許可證以及依賴文件的大小、所包含的類的數目等
n 依賴收斂(Dependency Convergence):只針對多模塊項目生成,提供一些依賴健康情況分析,如各模塊使用的依賴版本是否一致,項目中是否有SNAPSHOT依賴
n 依賴管理(Dependency Management):基於項目的依賴管理配置生成的報告
n 問題追蹤(Issue Tracking):項目的問題追蹤系統信息
n 郵件列表(Mailing Lists):項目的郵件列表信息
n 插件管理(Plugin Management):項目所使用的插件的列表
n 項目許可證(Project License):項目許可證信息
n 項目概述(Project Summary):項目概述包括座標、名稱、描述等
n 項目團隊(Project Team):項目團隊信息
n 源碼倉庫(Source Repository):項目的源碼倉庫信息
POM中<scm>、<ciManagement>、<developers>、<issueManagement>、<licenses>等元素
1、scm元素爲項目添加了源碼倉庫信息
2、ciManagement元素爲項目添加了持續集成服務器信息
3、developers元素爲項目添加了項目成員團隊信息
4、issueManagement元素爲項目添加了問題追蹤系統信息
5、licenses元素爲項目添加了許可證信息
選擇性地生成項目信息報告
<project>
...
<reporting>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-project-info-reports-plugin</artifactId>
<version>2.1.2</version>
<reportSets>
<reportSet>
<reports>
<report>dependencies</report>
<report>project-team</report>
<report>issue-tracking</report>
<report>license</report>
</reports>
<reportSet>
</reportSets>
</plugin>
</plugins>
</reporting>
...
</project>
1、上述代碼配置了maven-project-info-reports-plugin
2、須要注意的是,項目報告插件在reporting元素下的plugins元素下進行配置,其餘的項目報告插件,也都在這裏進行配置
3、上面配置使得站點的項目信息只包含依賴、團隊、問題追蹤信息和許可證幾項信息
項目報告插件
1、除了默認的項目信息報告,Maven社區還提供了大量報告插件
2、報告插件在POM中配置的位置與通常的插件配置不一樣
3、通常的插件在<project><build><plugins>下配置,而報告插件在<project><reporting><plugins>下配置
JavaDocs
maven-javadoc-plugin使用JDK的javadoc工具,基於項目的源代碼生成JavaDocs文檔,該插件的配置以下:
<reporting>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-javadoc-plugin</artifactId>
<version>2.7</version>
</plugin>
</plugins>
</reporting>
基於上面的簡單配置,用戶使用mvn site命令生成站點時,就能獲得住院嗎和測試源碼的JavaDocs文檔
Source Xref
若是可以隨時隨地地打開瀏覽器訪問項目的最新源代碼,那無疑會方便團隊之間的交流
maven-jxr-plugin可以幫助咱們完成這一目標,在生成站點的時候配置該插件,Maven就會以Web頁面的形式將Java源代碼展示出來,該配置以下:
<reporting>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-jxr-plugin</artifactId>
<version>2.2</version>
</plugin>
</plugins>
</reporting>
若想在聚合模塊整合全部的源碼,則需添加額外的aggregate配置
<reporting>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-jxr-plugin</artifactId>
<version>2.2</version>
<configuration>
<aggregate>true</aggregate>
</configuration>
</plugin>
</plugins>
</reporting>
CheckStyle
1、CheckStyle是一個用來幫助Java開發人員遵循編碼規範的工具,能根據一套規則自動檢查Java代碼,使得團隊可以方便地定義本身得編碼規範
2、關於該工具的詳細信息能夠訪問http://checkstyle.sourceforge.net/進行了解
3、要在Maven的站點中生成CheckStyle報告,只須要配置maven-checkstyle-plugin,配置以下:
<reporting>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-checkstyle-plugin</artifactId>
<version>2.5</version>
</plugin>
</plugins>
</reporting>
4、運行mvn site命令獲得CheckStyle報告
關於maven-checkstyle-plugin定義的編碼規範說明
1、默認狀況下,會使用Sun定義的編碼規範,也能夠自定義規則
2、maven-checkstyle-plugin內置了四種規則:
n config/sun_checks.xml:Sun定義的編碼規範(默認值)
n config/maven_checks.xml:Maven社區定義的編碼規範
n config/turbine_checks.xml:Turbine定義的編碼規範
n config/avalon_checks.xml:Avalon定義的編碼規範
3、用戶能夠配置maven-checkstyle-plugin使用上述編碼規範,配置以下:
<reporting>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-checkstyle-plugin</artifactId>
<version>2.5</version>
<configuration>
< configLocation >config/maven_checks.xml</configLocation>
</configration>
</plugin>
</plugins>
</reporting>
一般用戶所在的組織會有本身的編碼規範
1、這時就須要建立本身的checkstyle規則文件
2、如在src/main/resources/目錄下定義一個checkstyle/my_checks.xml文件
3、而後配置< configLocation >checkstyle/my_checks.xml</configLocation>便可
4、maven-checkstyle-plugin其實是從ClassPath載入規則文件,所以對於它來講,不管規則文件是在當前項目中仍是再依賴文件中,處理方式都是同樣的
對於多模塊項目來講,使用maven-checkstyle-plugin會有一些問題
maven-checkstyle-plugin還不支持報告聚合,也就是說,用戶沒法在聚合項目的報告中獲得全部模塊的CheckStyle報告
想要在各個模塊中重用自定義的checkstyle規則還須要一些額外的配置
1、建立一個包含checkstyle規則文件的模塊
checkstyle/pom.xml
checkstyle/src/main/resources/checkstyle/my-checks.xml
2、在聚合模塊配置maven-checkstyle-plugin依賴該模塊
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-checkstyle-plugin</artifactId>
<version>2.5</version>
<dependencies>
<groupId>com.juvenxu.mvnbook</groupId>
<artifactId>checkstyle</artifactId>
<version>1.0</version>
</dependencies>
</plugin>
</plugins>
</build>
3、在聚合模塊配置maven-checkstyle-plugin使用模塊中的checkstyle規則:
<reporting>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-checkstyle-plugin</artifactId>
<version>2.5</version>
<configuration>
< configLocation >config/maven_checks.xml</configLocation>
</configration>
</plugin>
</plugins>
</reporting>
原理就是先建立一個包含自定義規則文件的依賴,而後將該依賴加入到項目的ClassPath中,最後從ClassPath載入規則文件
PMD
1、PMD是一款強大的Java源代碼分析工具,它可以尋找代碼中的問題,包括潛在的bug、無用代碼、可優化代碼、重複代碼以及過於複雜的表達式
2、關於該工具逇詳細信息能夠訪問http://pmd.sourceforge.net/進行了解
3、在Maven的站點中生成PMD報告,配置以下:
<reporting>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-pmd-plugin</artifactId>
<version>2.5</version>
</plugin>
</plugins>
</reporting>
關於PMD報告的一些說明
1、須要注意的是,除了PMD報告以外,maven-pmd-plugin還會生成一個名爲CPD的報告,該報告中包含了代碼拷貝粘貼的分析結果
2、PMD包含了大量的分析規則,讀者能夠訪問http://pmd.sourceforge.next/rules/index.html查看這些規則
3、PMD默認使用的規則爲rulesets/basic.xml、rulesets/unusedcode.xml和rulesets/importss.xml,要使用其餘規則,能夠自定義
配置maven-pmd-plugin使用非默認分析規則
<reporting>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-pmd-plugin</artifactId>
<version>2.5</version>
<configuration>
<rulesets>
<ruleset>rulesets/braces.xml</ruleset>
<ruleset>rulesets/naming.xml</ruleset>
<ruleset>rulesets/strings.xml</ruleset>
</rulesets>
</configuration>
</plugin>
</plugins>
</reporting>
maven-pmd-plugin支持聚合報告,只須要以下配置aggregate參數便可
<reporting>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-pmd-plugin</artifactId>
<version>2.5</version>
<configuration>
<aggregate>true</aggregate>
</configuration>
</plugin>
</plugins>
</reporting>
ChangeLog
maven-changelog-plugin可以基於版本控制系統中就近的變動記錄生成三份變動報告
這三份報告分別是:
n Change Log:基於提交的變動報告,包括每次提交的日期、文件、做者、註釋等信息
n Developer Activity:基於做者的變動報告,包括做者列表以及每一個做者相關的提交次數和設計文件數目
n File Activity:基於文件的變動報告,包括變動的文件列表及每一個文件的變動次數
配置maven-changelog-plugin插件
1、首先須要配置爭取的SCM信息
2、有了SCM配置,就能夠配置maven-changelog-plugin生成變動報告:
<reporting>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-changelog-plugin</artifactId>
<version>2.2</version>
</plugin>
</plugins>
</reporting>
3、默認狀況下,maven-changelog-plugin生成最近30天的變動記錄,不過用戶能夠修改這個默認配置
<reporting>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-changelog-plugin</artifactId>
<version>2.2</version>
<configuration>
<type>range</type>
<range>60</range>
</configuration>
</plugin>
</plugins>
</reporting>
Cobertura
使用cobertura-maven-plugin生成測試覆蓋率報告,配置以下
<reporting>
<plugins>
<plugin>
<groupId>org.codehaus.mojo</groupId>
<artifactId>cobertura-maven-plugin</artifactId>
<version>2.4</version>
</plugin>
</plugins>
</reporting>
自定義站點外觀
Maven支持自定義站點的佈局和外觀