Spring Boot(Gradleプロジェクト)のGradleタスクでPMDを実行してレポート出力する方法

Spring Boot(Gradleプロジェクト)のGradleタスクでPMDを実行する方法

STS(Eclipse)のPMDプラグインではなく、GradleタスクでPMDを実行して循環的複雑度のチェックをしたい。

pmdはプラグインを追加すれば使えます。

以下のリンクページを参考にして、build.gradleを修正します。

plugins {
id 'org.springframework.boot' version '2.2.5.RELEASE'
id 'io.spring.dependency-management' version '1.0.9.RELEASE'
id 'java'
id 'pmd' // add
}
group = 'com.example'
version = '0.0.1-SNAPSHOT'
sourceCompatibility = '1.8'
repositories {
mavenCentral()
}
dependencies {
implementation 'org.springframework.boot:spring-boot-starter'
testImplementation('org.springframework.boot:spring-boot-starter-test') {
exclude group: 'org.junit.vintage', module: 'junit-vintage-engine'
}
}
test {
useJUnitPlatform()
}
// add start
pmd {
toolVersion '6.21.0'
ignoreFailures true
consoleOutput = true // コンソールにも解析結果を出力
ruleSets = [
'java-codesize',
]
}
// add end

view raw
gistfile1.txt
hosted with ❤ by GitHub

https://docs.gradle.org/current/userguide/pmd_plugin.html

以下、ruleSetsの一覧です。

https://pmd.github.io/pmd-6.20.0/pmd_rules_java.html

CyclomaticComplexityだけ適用するケース

rulesetのさらに細かいルールだけ適用したい場合は、「category/java/design.xml/CyclomaticComplexity」というように記載してあげればよいです。CyclomaticComplexityは、循環的複雑度についてチェックをしたい場合になります。

plugins {
id 'org.springframework.boot' version '2.2.5.RELEASE'
id 'io.spring.dependency-management' version '1.0.9.RELEASE'
id 'java'
id 'pmd' // add
}
group = 'com.example'
version = '0.0.1-SNAPSHOT'
sourceCompatibility = '1.8'
repositories {
mavenCentral()
}
dependencies {
implementation 'org.springframework.boot:spring-boot-starter'
testImplementation('org.springframework.boot:spring-boot-starter-test') {
exclude group: 'org.junit.vintage', module: 'junit-vintage-engine'
}
}
test {
useJUnitPlatform()
}
// add start
pmd {
toolVersion '6.21.0'
ignoreFailures true
consoleOutput = true // コンソールにも解析結果を出力
ruleSets = [
'category/java/design.xml/CyclomaticComplexity' // CyclomaticComplexityのみ適用(カンマ区切りで複数指定可能)
]
}
// add end

view raw
gistfile1.txt
hosted with ❤ by GitHub

https://pmd.github.io/pmd-6.20.0/pmd_rules_java_design.html#cyclomaticcomplexity

プロジェクト単位でPMDを使用可能にする

プロジェクトを右クリックして、「PMDを使用可能にする」にチェックを入れます。

Spring Boot(Gradleプロジェクト)のGradleタスクでPMDを実行してレポート出力する方法

言語「Java」、ルール「CyclomaticCoplexity」にチェックを入れておきます。

「適用して閉じる」でリアルタイムに反映されます。

Gradleタスクでレポート出力する

Gradleタスクのbuildを実行すると、pmdMain,pmdTestタスクが実行されます。

Spring Boot(Gradleプロジェクト)のGradleタスクでPMDを実行してレポート出力する方法

結果のレポートは、build\reports\pmd配下にmain.html,test.htmlとして出力されます。

Spring Boot(Gradleプロジェクト)のGradleタスクでPMDを実行してレポート出力する方法

以下、main.htmlです。

Spring Boot(Gradleプロジェクト)のGradleタスクでPMDを実行してレポート出力する方法

とりあえず「java-codesize」ルールにしています。後方互換性のために存在しますが非推奨のようです。

https://pmd.github.io/pmd-6.20.0/pmd_rules_java.html#additional-rulesets

ルールをカスタマイズする

ルールはデフォルト値がありますが、これをカスタマイズしたいことが往々にあります。

方法はいろいろあると思いますが、一旦プロジェクトルートにpmd-settings.xmlファイルを作成します。

中身はこんな感じです。

<?xml version="1.0" encoding="UTF-8"?>
<ruleset name="quickstart"
xmlns="http://pmd.sourceforge.net/ruleset/3.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://pmd.sourceforge.net/ruleset/3.0.0 https://pmd.sourceforge.io/ruleset_3_0_0.xsd">
<description>Custom PMD Rule Set</description>
<rule ref="category/java/design.xml/CyclomaticComplexity">
<properties>
<property name="reportLevel" value="3"/> <!– 3にカスタマイズできる –>
</properties>
</rule>
</ruleset>

view raw
gistfile1.txt
hosted with ❤ by GitHub

循環的複雑度はデフォルト10ですが、3に変更しました。

このファイルをbuild.gradleで読み込みます。

pmdタスクのところを以下のように書きます。

pmd {
toolVersion '6.22.0'
ignoreFailures true
consoleOutput = true
ruleSetFiles = files("$rootDir/pmd-settings.xml")
ruleSets = []
}

view raw
gistfile1.txt
hosted with ❤ by GitHub

filesで先ほど作成したファイルを読み込むのと、ruleSetsを空の配列にします。

これでカスタマイズが完了です。

PmdMainタスクがエラーになる

PmdMainタスクがエラーになる場合はプロキシ設定が怪しいです。iniファイルでプロキシ設定をしていたのですが、それではエラーとなってしまったので、Eclipseの設定でプロキシ設定したら解決しました。

スポンサーリンク
  • このエントリーをはてなブックマークに追加
  • Evernoteに保存Evernoteに保存
スポンサーリンク

コメントをどうぞ

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

CAPTCHA