Java 自定义PMD规则集不工作

Java 自定义PMD规则集不工作,java,xml,command-line,pmd,Java,Xml,Command Line,Pmd,我创建了一个定制的PMD规则集xml文件,以排除一些规则检查 <?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:sche

我创建了一个定制的PMD规则集xml文件,以排除一些规则检查

<?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>
它工作得很好,但是排除xml中提到的规则是不起作用的。它也在考虑那些被排除在外的规则


我在这里做错了什么?

除了两次导入一些规则集之外,所有的看起来都很好:)

例如,
规则集/java/coupling.xml
导入一次:


之后,在没有排除的情况下:


如果删除重复的规则集
rulesets/java/coupling.xml
rulesets/java/design.xml
、以及
rulesets/java/unnered.xml
,则会解决问题

PMD只是自上而下地读取自定义规则集,然后愚蠢地执行文件中的内容:从coupling.xml导入除LawOfDemeter之外的所有规则,然后再次从coupling.xml导入所有规则,这次包括LawOfDemeter


有趣的是,如果规则导入两次,PMD就不会有问题。这个案子被悄悄地忽略了。但也许PMD应该引发一个错误?WDYT?

除了两次导入某些规则集外,所有规则看起来都很好:)

例如,
规则集/java/coupling.xml
导入一次:


之后,在没有排除的情况下:


如果删除重复的规则集
rulesets/java/coupling.xml
rulesets/java/design.xml
、以及
rulesets/java/unnered.xml
,则会解决问题

PMD只是自上而下地读取自定义规则集,然后愚蠢地执行文件中的内容:从coupling.xml导入除LawOfDemeter之外的所有规则,然后再次从coupling.xml导入所有规则,这次包括LawOfDemeter


有趣的是,如果规则导入两次,PMD就不会有问题。这个案子被悄悄地忽略了。但也许PMD应该引发一个错误?WDYT?

实际上,最初我认为必须再次导入规则以排除其某些功能。实际上,最初我认为必须再次导入规则以排除其某些功能。
pmd -d C:\Users\leo\Documents\workspace\SampleProject\src\Sample.java -f html -R CustomRuleset.xml>Report.html
<rule ref="rulesets/java/coupling.xml">
    <exclude name="LawOfDemeter"/>
</rule>
<rule ref="rulesets/java/coupling.xml"/>