51

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

 4 years ago
source link: https://www.jianshu.com/p/cbcc05bcfef4?
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.

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

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

0.9422019.08.15 19:40:05字数 351阅读 554

PMD是一种开源分析源代码错误的工具,它会发现一些常见的编程缺陷,比如未使用的变量,空的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, 来源于 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

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下的代码。
也可以分别运行这两个命令:

gradle pmdMain
gradle pmdTest

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

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

"请作者喝杯咖啡吧!"
还没有人赞赏,支持一下
姜家志给时间加杠杆
总资产67 (约3.27元)共写了10.7W字获得1,545个赞共923个粉丝

About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK