目录
1.配置checkstyle
2. 配置findbugs
3. 配置pmd
4. 配置jacoco
5.执行指定版本
这几个工具的用途:
checkstyle:检测代码规范
findbugs:检测代码不明显的语法错误,比如使用“==”比较字符串
pmd:扫描潜在问题,如未用过的局部变量,未用过的导入声明,方法名问题等
jacoco:代码覆盖率检查
首先先说一些,在网上会看到有些会配置这个东西,是为了避免项目环境不一致问题。
UTF-8
1.8
1.8
true
org.apache.maven.plugins
maven-compiler-plugin
3.1
${compiler.target}
${project.build.sourceEncoding}
在build中配置了checkstyle中配置了生效时期段后,会在相应的周期执行,执行失败,则编译失败
如果要跳过checkstyle:mvn clean package -Dcheckstyle.skip=true
checkstyle 内置了四种规范
1. sun_checks.xml -> 默认规范
2.avalon_checks.xml
3.maven_checks.xml
4.turbine_cheks.xml
org.apache.maven.plugins
maven-checkstyle-plugin
3.0.0
validate
validate
UTF-8
true
true
check
它有有4个命令:
checkstyle:checkstyle 执行checkstyle分析并生成违规报告
checkstyle:check 分析并向控制台输出不规范计数,可能会导致失败
checkstyle:checkstyle-aggregate 多模块分析汇总报告
详细可见官网: http://maven.apache.org/plugins/maven-checkstyle-plugin/usage.html
org.codehaus.mojo
findbugs-maven-plugin
3.0.4
Low
Medium
true
true
run-findbugs
package
check
findbugs有以下几个命令:
check:检查代码,没通过,就失败
findbugs:检查代码,没通过,不会失败,会生成结果文件
gui:启动gui界面显示结果
同样可以手动触发
这个pmd一开始我看不太懂的,很多配置文件,第一个反应就是,这配置文件哪里有、怎么配、要自己写吗?
好在官方都有默认的,具体见官网:http://maven.apache.org/plugins/maven-pmd-plugin/examples/usingRuleSets.html
官网提醒:pmd 3.0 到 5.0 绑定的规则路径由 /rulesets/xyz.xml 更改为 /rulesets/java/xyz.xml
pmd 3.9.0 后,规则按类别分类:如: /category/java/bestpractices.xml,具体的默认规则看官网
org.apache.maven.plugins
maven-pmd-plugin
3.13.0
/category/java/bestpractices.xml
true
pmd-check-verify
package
check
pmd-pmd-site
site
cpd
com.alibaba.p3c
p3c-pmd
2.0.1
pmd有以下几个命令:
check:代码检测,没通过,就编译失败
cpd:执行会创建一个详细报表
cpd-check:没通过,就编译失败
pmd:生成详细报表
org.jacoco
jacoco-maven-plugin
0.7.8
prepare-agent
prepare-agent
${project.build.directory}/jacoco.exec
surefireArgLine
check
check
report
prepare-package
report
default-report
test
report
${project.build.directory}/jacoco.exec
${project.reporting.outputDirectory}/jacoco
BUNDLE
METHOD
COVEREDRATIO
0.80
INSTRUCTION
COVEREDRATIO
0.80
LINE
COVEREDRATIO
0.80
CLASS
MISSEDCOUNT
0
org.apache.maven.plugins
maven-surefire-plugin
2.16
Sample.java
%regex[.*[Cat|Dog].*Test.*]
true
${surefireArgLine}
true
maven-surefire-plugin是用来执行单元测试的,可以定义我们要执行的测试类,支持通配符,和正则,
默认规则:
**/Test*.java
**/*Test.java
**/*TestCase.java
具体详细的介绍可以看: https://www.cnblogs.com/pixy/p/4718176.html
覆盖率为0的情况: 自动化配置四 Jenkins配置sonar 配置多模块覆盖率为0问题
如果是多个模块,可以把这些依赖放到父pom里,然后在运行的使用使用命令来执行:
子模块虽然继承了插件但是在父目录打包的时候子模块不会执行绑定生命周期的命令
mvn clean package checkstyle:checkstyle findbugs:findbugs pmd:pmd org.jacoco:jacoco-maven-plugin:prepare-agent -Dmaven.test.failure.ignore=true
在使用这些命令的时候使用 -Dmaven.test.failure.ignore=true忽略单元测试失败问题
配置后的效果,可以在site下面,打开index.html查看报表显示。
如果需要配置sonar的:
最近碰到一种情况,给一个不是自己搭的项目做代码质量扫描,jenkins 配置的maven 是3.1,自己本身用的是3.6 然后想findbugs使用3.0.1会报错:
findbugs for parameter pluginArtifacts: Cannot assign configuration entry ‘pluginArtifacts’ with value ‘${plugin.artifacts}’ of type java.util.Collections.UnmodifiableRandomAccessList to property of type java.util.ArrayList
这时版本和maven版本不匹配造成的,
因为是公司项目,只做本地测试,就只在本地升级了findbugs的版本为3.0.5,解决了这个问题。
那么还有一种情况:
父级pom配置的是findbugs:3.0.5,但是在执行的时候回出现某些模块是findbugs:3.0.1,全局搜索找不到哪里还有引用,头疼,碰到这种问题,就指定版本去执行,没有解决根源问题
mvn org.codehaus.mojo:findbugs-maven-plugin:3.0.5:findbugs
同样的其他插件也可以这样指定版本。