Jenkins安装Java代码质量分析工具

Author Avatar
wshunli 7月 25, 2018
  • 在其它设备中阅读本文章

本文介绍 Checkstyle、PMD、FindBugs 三款主流的 Java 静态分析工具,以及 SourceMonitor 代码度量工具,Simian 代码重复检查工具等。

Jenkins 安装 Java 代码质量分析工具

在 Java 世界中,Checkstyle、PMD、FindBugs 插件是三款主流的静态分析工具。

1、Checkstyle 擅长检查编码标准和约定,编码行为以及其他的一些质量指标(如代码复杂度)。

Checkstyle(http://checkstyle.sourceforge.net/ ) 是 SourceForge 下的一个项目,提供了一个帮助 JAVA 开发人员遵守某些编码规范的工具。

CheckStyle 检验的主要内容包括:Javadoc 注释、命名约定、标题、Import 语句、体积大小、空白、修饰符、块、代码问题、类设计和混合检查(包括一些有用的比如非必须的 System.out 和 printstackTrace)。

在 Jenkins 中安装 CheckStyle 插件并重启。

在项目中配置 pom.xml (可选)

<plugins>
    <plugin>
        <groupId>org.apache.maven.plugins</groupId>
        <artifactId>maven-checkstyle-plugin</artifactId>
        <version>2.16</version>
        <configuration>
            <configLocation>checkstyle.xml</configLocation>
        </configuration>
    </plugin>
    ....
</plugins>

在 Maven 构建中添加 checkstyle:checkstyle 参数。

构建完成后输出 XML 分析结果,文件在 target 目录下。

关于插件使用的更多信息可参考:
https://wiki.jenkins.io/display/JENKINS/Checkstyle+Plugin

2、PMD 类似于 Checkstyle ,它更加专注于编码和设计实践。

PMD(https://pmd.github.io/ ) An extensible cross-language static code analyzer.

专注于潜在的编码问题,比如未使用或者次优化的代码,代码大小和复杂性,以及良好的编码行为。

PMD 也附带了 CPD ,以支持探测重复或者近似重复代码。

在 Jenkins 中安装 PMD 插件并重启。

在项目中配置 pom.xml (可选)

<plugins>
    <plugin>
        <groupId>org.apache.maven.plugins</groupId>
        <artifactId>maven-pmd-plugin</artifactId>
        <version>3.5</version>
    </plugin>        
    ....
</plugins>

在 Maven 构建中添加 pmd:pmd 参数。

构建完成后输出 XML 分析结果,文件在 target 目录下。

关于插件使用的更多信息可参考:
https://wiki.jenkins.io/display/JENKINS/PMD+Plugin

3、FindBugs 专注于识别潜在的危险和错误的代码。

FindBugs(http://findbugs.sourceforge.net/ ) 检查应用程序的字节码来找出潜在的 bug 、性能问题或者差的编码行为。

在 Jenkins 中安装 FindBugs 插件并重启。

在项目中配置 pom.xml (可选)

<plugins>
    <plugin>
        <groupId>org.codehaus.mojo</groupId>
        <artifactId>findbugs-maven-plugin</artifactId>
        <version>2.5.2</version>
        <configuration>
            <findbugsXmlOutput>true</findbugsXmlOutput>
            <findbugsXmlWithMessages>true</findbugsXmlWithMessages>
            <xmlOutput>true</xmlOutput>
        </configuration>
    </plugin>
    ....
</plugins>

在 Maven 构建中添加 findbugs:findbugs 参数。

构建完成后输出 XML 分析结果,文件在 target 目录下。

关于插件使用的更多信息可参考:
https://wiki.jenkins.io/display/JENKINS/FindBugs+Plugin

4、Static Analysis Collector 插件汇总静态分析结果

插件地址:https://wiki.jenkins.io/display/JENKINS/Analysis+Collector+Plugin

Jenkins 安装 SourceMonitor 代码度量工具

SourceMonitor(http://www.campwoodsw.com/sourcemonitor.html ) 允许查看软件源代码内部,以了解项目拥有的代码量,并确定模块的相对复杂度。

在 Jenkins 中也有 SourceMonitor(https://github.com/jenkinsci/sourcemonitor-plugin )插件,但是好久没更新了,也存在一些问题(https://issues.jenkins-ci.org/browse/JENKINS-5741 )。

报错如下:

Parsing sourcemonitor results
hudson.AbortException: Parsing file error
    at com.thalesgroup.hudson.plugins.sourcemonitor.SourceMonitorParser.invoke(SourceMonitorParser.java:70)
    at com.thalesgroup.hudson.plugins.sourcemonitor.SourceMonitorParser.invoke(SourceMonitorParser.java:45)
    at hudson.FilePath.act(FilePath.java:1047)
    at hudson.FilePath.act(FilePath.java:1025)
    at com.thalesgroup.hudson.plugins.sourcemonitor.SourceMonitorPublisher.perform(SourceMonitorPublisher.java:80)
    at hudson.tasks.BuildStepMonitor$3.perform(BuildStepMonitor.java:45)
    at hudson.model.AbstractBuild$AbstractBuildExecution.perform(AbstractBuild.java:744)
    at hudson.model.AbstractBuild$AbstractBuildExecution.performAllBuildSteps(AbstractBuild.java:690)
    at hudson.model.Build$BuildExecution.post2(Build.java:186)
    at hudson.model.AbstractBuild$AbstractBuildExecution.post(AbstractBuild.java:635)
    at hudson.model.Run.execute(Run.java:1819)
    at hudson.model.FreeStyleBuild.run(FreeStyleBuild.java:43)
    at hudson.model.ResourceController.execute(ResourceController.java:97)
    at hudson.model.Executor.run(Executor.java:429)
Build step 'Publish SourceMonitor results' changed build result to FAILURE
Build step 'Publish SourceMonitor results' marked build as failure
Finished: FAILURE

原因是在构建的时候需要添加 sourcemonitor:sourcemonitor 参数。

SourceMonitor 插件地址:https://plugins.jenkins.io/sourcemonitor

这里可以安装公司内部的 hwSourceMonitor.hpi 插件

参考资料:
1、http://3ms.[wshunli].com/km/blogs/details/2503631
2、http://3ms.[wshunli].com/hi/group/2033815/wiki_4496373.html

也可以使用 HTML Publisher 插件解析 SourceMonitor 输出的 xml 结果。

0、准备 SourceMonitor 并安装 Jenkins Server 上。

本文安装在 C:\Program Files (x86)\SourceMonitor\SourceMonitor.exe 目录。

1、安装 HTML Publisher 插件。

HTML Publisher Plugin 用来把 SourceMonitor 检测的结果可视化。

2、在构建后添加 Windows 批处理命令。

"C:\Program Files (x86)\SourceMonitor\SourceMonitor.exe" /C "C:\CI_Tools\SourceMonitorCommand.xml"
"C:\CI_Tools\msxsl.exe" SourceMonitorReport.xml "C:\CI_Tools\SourceMonitorSummaryGeneration.xsl" -o SourceMonitorSummaryGeneration.xml
"C:\CI_Tools\msxsl.exe" SourceMonitorSummaryGeneration.xml "C:\CI_Tools\SourceMonitor.xsl" -o SourceMonitorResult.html

其中 SourceMonitorCommand.xml 来自

C:\Program Files (x86)\SourceMonitor\Samples\sample_commands.xml

<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<sourcemonitor_commands>
    <write_log>true</write_log>
    <command>
        <project_file>C:\Windows\System32\config\systemprofile\.jenkins\workspace\findbugs-demo\target/sourcemonitor\project.smp</project_file>
        <project_language>Java</project_language>
        <source_directory>C:\Windows\System32\config\systemprofile\.jenkins\workspace\findbugs-demo\src\main\java</source_directory>
        <parse_utf8_files>true</parse_utf8_files>
        <file_extensions>*.java</file_extensions>
        <include_subdirectories>true</include_subdirectories>
        <export>
            <export_file>C:\Windows\System32\config\systemprofile\.jenkins\workspace\findbugs-demo\target/sourcemonitor\sourcemonitor.xml</export_file>
            <export_type>2 (project details as XML)</export_type>
            <export_option>Include method metrics: option 3</export_option>
        </export>
    </command>
</sourcemonitor_commands>

需要下载 msxsl 工具(http://www.microsoft.com/en-us/download/details.aspx?id=21714 )并放置到 C:\CI_Tools 目录下。

3、最后添加 Publish HTML reports 即可。

不过我没有配置成功,总是提示找不到 SourceMonitorReport.xml 文件。

如果使用 SourceMonitor 插件遇到如下 OutOfMemoryError 错误。

FATAL: Java heap space
java.lang.OutOfMemoryError: Java heap space

解决办法:https://wiki.jenkins.io/display/JENKINS/Builds+failing+with+OutOfMemoryErrors

Jenkins 安装 Simian 代码重复检查工具

Simian(http://www.harukizaemon.com/simian/ ) 是一个检查重复代码的工具。

这里可以使用公司内部的插件

http://3ms.[wshunli].com/hi/group/2964/wiki_4145693.html

Jenkins 安装 Cobertura 代码测试覆盖率工具

Cobertura(https://sourceforge.net/projects/cobertura/ ) 一项衡量是否所有代码都被测到的工具。

在 Jenkins 中安装 Cobertura 插件并重启。

在项目中配置 pom.xml (可选)

<plugins>
    <plugin>
        <groupId>org.codehaus.mojo</groupId>
        <artifactId>cobertura-maven-plugin</artifactId>
        <version>2.6</version>
        <configuration>
            <instrumentation>
                <ignoreTrivial>false</ignoreTrivial>
            </instrumentation>
            <formats>
                <format>html</format>
                <format>xml</format>
            </formats>
        </configuration>
    </plugin>
    ....
</plugins>

在 Maven 构建中添加 cobertura:cobertura 参数。

compile -D cobertura.report.format=xml clean compile cobertura:cobertura

这里注意添加 -D cobertura.report.format=xml 参数。

构建完成后输出 XML 分析结果,文件在 target 目录下。

关于插件使用的更多信息可参考:
https://wiki.jenkins.io/display/JENKINS/Cobertura+Plugin

参考资料
1、jenkins+maven配置Checkstyle+FindBugs+PMD - 简书
https://www.jianshu.com/p/03b9e38d03b2
2、CheckStyle提高代码质量 - CSDN博客
https://blog.csdn.net/lx_yoyo/article/details/73332590
3、Jenkins+maven+checkstyle对java代码进行静态代码分析 - CSDN博客
https://blog.csdn.net/hwhua1986/article/details/48339545
4、Jenkins+maven+pmd对java代码进行静态代码分析 - CSDN博客
https://blog.csdn.net/hwhua1986/article/details/48342745
5、[Jenkins]持续集成环境下fingbug插件的安装使用与配置 - Amberly - 博客园
https://www.cnblogs.com/amberly/p/7201041.html
6、静态检查———SourceMonitor的学习和使用 - CSDN博客
https://blog.csdn.net/yf210yf/article/details/17535713
7、[料理佳餚] Jenkins 增加 SourceMonitor Plugin | 軟體主廚的程式料理廚房 - 點部落
https://dotblogs.com.tw/supershowwei/2015/10/14/153562
8、CI Server 16 - 整合程式碼複雜度及深度報表 (Source Monitor) - iT 邦幫忙
https://ithelp.ithome.com.tw/articles/10107051
8、重复代码检查工具simian的基本用法 | 知行一
http://purecpp.org/?p=92
9、Jenkins集成Simian插件_百度经验
https://jingyan.baidu.com/article/c45ad29ccbfd3a051653e272.html
10、[料理佳餚] Jenkins 增加 Simian Plugin | 軟體主廚的程式料理廚房 - 點部落
https://dotblogs.com.tw/supershowwei/2015/10/14/153561
11、代码测试覆盖率Cobertura使用 - CSDN博客
https://blog.csdn.net/cathy_sunshine/article/details/75258298
12、jenkins集成cobertura,调用显示cobertura的report - CSDN博客
https://blog.csdn.net/yaominhua/article/details/40684647

如果本文对您有所帮助,且您手头还很宽裕,欢迎打赏赞助我,以支付网站服务器和域名费用。 https://paypal.me/wshunli 您的鼓励与支持是我更新的最大动力,我会铭记于心,倾于博客。
本文链接:https://www.wshunli.com/posts/57f40b04.html