2016-10-28 3 views
0

Ich habe eine benutzerdefinierte PMD-Regelsatz-XML-Datei erstellt, um einige Regelprüfungen auszuschließen.Benutzerdefiniertes PMD-Regelwerk funktioniert nicht

<?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> 

Und ich den folgenden Befehl bin mit diesem ruleset PMD auszuführen:

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

Es funktioniert gut, aber Ausschluß der Regeln, die in der XML genannten funktioniert nicht. Es nimmt auch diese ausgeschlossenen Regeln an.

Was mache ich hier falsch?

Antwort

0

sieht alles gut, außer dass Sie zweimal einige rulesets importieren :)

Z.B. rulesets/java/coupling.xml einmal importiert:

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

Und später wieder, ohne die umfasst nicht:

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

Wenn Sie die duplizierten rulesets rulesets/java/coupling.xml, entfernen rulesets/java/design.xml und rulesets/java/unnecessary.xml es beheben das Problem.

PMD liest gerade Ihren benutzerdefinierten Regelsatz von oben nach unten und führt dummerweise aus, was in der Datei ist: Importieren Sie alle Regeln aus coupling.xml mit Ausnahme von LawOfDemeter und importieren Sie später alle Regeln erneut aus coupling.xml, diesmal inklusive LawOfDemeter .

Interessanterweise hat PMD kein Problem, wenn die Regeln zweimal importiert werden. Dieser Fall wird stillschweigend ignoriert. Aber vielleicht sollte PMD stattdessen einen Fehler melden? WDYT?

+0

Eigentlich dachte ich zuerst, dass ich die Regel erneut importieren muss, um einige ihrer Funktionen auszuschließen. – Leo

Verwandte Themen