2013-04-15 48 views
12

我想排除POM中的單個PMD規則,但它不起作用。 我試圖創建一個PMD-exclude.xml(在同一目錄作爲pom.xml中):從maven插件中的PMD中刪除單個規則檢查

<?xml version="1.0"?> 
<ruleset name="remove_rules"> 
    <description>Remove rules</description> 
    <rule ref="rulesets/unnecessary.xml"> 
     <exclude name="UselessParentheses"/> 
    </rule> 
</ruleset> 

http://www.ing.iac.es/~docs/external/java/pmd/howtomakearuleset.html和pom.xml中引用它:

<plugin> 
    <groupId>org.apache.maven.plugins</groupId> 
    <artifactId>maven-pmd-plugin</artifactId> 
    <version>3.0.1</version> 
    <configuration> 
     <sourceEncoding>utf-8</sourceEncoding> 
      <rulesets> 
        <ruleset>${pom.basedir}/pmd-exclude.xml</ruleset> 
      </rulesets> 
    </configuration> 
</plugin> 

但它一直報告這些規則。另外:我不想指定必須檢查哪些規則,因爲新版本可以(並且將會)包含新規則,並且我不想檢查每個新版本中將運行哪些新規則。

+0

被找到任何溶液?我正在嘗試excludeFromFailureFile,但即使這樣也行不通。 – Jaga

+1

我無法爲此找到真正的解決方案。之後,我們遷移到Sonar,您可以配置適用的規則,這是我需要的,以及所有圖形和其他很酷的東西。但這不完全是對這個問題的答案。 –

+0

感謝您的快速響應 – Jaga

回答

5

我認爲你需要添加你想檢查的規則集,並放棄你不需要的特定規則。

的PMD-exclude.xml應該是這樣的:

<?xml version="1.0" encoding="UTF-8"?> 
<ruleset xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
    name="Android Application Rules" 
    xmlns="http://pmd.sf.net/ruleset/1.0.0" 
    xsi:noNamespaceSchemaLocation="http://pmd.sf.net/ruleset_xml_schema.xsd" 
    xsi:schemaLocation="http://pmd.sf.net/ruleset/1.0.0 http://pmd.sf.net/ruleset_xml_schema.xsd" > 

    <description>Remove rules</description> 

    <rule ref="rulesets/clone.xml" /> 
    <rule ref="rulesets/finalizers.xml" /> 
    <rule ref="rulesets/imports.xml" /> 
    <rule ref="rulesets/logging-java.xml" /> 
    <rule ref="rulesets/unnecessary.xml" > 
     <exclude name="UselessParentheses" /> 
    </rule> 

</ruleset> 
+0

PMD團隊隨着時間的推移添加了新的規則集?你的答案似乎與我所需要的密切相關。 –

0

@ marcelopazzo的解決方案爲我工作。我只想補充一點,如果你正在使用一個多模塊maven項目,那麼你將不得不更新你對pmd-exclude.xml的引用,除非你打算在每個模塊中都有這個文件的副本。

<plugin> 
     <groupId>org.apache.maven.plugins</groupId> 
     <artifactId>maven-pmd-plugin</artifactId> 
     <version>3.6</version> 
     <configuration> 
      <rulesets> 
       <ruleset>${project.parent.basedir}/pmd-exclude.xml</ruleset> 
      </rulesets> 
     </configuration> 
    </plugin>