问题
I have a custom ruleset definition that refers to a bunch of rules from bundled rulesets. However, I have problems with resolving these bundled rulesets in the maven pmd plugin. Here is a related question with a quick'n'dirty solution for this problem. However, I was wondering whether there might be a clean solution for this problem (because I think that this is a rather common usecase, or?). In the following I'm describing the attempts that I tried so far:
<build>
<pluginManagement>
<plugins>
...
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-pmd-plugin</artifactId>
<version>${maven-pmd-plugin.version}</version>
<configuration>
<linkXref>true</linkXref>
<rulesets>
<ruleset>my_pmd_ruleset.xml</ruleset>
</rulesets>
<failsOnError>false</failsOnError>
<source>${java.source.version}</source>
<target>${java.source.version}</target>
</configuration>
</plugin>
</plugins>
</pluginManagement>
</build>
I defined the maven pmd plugin (version 3.0.1) with my custom ruleset (and Java 1.6) in build/plugin management section of my parent pom as well as in the reporting section. I got many of the following warnings:
[WARNING] Failure executing PMD: Unable to find referenced rule UnusedModifier; perhaps the rule name is mispelled?
I tried to refer to all utilised bundled rulesets:
<build> <pluginManagement> <plugins> <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-pmd-plugin</artifactId> <version>${maven-pmd-plugin.version}</version> <configuration> <linkXref>true</linkXref> <rulesets> <ruleset>rulesets/java/coupling.xml</ruleset> <ruleset>rulesets/java/design.xml</ruleset> <ruleset>rulesets/java/controversial.xml</ruleset> <ruleset>rulesets/java/codesize.xml</ruleset> <ruleset>rulesets/java/clone.xml</ruleset> <ruleset>rulesets/java/braces.xml</ruleset> <ruleset>rulesets/java/basic.xml</ruleset> <ruleset>rulesets/java/finalizers.xml</ruleset> <ruleset>rulesets/java/imports.xml</ruleset> <ruleset>rulesets/java/unit.xml</ruleset> <ruleset>rulesets/java/logging-jakarta-commons.xml</ruleset> <ruleset>rulesets/java/logging-java.xml</ruleset> <ruleset>rulesets/java/migrating.xml</ruleset> <ruleset>rulesets/java/naming.xml</ruleset> <ruleset>rulesets/java/optimizations.xml</ruleset> <ruleset>rulesets/java/strictexception.xml</ruleset> <ruleset>rulesets/java/strings.xml</ruleset> <ruleset>rulesets/java/sunsecure.xml</ruleset> <ruleset>rulesets/java/typeresolution.xml</ruleset> <ruleset>rulesets/java/unusedcode.xml</ruleset> <ruleset>my_pmd_ruleset.xml</ruleset> </rulesets> <failsOnError>false</failsOnError> <source>${java.source.version}</source> <target>${java.source.version}</target> </configuration> </plugin> </plugins> </pluginManagement> </build>
There I'm getting always the following error:
[ERROR] Failed to execute goal org.apache.maven.plugins:maven-pmd-plugin:3.0.1:pmd (pmd) on project my_project: An error has occurred in PMD Report report generation. Could not find resource 'rulesets/java/unit.xml'
The maven pmd plugin depends on pmd, so the bundled rulesets should be part of the classpath, or? The Maven pmd plugin manual says that bundled rulesets should be defined with a relative path and custom rulesets with an absolute path. However, I think that it can also read my custom ruleset via a relative path, because it is part of the classpath. I also tried other thing, e.g., explicit additional dependency definition of pmd in the maven pmd plugin. However, without any success so far :\
来源:https://stackoverflow.com/questions/16164786/how-to-included-bundled-rulesets-in-maven-pmd-plugin