Maven實戰讀書筆記(16)

Maven聚合項目信息css

1Maven不只僅是一個自動化構建工具和一個依賴管理工具,它還可以幫助聚合項目信息,促進團隊間的交流html

2POM能夠包含各類項目信息,如項目描述、版本控制系統地址、缺陷跟蹤系統地址、許可證信息、開發者信息等java

3Maven能夠自動生成一個Web站點,以Web的形式發佈這些信息apache

4Maven社區提供了大量的插件,能讓用戶生成各類各樣的項目審查報告,包括測試覆蓋率、靜態代碼分析、代碼變動等瀏覽器

 

最簡單的站點服務器

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.htmldependency-convergence.htmlindex.html等文件和cssimages文件夾

3dependencies.html包含了項目依賴信息,license.html包含了項目許可證信息,index.html則是站點的主頁面

 

若是這是一個聚合項目

1、導航欄的上方還會包含子模塊的鏈接,可是若是單機這些連接,將沒法轉到子模塊的項目頁面

2、這是因爲多模塊Maven項目自己的目錄結構致使的,若是將站點發布到服務器上,該問題會天然消失

3、若是想在本地查看結構正確的站點,則能夠maven-site-pluginstage目標,將站點預發佈至某個本地臨時目錄下
4、執行mvn site:stage -DstagingDirectory=D:\tmp,將站點預發佈至某個本地臨時目錄下

 

site生命週期

1、咱們知道site生命週期有四個階段,它們分別爲pre-sitesitepost-sitesite-deploy

2、其中pre-sitepost-site默認沒有綁定任何插件目標,能夠說它們是預留給用戶作一些站點生成以前及以後的處理的

3site階段綁定到了maven-site-pluginsite目標,該目標負責綁定了maven-site-plugindeploy目標,該目標負責將站點部署至遠程服務器

 

豐富的項目信息

在默認狀況下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>等元素

1scm元素爲項目添加了源碼倉庫信息

2ciManagement元素爲項目添加了持續集成服務器信息

3developers元素爲項目添加了項目成員團隊信息

4issueManagement元素爲項目添加了問題追蹤系統信息

5licenses元素爲項目添加了許可證信息

 

選擇性地生成項目信息報告

<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使用JDKjavadoc工具,基於項目的源代碼生成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

1CheckStyle是一個用來幫助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定義的編碼規範,也能夠自定義規則

2maven-checkstyle-plugin內置了四種規則:

n         config/sun_checks.xmlSun定義的編碼規範(默認值)

n         config/maven_checks.xmlMaven社區定義的編碼規範

n         config/turbine_checks.xmlTurbine定義的編碼規範

n         config/avalon_checks.xmlAvalon定義的編碼規範

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>便可

4maven-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

1PMD是一款強大的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的報告,該報告中包含了代碼拷貝粘貼的分析結果

2PMD包含了大量的分析規則,讀者能夠訪問http://pmd.sourceforge.next/rules/index.html查看這些規則

3PMD默認使用的規則爲rulesets/basic.xmlrulesets/unusedcode.xmlrulesets/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支持自定義站點的佈局和外觀

相關文章
相關標籤/搜索