使用Gradle對Java代碼進行開發規範檢查

PMD是一種開源分析源代碼錯誤的工具,它會發現一些常見的編程缺陷,好比未使用的變量,空的catch塊,沒必要要的對象建立等。它支持Java,JavaScript等。 此外,用戶還能夠本身定義規則,檢查Java代碼是否符合某些特定的編碼規範。 基於PMD,阿里巴巴基於本身的Java編碼規範實現了P3C-PMDphp

設置檢查規則

檢查規則爲xml格式,注意配置中指定的配置文件在jra包中,須要p3c包編譯到項目中才行正確引入:html

dependencies {
    pmd "com.alibaba.p3c:p3c-pmd:2.0.0"
}
複製代碼

xml配置文件以下:java

<?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.xmlandroid

配置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的時候纔不會報錯。git

運行PMD

能夠經過命令:github

gradle check編程

運行pmdMain,它會檢查__src/main/java__下的代碼,還會運行pmdTest,它會檢查__src/main/test__下的代碼。 也能夠分別運行這兩個命令:bash

gradle pmdMain
gradle pmdTest
複製代碼

運行以後的結果在目錄build/reports/pmd中的main.html,test.html文件中app

參考

基於Gradle使用阿里巴巴Java開發規約進行代碼檢查less

相關文章
相關標籤/搜索