PMDのrulesetのxmlを全部定義しようとしたら、
なかなか見つからなかったので、
見つかった結果と、pom.xmlの定義方をメモします。
最初に見たサイト
-
PMDでバグを退治する
IBMの記事 -
PMD | TK Factory
ルールセットの日本語化をしてくれているサイト
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>
migrating_to_14.xml,
migrating_to_15.xml の内容はmigrating.xml に包括されて定義されているので、本来記述不要です。
実際の開発で、全てのルールを有効化してチェックするか?
実際の開発で、全部ルール定義して使うかというと、
そんなことはせず、ルールセットをカスタマイズして使うことになるかと思います。
※ルールセットを自作するとかそういう話ではなく、ありもののルールを有効化/無効化する。
幾つかGithub のプロジェクトのpmd-ruleset.xmlを見た感じだと、
- ルール単位に全て記述して、コメントアウトしていった形式のruleset.xml
- xml単位に記述して、適用したくないルールのみexcludes記述をしていった形式のruleset.xml
がありました。
個人的には、[2.]の記述の方が好きですが、
pmdがversionUpされてルールセットが追加された場合の、挙動は異なってくるので、
人によっては、[1.]を選ぶかなと思いました。
以上です。
- 参考サイト
- pmd/all-java.xml at master · pmd/pmd
github のpmdプロジェクト内にある全てのjavaルールを適用するためのruleset.xmlファイル - pmd/pmd-java/src/main/resources/rulesets/java at master · pmd/pmd
pmdが内包するルールセット定義ファイル一覧は、こちらを参照するのが良いと思います。 - android-boilerplate/pmd-ruleset.xml at master · ribot/android-boilerplate
GitHubのプロジェクトのruleset.xml その1 - mahout/mahout-pmd-ruleset.xml at master · apache/mahout
GitHubのプロジェクトのruleset.xml その2 - GDSSecurity/GDS-PMD-Security-Rules: Custom security ruleset for the popular Java static analysis tool PMD.
これは気になったので、記載。セキュリティチェック用のPMDルールセットのプロジェクトがありました。
- pmd/all-java.xml at master · pmd/pmd
コメント