2016-10-28 64 views
0

カスタマイズされたPMDルールセットXMLファイルを作成して、一部のルールチェックを除外しました。カスタムPMDルールセットが機能しない

<?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に記載されているルールの除外は働いていません。それらの除外されたルールも取っています。

私はここで間違っていますか?

答えて

0

すべてあなたが二回、いくつかのルールセットをインポートしていること:)

を、例えば除き、よく見えますrulesets/java/coupling.xmlが一度にインポートされます。

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

た後に再度、除外なし:あなたは重複ルールセットrulesets/java/coupling.xmlrulesets/java/design.xmlを削除し、rulesets/java/unnecessary.xml場合

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

それが修正されます問題。

PMDはあなたのカスタムルールセットを上から下に読んでいて、ファイル内の内容をばかげて実行しています:LawOfDemeter以外のすべてのルールをcoupling.xmlからインポートしてから、今度はcouplingOfからすべてのルールをインポートします。今回はLawOfDemeter 。

興味深いことに、ルールを2回インポートすると、PMDに問題はありません。このケースは暗黙のうちに無視されます。しかし、多分PMDは代わりにエラーを起こすべきでしょうか? WDYT?

+0

実際、当初は、ルールを再度インポートしてその機能の一部を除外しなければならないと考えました。 – Leo

関連する問題