Jenkins Maven checkstyle findbugs pmd静态代码检查

时间:2022-01-23 08:44:08

公司原来Java和安卓项目都是用Gradle做配置管理,现在其他项目组使用Maven作为配置管理,对Maven研究了之后也可以用Jenkins做集成了,不过经过比较还是觉得Gradle的语法更加简洁。

第一步还是确认环境,需要在Jenkins服务器安装maven并进行环境配置,一切都是常规安装,wget之后解压缩并修改profile文件之后执行mvn验证,如果没有问题会看到以下代码说明mvn安装成功,这时还需要在Global Tool Configure里进行Maven的环境配置,手动输入Maven的Home位置。配置完成执行mvn可以看到如下提示:

[INFO] Scanning for projects...
[INFO] ------------------------------------------------------------------------
[INFO] BUILD FAILURE
[INFO] ------------------------------------------------------------------------
[INFO] Total time: 0.067 s
[INFO] Finished at: 2017-06-20T17:06:08+08:00

第二步进行maven的pom.xml文件配置,checkstyle,findbugs,pmd的配置方法各不一样,findbugs和pmd需要增加report字段,checkstyle不需要

<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-checkstyle-plugin</artifactId>
<version>${plugin.checkstyle.version}</version>
<configuration>
<configLocation>${project.basedir}/build/check-style.xml</configLocation>
<includeTestSourceDirectory>true</includeTestSourceDirectory>
<suppressionsLocation>${project.basedir}/build/check-style-suppression.xml</suppressionsLocation>
<consoleOutput>true</consoleOutput>
<failsOnError>false</failsOnError>
</configuration>
<executions>
<execution>
<phase>verify</phase>
<goals>
<goal>check</goal>
</goals>
</execution>
</executions>
</plugin>


<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-pmd-plugin</artifactId>
<version>${plugin.pmd.version}</version>
<configuration>
<rulesets>
<ruleset>build/pmd.xml</ruleset>
</rulesets>
<targetJdk>${project.build.jdk}</targetJdk>
<verbose>true</verbose>
</configuration>
<executions>
<execution>
<phase>verify</phase>
<goals>
<goal>check</goal>
<goal>cpd-check</goal>
</goals>
</execution>
</executions>
</plugin>
<plugin>
<groupId>org.codehaus.mojo</groupId>
<artifactId>findbugs-maven-plugin</artifactId>
<version>${plugin.findbugs.version}</version>
<configuration>
<excludeFilterFile>build/find-bugs-exclude-filter.xml</excludeFilterFile>
                    <!-- 加入findbugs的静态代码检查 @j-->
                    <threshold>Medium</threshold>
                    <effort>Default</effort>
                    <findbugsXmlOutput>true</findbugsXmlOutput>
                    <findbugsXmlWithMessages>true</findbugsXmlWithMessages>
                    <xmlOutput>true</xmlOutput>
                    <!-- findbugs xml输出路径-->
                    <!--<findbugsXmlOutputDirectory>target/site</findbugsXmlOutputDirectory>-->


</configuration>
<executions>
<execution>
<phase>verify</phase>
<goals>
<goal>check</goal>
</goals>
</execution>
</executions>
</plugin>

---------------------------------------------------------------------------------------------

   <reporting>
        <plugins>
        <!-- findbugs pmd配置报告-->
       <plugin>
           <groupId>org.apache.maven.plugins</groupId>
           <artifactId>maven-surefire-report-plugin</artifactId>
           <version>2.14.1</version>
       </plugin>
       <plugin>
           <groupId>org.apache.maven.plugins</groupId>
           <artifactId>maven-jxr-plugin</artifactId>
           <version>2.1</version>
       </plugin>
       <plugin>
           <groupId>org.codehaus.mojo</groupId>
           <artifactId>cobertura-maven-plugin</artifactId>
       </plugin>
   <plugin>
       <groupId>org.apache.maven.plugins</groupId>
       <artifactId>maven-pmd-plugin</artifactId>
       <version>3.0.1</version>
   </plugin>
        </plugins>
    </reporting>

注意findbugs的输出路径需要注释掉,不然不是默认目录无法jenkins插件无法识别,另外checkstyle需要java的执行权限,需要赋予java执行文件的权限。

另外需要将<failsOnError>设置为false,否则可能因为错误太多而无法生成checkstyle报告。

第三步建立jenkins的job 并配置之后在Goals输入命令行clean package checkstyle:checkstyle findbugs:findbugs pmd:pmd (觉得这种命令行输入特别傻)

然后配置三个静态代码工具使之有效,这样在job界面里面会自动生成图形报告。

Jenkins Maven checkstyle findbugs pmd静态代码检查