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支持自定义站点的布局和外观

相关文章
相关标签/搜索