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

Eclipse(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
The PMD Plugin

以下、ruleSetsの一覧です。

PMD: 404 - Not Found

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
PMD: 404 - Not Found

プロジェクト単位で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」ルールにしています。後方互換性のために存在しますが非推奨のようです。

PMD: 404 - Not Found

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

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

方法はいろいろあると思いますが、一旦プロジェクトルートに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>

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

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

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

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

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

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

PmdMainタスクがエラーになる

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

コメント

株式会社CONFRAGE ITソリューション事業部をもっと見る

今すぐ購読し、続きを読んで、すべてのアーカイブにアクセスしましょう。

続きを読む

タイトルとURLをコピーしました