1. 程式人生 > 程式設計 >使用Gradle對Java程式碼進行開發規範檢查

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

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開發規約進行程式碼檢查