PMDのrulesetのxmlを全部定義しようとしたら、
なかなか見つからなかったので、
見つかった結果と、pom.xmlの定義方をメモします。

最初に見たサイト


pom.xmlでの記述方(maven-pmd-pluginの記述のみの抜粋です。)

            <!-- PMD -->
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-pmd-plugin</artifactId>
                <version>3.6</version>
                <configuration>
                    <linkXRef>false</linkXRef>
                    <sourceEncoding>UTF-8</sourceEncoding>
                    <failOnViolation>false</failOnViolation>
                    <targetJdk>1.8</targetJdk>
                    <rulesets>
                        <ruleset>rulesets/java/android.xml</ruleset>
                        <ruleset>rulesets/java/basic.xml</ruleset>
                        <ruleset>rulesets/java/braces.xml</ruleset>
                        <ruleset>rulesets/java/clone.xml</ruleset>
                        <ruleset>rulesets/java/codesize.xml</ruleset>
                        <ruleset>rulesets/java/comments.xml</ruleset>
                        <ruleset>rulesets/java/controversial.xml</ruleset>
                        <!-- Removed misconfigured rule: LoosePackageCoupling cause: No packages or classes specified -->
                        <!-- coupling.xml からはLoosePackageCouplingというRuleが削除されているらしく警告が出ます -->
                        <ruleset>rulesets/java/coupling.xml</ruleset>
                        <ruleset>rulesets/java/design.xml</ruleset>
                        <ruleset>rulesets/java/empty.xml</ruleset>
                        <ruleset>rulesets/java/finalizers.xml</ruleset>
                        <ruleset>rulesets/java/imports.xml</ruleset>
                        <ruleset>rulesets/java/j2ee.xml</ruleset>
                        <ruleset>rulesets/java/javabeans.xml</ruleset>
                        <ruleset>rulesets/java/junit.xml</ruleset>
                        <ruleset>rulesets/java/logging-jakarta-commons.xml</ruleset>
                        <ruleset>rulesets/java/logging-java.xml</ruleset>
                        <ruleset>rulesets/java/migrating.xml</ruleset>
                        <!-- migrating_to_13.xml,
                           migrating_to_14.xml,
                           migrating_to_15.xml の内容はmigrating.xml に包括されて定義されているので、特に記述不要ですが、一応記載 -->
                        <ruleset>rulesets/java/migrating_to_13.xml</ruleset>
                        <ruleset>rulesets/java/migrating_to_14.xml</ruleset>
                        <ruleset>rulesets/java/migrating_to_15.xml</ruleset>
                        <ruleset>rulesets/java/migrating_to_junit4.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/unnecessary.xml</ruleset>
                        <ruleset>rulesets/java/unusedcode.xml</ruleset>
                    </rulesets>
                </configuration>
                <executions>
                    <execution>
                        <phase>verify</phase>
                        <id>pmd</id>
                        <goals>
                            <goal>check</goal>
                        </goals>
                    </execution>
                    <execution>
                        <phase>process-sources</phase>
                        <id>cpd</id>
                        <goals>
                            <goal>cpd-check</goal>
                        </goals>
                    </execution>
                </executions>
            </plugin>
* 補足 * coupling.xml からはLoosePackageCouplingというRuleが削除されているらしく警告が出ます * migrating_to_13.xml,
migrating_to_14.xml,
migrating_to_15.xml の内容はmigrating.xml に包括されて定義されているので、本来記述不要です。


実際の開発で、全てのルールを有効化してチェックするか?

実際の開発で、全部ルール定義して使うかというと、
そんなことはせず、ルールセットをカスタマイズして使うことになるかと思います。
※ルールセットを自作するとかそういう話ではなく、ありもののルールを有効化/無効化する。

幾つかGithub のプロジェクトのpmd-ruleset.xmlを見た感じだと、

  1. ルール単位に全て記述して、コメントアウトしていった形式のruleset.xml
  2. xml単位に記述して、適用したくないルールのみexcludes記述をしていった形式のruleset.xml

がありました。

個人的には、[2.]の記述の方が好きですが、
pmdがversionUpされてルールセットが追加された場合の、挙動は異なってくるので、
人によっては、[1.]を選ぶかなと思いました。

以上です。

コメント