GradleのPMD Pluginでは、日本語メソッド名を含むソースコードに対するPMDの実行でエラーが発生する(Windows)。
原因として、PMDがソースを読み込むときのエンコーディングがシステムプロパティ依存であることが挙げられる。
以下のリンクのソースの16行目で、システムのエンコーディングでソースの読み込みをしているので、
システムのエンコーディングとソースのエンコーディングが合わない場合に、日本語が文字化けしていて失敗していた模様。
この問題については、issueにも挙げられてはいた。
しかし、特に設定の追加などは実施されることなく、クローズされている。
issueの中の記述にもある通り、gradle.propertiesでorg.gradle.jvmargs=-Dfile.encoding=UTF-8
を記載すればPMDは動作することが確認できたが、
この設定はGradleタスク全体の設定になるので、一部のタスクのみで適用したい、というのが出来なかった。
(例えばCheckstyleでは、この設定があると、エラー理由をコンソール出力した際に文字化けしてしまう)
解決策
テストクラスでのみ日本語メソッド名が存在していたので、「pmdTest」タスクの最初の処理として、
システムプロパティにファイルエンコーディングを設定する処理を追加したところ、想定通りの動作をするようになった。
plugins { id 'java' id 'pmd' } pmd { sourceSets = [sourceSets.main, sourceSets.test] // pmd違反がある場合ビルドを失敗させる ignoreFailures = false // pmd結果をコンソール出力する consoleOutput = true // 定義ファイルのパス ruleSetFiles = files("${rootDir}/config/pmd/custom-rules.xml", "${rootDir}/config/pmd/custom-rules-test.xml") ruleSets = [] // 使用するPMDのバージョン toolVersion = "6.51.0" } // 以下の記述を追加 pmdTest.doFirst { System.setProperty("file.encoding", "UTF-8") }