I'm using the following to look at bad exception patterns in PMD in maven:
<configuration>
<rulesets>
<ruleset>/rulesets/java/strictexception.xml</ruleset>
</rulesets>
</configuration>
This is what I want to do, but it doesn't work (for diagnostics and focusing on particular needs)
<configuration>
<rulesets>
<ruleset>/rulesets/java/strictexception.xml/AvoidCatchingThrowable</ruleset>
<ruleset>/rulesets/java/strictexception.xml/SignatureDeclareThrowsException</ruleset>
<ruleset>/rulesets/java/strictexception.xml/ExceptionAsFlowControl</ruleset>
<ruleset>/rulesets/java/strictexception.xml/AvoidCatchingNPE</ruleset>
<ruleset>/rulesets/java/strictexception.xml/AvoidThrowingRawExceptionTypes</ruleset>
<ruleset>/rulesets/java/strictexception.xml/AvoidThrowingNullPointerException</ruleset>
<ruleset>/rulesets/java/strictexception.xml/AvoidRethrowingException</ruleset>
<ruleset>/rulesets/java/strictexception.xml/DoNotExtendJavaLangError</ruleset>
<ruleset>/rulesets/java/strictexception.xml/DoNotThrowExceptionInFinally</ruleset>
<ruleset>/rulesets/java/strictexception.xml/AvoidThrowingNewInstanceOfSameException</ruleset>
<ruleset>/rulesets/java/strictexception.xml/AvoidCatchingGenericException</ruleset>
<ruleset>/rulesets/java/strictexception.xml/AvoidLosingExceptionInformation</ruleset> -->
</rulesets>
</configuration>
My question is: With pmd rulesets in maven, how do you select an individual rule?
This is not directly possible with maven.
I'd recommend creating a custom ruleset file and reference this single ruleset in pom.xml instead.
Custom Ruleset File: http://pmd.sourceforge.net/pmd-5.2.3/customizing/howtomakearuleset.html
Example (filename custom-ruleset.xml
):
<?xml version="1.0"?>
<ruleset name="Custom ruleset"
xmlns="http://pmd.sourceforge.net/ruleset/2.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://pmd.sourceforge.net/ruleset/2.0.0 http://pmd.sourceforge.net/ruleset_2_0_0.xsd">
<description>
Only some selected rules for bad exception patterns
</description>
<rule ref="rulesets/java/strictexception.xml/AvoidCatchingThrowable" />
<rule ref="rulesets/java/strictexception.xml/SignatureDeclareThrowsException" />
<rule ref="rulesets/java/strictexception.xml/ExceptionAsFlowControl" />
<rule ref="rulesets/java/strictexception.xml/AvoidCatchingNPE" />
<rule ref="rulesets/java/strictexception.xml/AvoidThrowingRawExceptionTypes" />
<rule ref="rulesets/java/strictexception.xml/AvoidThrowingNullPointerException" />
<rule ref="rulesets/java/strictexception.xml/AvoidRethrowingException" />
<rule ref="rulesets/java/strictexception.xml/DoNotExtendJavaLangError" />
<rule ref="rulesets/java/strictexception.xml/DoNotThrowExceptionInFinally" />
<rule ref="rulesets/java/strictexception.xml/AvoidThrowingNewInstanceOfSameException" />
<rule ref="rulesets/java/strictexception.xml/AvoidCatchingGenericException" />
<rule ref="rulesets/java/strictexception.xml/AvoidLosingExceptionInformation" />
</ruleset>
Please note, that you need to specify the original ruleset name without a leading slash, otherwise PMD won't find the ruleset. There are also a couple of other tricks possible with a custom ruleset, e.g. importing a complete ruleset but exclude one or more rules.
Maven PMD Configuration:
<configuration>
<rulesets>
<ruleset>custom-ruleset.xml</ruleset>
</rulesets>
</configuration>