2013-04-15 51 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>