Violation Exclusions
It is possible to exclude some sources from PMD/CPD check to prevent failures.
<project>
...
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-pmd-plugin</artifactId>
<version>3.27.0</version>
<executions>
<execution>
<goals>
<goal>check</goal>
</goals>
<configuration>
<excludeFromFailureFile>exclude-pmd.properties</excludeFromFailureFile>
</configuration>
</execution>
<execution>
<goals>
<goal>cpd-check</goal>
</goals>
<configuration>
<excludeFromFailureFile>exclude-cpd.properties</excludeFromFailureFile>
</configuration>
</execution>
</executions>
</plugin>
</plugins>
</build>
...
</project>
For cpd check, you can exclude classes to not verify. Classes can be specified in two ways:
- Comma-separated: org.apache.maven.ClassA and org.apache.maven.ClassB contain duplicated code across classes.
- Single class per line: org.apache.maven.ClassC and org.apache.maven.ClassD do not share duplicate code, but have duplicated code internally.
The properties file for cpd must have the following format:
org.apache.maven.ClassA,org.apache.maven.ClassB
org.apache.maven.ClassC
org.apache.maven.ClassD
For pmd check, you can exclude rules per classes. The properties file must have the following format:
org.apache.maven.ClassA=UnusedPrivateField,EmptyCatchBlock
org.apache.maven.ClassB=UnusedPrivateField,UnusedFormalParameter,UnusedPrivateMethod
You can only exclude (checks for) classes through the exclusion files. If you want more flexibility and exclude classes with a certain name, or whole packages, for example because of generated code, you have to do this in the <configuration>
section of the plugin, using the <excludes>
or <excludeRoots>
elements. To avoid confusion, don't write those to the plugin's configuration as a <build>
and <reporting>
plugin. Instead, configure the plugin in the <pluginManagement>
section of your POM, so executions of the build and site lifecycle pick it up.
<project>
...
<build>
<pluginManagement>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-pmd-plugin</artifactId>
<version>3.27.0</version>
<configuration>
<excludes>
<exclude>**/*Bean.java</exclude>
<exclude>**/generated/*.java</exclude>
</excludes>
<excludeRoots>
<excludeRoot>target/generated-sources/stubs</excludeRoot>
</excludeRoots>
</configuration>
</plugin>
</plugins>
</pluginManagement>
</build>
...
</project>