Maven聚合项目信息
1、Maven不仅仅是一个自动化构建工具和一个依赖管理工具,它还能够帮助聚合项目信息,促进团队间的交流
2、POM可以包含各种项目信息,如项目描述、版本控制系统地址、缺陷跟踪系统地址、许可证信息、开发者信息等
3、Maven可以自动生成一个Web站点,以Web的形式发布这些信息
4、Maven社区提供了大量的插件,能让用户生成各种各样的项目审查报告,包括测试覆盖率、静态代码分析、代码变更等
最简单的站点
1、在Maven2中,站点生成的逻辑是Maven核心的一部分,使用maven-site-plugin最新的2.x版本,配置如下:
<pluginManagement>
<plugins>
<plugin>
<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支持自定义站点的布局和外观