自定义PMD规则集不起作用 [英] Custom PMD ruleset not working
问题描述
我创建了一个自定义的PMD规则集xml文件,以排除某些规则检查.
I have created a customized PMD ruleset xml file to exclude some rule check.
<?xml version="1.0" encoding="UTF-8"?>
<ruleset xmlns="http://pmd.sourceforge.net/ruleset/2.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
name="full-pmd-ruleset"
xsi:schemaLocation="http://pmd.sourceforge.net/ruleset/2.0.0 http://pmd.sourceforge.net/ruleset_2_0_0.xsd">
<description>Full 5.1.1 PMD rule set</description>
<rule ref="rulesets/java/coupling.xml">
<exclude name="LawOfDemeter"/>
</rule>
<rule ref="rulesets/java/design.xml">
<exclude name="GodClass"/>
</rule>
<rule ref="rulesets/java/unnecessary.xml">
<exclude name="UnnecessaryFinalModifier"/>
<exclude name="UnnecessaryReturn"/>
</rule>
<rule ref="rulesets/java/android.xml"/>
<rule ref="rulesets/java/basic.xml"/>
<rule ref="rulesets/java/braces.xml"/>
<rule ref="rulesets/java/clone.xml"/>
<rule ref="rulesets/java/codesize.xml"/>
<rule ref="rulesets/java/comments.xml"/>
<rule ref="rulesets/java/controversial.xml"/>
<rule ref="rulesets/java/coupling.xml"/>
<rule ref="rulesets/java/design.xml"/>
<rule ref="rulesets/java/empty.xml"/>
<rule ref="rulesets/java/finalizers.xml"/>
<rule ref="rulesets/java/imports.xml"/>
<rule ref="rulesets/java/j2ee.xml"/>
<rule ref="rulesets/java/junit.xml"/>
<rule ref="rulesets/java/logging-jakarta-commons.xml"/>
<rule ref="rulesets/java/logging-java.xml"/>
<rule ref="rulesets/java/javabeans.xml"/>
<rule ref="rulesets/java/migrating.xml"/>
<rule ref="rulesets/java/naming.xml"/>
<rule ref="rulesets/java/optimizations.xml"/>
<rule ref="rulesets/java/sunsecure.xml"/>
<rule ref="rulesets/java/strictexception.xml"/>
<rule ref="rulesets/java/strings.xml"/>
<rule ref="rulesets/java/unnecessary.xml"/>
<rule ref="rulesets/java/basic.xml"/>
<rule ref="rulesets/java/unusedcode.xml"/>
<rule ref="rulesets/plsql/codesize.xml"/>
<rule ref="rulesets/plsql/TomKytesDespair.xml"/>
<rule ref="rulesets/plsql/dates.xml"/>
</ruleset>
我正在使用以下命令在此规则集下运行PMD:
And I am using the following command to run PMD with this ruleset:
pmd -d C:\Users\leo\Documents\workspace\SampleProject\src\Sample.java -f html -R CustomRuleset.xml>Report.html
它运行良好,但是排除xml中提到的规则不起作用.它也会采用那些排除的规则.
It works well but exclusion of the rules that are mentioned in the xml are not working. It is taking those excluded rules as well.
我在做什么错了?
推荐答案
除了您两次导入一些规则集:)
All looks well, except that you are importing some rulesets twice :)
例如 rulesets/java/coupling.xml
导入一次:
<rule ref="rulesets/java/coupling.xml">
<exclude name="LawOfDemeter"/>
</rule>
再后来,没有排除项:
<rule ref="rulesets/java/coupling.xml"/>
如果您删除重复的规则集 rulesets/java/coupling.xml
, rulesets/java/design.xml
和 rulesets/java/unnecessary.xml
可以解决问题.
If you remove the duplicated rulesets rulesets/java/coupling.xml
, rulesets/java/design.xml
, and rulesets/java/unnecessary.xml
it will fix the problem.
PMD只是从头到尾读取您的自定义规则集,并愚蠢地执行文件中的内容:从LawrenceDemeter之外的所有其他规则中导入所有的规则,然后从耦合.xml中导入所有的规则,这次包括LawOfDemeter.
PMD is just reading your custom ruleset from top to down and stupidly executing, what's in the file: Import all rules from coupling.xml except for LawOfDemeter and later on import again all rules from coupling.xml, this time including LawOfDemeter.
有趣的是,如果两次导入规则,PMD不会出现问题.这种情况被默默忽略.但是,也许PMD应该引发一个错误?WDYT?
Interestingly, PMD does not have a problem if the rules are imported twice. This case is silently ignored. But maybe PMD should raise an error instead? WDYT?
这篇关于自定义PMD规则集不起作用的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!