繁体   English   中英

自定义PMD规则集不起作用

[英]Custom PMD ruleset not working

我创建了一个自定义的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>

我正在使用以下命令通过此规则集运行PMD:

pmd -d C:\Users\leo\Documents\workspace\SampleProject\src\Sample.java -f html -R CustomRuleset.xml>Report.html

它运作良好,但排除xml中提到的规则无效。 它也采用了那些排除的规则。

我在这里做错了什么?

一切看起来都不错,只不过您两次导入了一些规则集:)

例如, rulesets/java/coupling.xml被导入一次:

 <rule ref="rulesets/java/coupling.xml"> <exclude name="LawOfDemeter"/> </rule> 

再后来,没有排除项:

 <rule ref="rulesets/java/coupling.xml"/> 

如果删除重复的规则集rulesets/java/coupling.xmlrulesets/java/design.xmlrulesets/java/unnecessary.xml ,它将解决此问题。

PMD只是从头到尾读取您的自定义规则集,然后愚蠢地执行文件中的内容:从LawrenceDemeter以外的所有其他规则中导入所有来自coupling.xml的规则,然后再从该耦合中再导入所有规则,包括LawOfDemeter。

有趣的是,如果两次导入规则,PMD不会有问题。 这种情况被默默忽略。 但是也许PMD应该引发一个错误? WDYT?

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM