gradle pmd plugin的规则是支持自定义的。在使用的过程中遇到了些问题, 先记录如下。
build.gradle中使用pmd 插件,其中ruleSets = [] 是必须的, 否则ruleSetFiles不生效。因为gradle pmd会使用一些默认规则,例如basic。
task pmd (type: Pmd) {
ruleSetFiles = files("$rootProject.projectDir/tools/pmd/ruleset.xml")
ruleSets = []
source = fileTree('src')
ignoreFailures = true
reports {
xml.enabled = true
html.enabled = false
}
}
pmd/ruleset.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>
This ruleset used by pmd to check my code for bad stuff
</description>
<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>
</ruleset>