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
以下、ruleSetsの一覧です。
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を使用可能にする
プロジェクトを右クリックして、「PMDを使用可能にする」にチェックを入れます。
言語「Java」、ルール「CyclomaticCoplexity」にチェックを入れておきます。
「適用して閉じる」でリアルタイムに反映されます。
Gradleタスクでレポート出力する
Gradleタスクのbuildを実行すると、pmdMain,pmdTestタスクが実行されます。
結果のレポートは、build\reports\pmd配下にmain.html,test.htmlとして出力されます。
以下、main.htmlです。警告がなければ、わかりにくいですが表示はこれだけのようです。
とりあえず「java-codesize」ルールにしています。後方互換性のために存在しますが非推奨のようです。
ルールをカスタマイズする
ルールはデフォルト値がありますが、これをカスタマイズしたいことが往々にあります。
方法はいろいろあると思いますが、一旦プロジェクトルートに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の設定でプロキシ設定したら解決しました。
KHI入社して退社。今はCONFRAGEで正社員です。関西で140-170/80~120万から受け付けております^^
得意技はJS(ES6),Java,AWSの大体のリソースです
コメントはやさしくお願いいたします^^
座右の銘は、「狭き門より入れ」「願わくは、我に七難八苦を与えたまえ」です^^
コメント