)是一种开源分析源代码错误的工具,它会发现一些常见的编程缺陷,比如未使用的变量,空的catch块,不必要的对象创建等。它支持Java,JavaScript等。
此外,用户还可以自己定义规则,检查Java代码是否符合某些特定的编码规范。
基于PMD,阿里巴巴基于自己的 Java编码规范实现了
P3C-PMD
检查规则为xml格式,注意配置中指定的配置文件在jra包中,需要p3c包编译到项目中才行正确引入:
dependencies { pmd "com.alibaba.p3c:p3c-pmd:2.0.0" }
xml配置文件如下:
<?xml version="1.0"?> <ruleset name="Custom ruleset" xmlns="http://pmd.sourceforge.net/ruleset/2.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://pmd.sourceforge.net/ruleset/2.0.0 http://pmd.sourceforge.net/ruleset_2_0_0.xsd"> <description> 自定义Rule set </description> <!-- 引入PMD制定的Rule, 来源于https://github.com/pmd/pmd/tree/master/pmd-java/src/main/resources/rulesets/java --> <rule ref="rulesets/java/android.xml"> <exclude name="CallSuperLast"/> </rule> <rule ref="rulesets/java/basic.xml"> <exclude name="CollapsibleIfStatements"/> </rule> <rule ref="rulesets/java/clone.xml"/> <rule ref="rulesets/java/finalizers.xml"/> <rule ref="rulesets/java/imports.xml"/> <rule ref="rulesets/java/javabeans.xml"/> <rule ref="rulesets/java/optimizations.xml"> <exclude name="LocalVariableCouldBeFinal"/> <exclude name="MethodArgumentCouldBeFinal"/> </rule> <rule ref="rulesets/java/sunsecure.xml"/> <rule ref="rulesets/java/unnecessary.xml"> <exclude name="UselessParentheses"/> </rule> <!-- 引入阿里的Rule, 来源于 alibaba/p3c --> <rule ref="rulesets/java/ali-comment.xml"> </rule> <rule ref="rulesets/java/ali-concurrent.xml"> </rule> <rule ref="rulesets/java/ali-constant.xml"> </rule> <rule ref="rulesets/java/ali-exception.xml"> </rule> <rule ref="rulesets/java/ali-flowcontrol.xml"> </rule> <rule ref="rulesets/java/ali-naming.xml"> </rule> <rule ref="rulesets/java/ali-oop.xml"> </rule> <rule ref="rulesets/java/ali-orm.xml"> </rule> <rule ref="rulesets/java/ali-other.xml"> </rule> <rule ref="rulesets/java/ali-set.xml"> </rule> </ruleset>
该配置文件放在 etc/pmd/relest.xml
下
apply plugin: "pmd" pmd { toolVersion = '6.17.0' ignoreFailures = true ruleSetConfig = resources.text.fromFile("etc/pmd/ruleset.xml") } dependencies { pmd "com.alibaba.p3c:p3c-pmd:2.0.0" ... }
其中 ignoreFailures
如果设置为true表示规范检查即使是不通过 gradle check
也不会报错,设置为false时,代码规范检查必须通过才check的时候才不会报错。
可以通过命令:
gradle check
运行 pmdMain
,它会检查__src/main/java__下的代码,还会运行 pmdTest
,它会检查__src/main/test__下的代码。
也可以分别运行这两个命令:
gradle pmdMain gradle pmdTest
运行之后的结果在目录 build/reports/pmd
中的main.html,test.html文件中
基于Gradle使用阿里巴巴Java开发规约进行代码检查