Maven pmd plugin - Exclude/Disable a rule

2019-06-22 08:36发布

I'm attempting to exclude a certain rule from pmd using the maven-pmd-plugin (in a multi-module maven project).

Approach:

Using the excludeFromFailureFile http://maven.apache.org/plugins/maven-pmd-plugin/examples/violation-exclusions.html

Ideally, I want to exclude this rule for the entire product (based on a parent package), however,to being with I tested for a particular class - even that is not working.

Environment

Java 7, Maven 3.0.3

<plugin>
       <groupId>org.apache.maven.plugins</groupId>
       <artifactId>maven-pmd-plugin</artifactId>
       <version>3.1</version>
       <executions>
         <execution>
            <goals>
              <goal>check</goal>
            </goals>
            <configuration>
              <excludeFromFailureFile>exclude-pmd.properties</excludeFromFailureFile>
            </configuration>
          </execution>
          <execution>
             <goals>
                 <goal>cpd-check</goal>
             </goals>
          <!-- Added explicit execution Id to avoid the below problem -->
      <!-- 'build.pluginManagement.plugins.plugin[org.apache.maven.plugins:maven-pmd-plugin].executions.execution.id' must be unique but found duplicate execution with id default @ line 1423, column 36 -->
            <id>cpd-check</id>
          </execution>
   </executions>

Contents of exclude-pmd.properties

mycompany.project.classA=UselessParentheses

1条回答
姐就是有狂的资本
2楼-- · 2019-06-22 09:20

The simplest way to exclude rules, is providing your own ruleset file. You can see where to find the default ruleset file in the answer to this question. If you are using Sonar, you can retrieve the file using the permalink.

Copy the file to your parent module, and then you can customize it, deleting the rules you want to exclude, and use the following configuration:

in the parent pom.xml:

...
<properties>
    <main.basedir>${project.basedir}</main.basedir> 
    <!-- Some child module could set this to true to skip PMD check -->
    <skip.pmd.check>false</skip.pmd.check>
</properties>
...
<plugin>
    <groupId>org.apache.maven.plugins</groupId>
    <artifactId>maven-pmd-plugin</artifactId>
    <!-- This is the version I'm using -->
    <version>2.7.1</version>
    <configuration>
        <rulesets>
            <ruleset>${main.basedir}/path/to/pmd-rules.xml</ruleset>
        </rulesets>
        <skip>${skip.pmd.check}</skip>
    </configuration>
    <executions>
        <execution>
            <id>pmd-config</id>
            <goals>
                <goal>check</goal>
            </goals>
        </execution>
    </executions>
</plugin>

in child modules pom.xml:

<properties>
    <main.basedir>${project.parent.basedir}</main.basedir>
</properties>

in some module you want to skip (i.e contains generated code):

<properties>
    <main.basedir>${project.parent.basedir}</main.basedir>
    <skip.pmd.check>true</skip.pmd.check>
</properties>

Hope this help!

查看更多
登录 后发表回答