美文网首页持续践行持续集成
使用Gradle对Java代码进行开发规范检查

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

作者: 姜家志 | 来源:发表于2019-08-15 19:40 被阅读21次

    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开发规约进行代码检查

    相关文章

      网友评论

        本文标题:使用Gradle对Java代码进行开发规范检查

        本文链接:https://www.haomeiwen.com/subject/vujtsctx.html