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