Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Maven pmd plugin - Exclude/Disable a rule

Tags:

maven

maven-3

pmd

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
like image 252
Jaga Avatar asked Oct 01 '22 05:10

Jaga


1 Answers

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!

like image 100
Pablo Lascano Avatar answered Oct 05 '22 12:10

Pablo Lascano