文档章节

Maven实战读书笔记(16)

祥林会跟你远走高飞
 祥林会跟你远走高飞
发布于 2014/12/25 13:49
字数 2793
阅读 191
收藏 0

Maven聚合项目信息

1Maven不仅仅是一个自动化构建工具和一个依赖管理工具,它还能够帮助聚合项目信息,促进团队间的交流

2POM可以包含各种项目信息,如项目描述、版本控制系统地址、缺陷跟踪系统地址、许可证信息、开发者信息等

3Maven可以自动生成一个Web站点,以Web的形式发布这些信息

4Maven社区提供了大量的插件,能让用户生成各种各样的项目审查报告,包括测试覆盖率、静态代码分析、代码变更等

 

最简单的站点

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


© 著作权归作者所有

祥林会跟你远走高飞
粉丝 27
博文 50
码字总数 98029
作品 0
昌平
程序员
私信 提问
Maven实战读书笔记(17)

Eclipse 1、eclipse是非常流行的IDE,为了方便用户,日常开发使用的各种工具都会提供相应的Eclipse插件 2、Eclipse默认就集成了JUnit单元测试框架、CVS版本控制工具以及Mylyn任务管理框架 3、...

祥林会跟你远走高飞
2014/12/25
0
0
Maven实战读书笔记(10)

account-captcha的POM配置 <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM......

祥林会跟你远走高飞
2014/12/17
0
0
Maven实战读书笔记(18)

编写Maven插件的一般步骤 1、创建一个maven-plugin项目:插件本身也是Maven项目,特殊的地方在于它的packaging必须是maven-plugin,用户可以使用maven-archetype-plugin快速创建一个Maven插件...

祥林会跟你远走高飞
2014/12/25
0
0
Maven实战读书笔记(15)

关于灵活的构建 一个优秀的构建系统必须足够灵活,它应该能够让项目在不同的环境下都能成功地构建。 例如,典型的项目都会有开发环境、测试环境和产品环境,这些环境的数据库配置不尽相同,那...

祥林会跟你远走高飞
2014/12/24
0
0
《Linux内核设计与实现》读书笔记 - 目录 (完结)

《Linux内核设计与实现》读书笔记 - 目录 (完结) 读完这本书回过头才发现, 第一篇笔记居然是 2012年8月发的, 将近一年半的时间才看完这本书(汗!!!). 为了方便以后查看, 做个《Linux内核设计...

你的猫大哥
2018/01/14
0
0

没有更多内容

加载失败,请刷新页面

加载更多

好程序员分享placeholder属性详解

  好程序员分享placeholder属性详解,HTML5里新引入很多有趣的新特征;有些体现在HTML里,有些是JavaScript API,全部非常的有用。其中我最喜欢的一个特征就是文本框(INPUT)里的placehold...

好程序员IT
3分钟前
0
0
[学]ngin反向代理搭建与配置

Nginx安装地址:https://www.cnblogs.com/wyd168/p/6636529.html (linux) 必须安装的4个包: nginx-1.1.10.tar.gz openssl-1.0.1t.tar.gz pcre-8.39.tar.gz zlib-1.2.11.tar.gz 启动Nginx......

覃光林
6分钟前
0
0
互联网商城的上云改造之旅

在中国,经过十年的发展,云计算产业已走过概念普及的1.0时期,进入“上云”和落地的2. 0阶段,企业上云意识不断增强,越来越多的企业选择部署多云和混合IT。 如今,云计算生态一片繁荣,看似...

zhaowei121
8分钟前
0
0
fastJson 一些小例子

package com.*;import com.alibaba.fastjson.annotation.JSONField;public class VO { @JSONField(name="ID") private int id; public int getId() { ......

qimh
21分钟前
0
0
十年后,程序员的工资还能达到现在的水平吗?

一方面,程序员的门槛正在逐渐消失,因为计算机相关专业毕业生一年比一年多; IT 培训班出来的学生一年比一年多;网络上各种编程课程,也正在帮助无数人零基础转型软件开发…… 另一方面,程...

爱编程的浪子
29分钟前
0
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部