使用Gradle对Java代码进行开发规范检查

PMD是一种开源分析源代码错误的工具,它会发现一些常见的编程缺陷,比如未使用的变量,空的catch块,不必要的对象创建等。它支持Java,JavaScript等。
此外,用户还可以自己定义规则,检查Java代码是否符合某些特定的编码规范。
基于PMD,阿里巴巴基于自己的Java编码规范实现了P3C-PMD

设置检查规则

检查规则为xml格式,注意配置中指定的配置文件在jra包中,需要p3c包编译到项目中才行正确引入:

1
2
3
复制代码dependencies {
pmd "com.alibaba.p3c:p3c-pmd:2.0.0"
}

xml配置文件如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
复制代码<?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, 来源于 https://github.com/alibaba/p3c/tree/master/p3c-pmd/src/main/resources/rulesets/java -->
<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

配置Gradle

1
2
3
4
5
6
7
8
9
10
11
12
复制代码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的时候才不会报错。

运行PMD

可以通过命令:

gradle check

运行pmdMain,它会检查__src/main/java__下的代码,还会运行pmdTest,它会检查__src/main/test__下的代码。
也可以分别运行这两个命令:

1
2
复制代码gradle pmdMain
gradle pmdTest

运行之后的结果在目录build/reports/pmd中的main.html,test.html文件中

参考

基于Gradle使用阿里巴巴Java开发规约进行代码检查

本文转载自: 掘金

开发者博客 – 和开发相关的 这里全都有

0%