在Gradle中使用PMD

代码检查之PMD

题图:from Google

什么是PMD?

与FindBugs类似,PMD也是一款Java代码静态检查工具。它可以做到检查Java代码中是否含有未使用的变量、是否含有空的抓取块、是否含有不必要的对象等。

PMD与FindBugs最主要的区别是PMD检查源文件,而FindBugs检查字节码。

PMD匹配模式

与FindBugs一样,PMD也允许自定义匹配模式。
虽然提供自定义功能,但是其自带的一系列规则也已经基本够用,自带规则如下:

image

以上每个xml中都定义了若干规范,如需查看只需下载源码包,在pmd-java/src/main/resources/rulesets/java/目录下即可找到。
PMD提供两种方式定义匹配模式,java代码或者XPath表达式。如果真的有自定义匹配模式的需求,可以到官网查看编写文档(链接见附录)

Gradle中使用PMD插件

Gradle中同样集成了PMD插件。执行检测也只需要gradle pmdMain

1
2
3
4
5
6
7
8
9
10
11
12
apply plugin: "java"
apply plugin: "pmd"
pmd {
toolVersion = "5.4.1"
sourceSets = [sourceSets.main]
ignoreFailures = true
reportsDir = file("$project.buildDir/pmdReports")
targetJdk = 1.8
ruleSets = ["java-basic", "java-braces"]
ruleSetFiles = files("config/pmd/myRuleSet.xml")
}

属性说明:

image

PS:
如果不指定,Gradle默认使用basic.xml中的匹配,basic.xml详见源码包中pmd-java/src/main/resources/rulesets/java/basic.xml

附录

常用 Java 静态代码分析工具的分析与比较: http://www.oschina.net/question/129540_23043
如何编写PMD规则: https://pmd.github.io/pmd-5.4.1/customizing/howtowritearule.html
关于ruleSets的使用,PMD5.0以上需要加”java-“前缀: stackOverFlow问题链接