Spring Boot + npm + Geb で入力フォームを作ってテストする ( その102 )( SpotBugs を 4.0.2 → 4.4.1 へ、PMD を 6.23.0 → 6.39.0 へ、error-prone を 2.3.4 → 2.9.0 へバージョンアップする )
概要
記事一覧はこちらです。
- 今回の手順で確認できるのは以下の内容です。
- SpotBugs を 4.0.2 → 4.4.1 へ、PMD を 6.23.0 → 6.39.0 へ、error-prone を 2.3.4 → 2.9.0 へバージョンアップします。
- Checkstyle は今回はバージョンアップしません。JDK 17 へバージョンアップした時にエラーが出なかったのと、Record の設定が反映された https://github.com/ksby/ksbysample-webapp-lending/blob/master/config/checkstyle/google_checks.xml のファイルをコピーしたいためです。JDK 17 バージョンアップ後にバージョンアップします。
参照したサイト・書籍
目次
- SpotBugs を 4.0.2 → 4.4.1 へバージョンアップする
- PMD を 6.23.0 → 6.39.0 へバージョンアップする
- error-prone を 2.3.4 → 2.9.0 へバージョンアップする
手順
SpotBugs を 4.0.2 → 4.4.1 へバージョンアップする
build.gradle の以下の点を変更します。
plugins {
..........
id "com.github.spotbugs" version "4.7.7"
..........
}
..........
spotbugs {
toolVersion = "${spotbugs.toolVersion.get()}"
ignoreFailures = true
spotbugsTest.enabled = false
excludeFilter = file("${rootProject.projectDir}/config/spotbugs/exclude.xml")
}
spotbugsMain {
reports {
html {
enabled = true
}
}
}
..........
dependencies {
..........
// for SpotBugs
spotbugs(configurations.spotbugsPlugins.dependencies)
annotationProcessor("com.github.spotbugs:spotbugs-annotations:${spotbugs.toolVersion.get()}")
spotbugsPlugins("com.h3xstream.findsecbugs:findsecbugs-plugin:1.11.0")
..........
}
- plugins block の以下の点を変更します。
id "com.github.spotbugs" version "4.0.8"→id "com.github.spotbugs" version "4.7.7"- プラグインのバージョンを 4.7.7 にすることで SpotBugs のバージョンが 4.4.1 になります。SpotBugs version mapping 参照。
- spotbugs block の以下の点を変更します。
toolVersion = "4.0.2"→toolVersion = "${spotbugs.toolVersion.get()}"excludeFilter = file("${rootProject.projectDir}/config/spotbugs/exclude.xml")を追加します。
- spotbugsMain block の以下の点を変更します。
stylesheet = "color.xsl"を削除します。
- dependencies block の以下の点を変更します。
def spotbugsVersion = "4.0.2"を削除します。- 以下の行を削除します。
compileOnly("com.github.spotbugs:spotbugs:${spotbugsVersion}") { exclude group: "pull-parser", module: "pull-parser" }compileOnly("net.jcip:jcip-annotations:1.0")compileOnly("com.github.spotbugs:spotbugs-annotations:${spotbugsVersion}")testImplementation("com.google.code.findbugs:jsr305:3.0.2")spotbugsStylesheets("com.github.spotbugs:spotbugs:${spotbugsVersion}")
- 以下の行を追加します。
spotbugs(configurations.spotbugsPlugins.dependencies)compileOnly("com.github.spotbugs:spotbugs-annotations:${spotbugs.toolVersion.get()}")
spotbugsPlugins("com.h3xstream.findsecbugs:findsecbugs-plugin:1.10.1")→spotbugsPlugins("com.h3xstream.findsecbugs:findsecbugs-plugin:1.11.0")
config ディレクトリの下に spotbugs ディレクトリを新規作成し、https://github.com/ksby/ksbysample-webapp-lending/blob/master/config/spotbugs/exclude.xml をコピーします。
Gradle Tool Window の左上にある「Reload All Gradle Projects」ボタンをクリックして更新します。
clean タスク実行 → Rebuild Project 実行 → build タスクを実行すると "BUILD SUCCESSFUL" のメッセージが出力されました。

PMD を 6.23.0 → 6.39.0 へバージョンアップする
build.gradle の以下の点を変更します。
pmd {
toolVersion = "6.39.0"
sourceSets = [project.sourceSets.main]
ignoreFailures = true
consoleOutput = true
ruleSetFiles = rootProject.files("/config/pmd/pmd-project-rulesets.xml")
ruleSets = []
}
toolVersion = "6.23.0"→toolVersion = "6.39.0"に変更します。
Gradle Tool Window の左上にある「Reload All Gradle Projects」ボタンをクリックして更新します。
clean タスク実行 → Rebuild Project 実行 → build タスクを実行すると PMD で警告が出ました。

レポートファイルを開くと警告は全部で 3種類、7箇所でした。

Logger calls should be surrounded by log level guards. は https://ksby.hatenablog.com/entry/2021/09/03/211111#2-1 で対応したように config/pmd/pmd-project-rulesets.xml に設定を追加して、trace, debug のログ出力だけこのチェックが実行されるようにします。
<rule ref="category/java/bestpractices.xml"> <!-- CommentRequired はここでは exclude し、下で別途定義する --> <exclude name="GuardLogStatement"/> </rule> <rule ref="category/java/bestpractices.xml/GuardLogStatement"> <properties> <property name="logLevels" value="trace,debug"/> <property name="guardsMethods" value="isTraceEnabled,isDebugEnabled"/> </properties> </rule>
The initializer for variable 'selectOptions' is never used (overwritten on lines 22 and 24) は SelectOptions selectOptions = null; → SelectOptions selectOptions; に変更します。
SelectOptions selectOptions;
if (countFlg) {
selectOptions = SelectOptions.get().offset(offset).limit(limit).count();
} else {
selectOptions = SelectOptions.get().offset(offset).limit(limit);
}
The method 'checkTelAndEmail(boolean, String, String, String, String, Errors)' has a cognitive complexity of 20, current threshold is 15 は InquiryInput02FormValidator#checkTelAndEmail のメソッドが複雑なので警告が出ているのですが、今回はメソッドに @SuppressWarnings("PMD.CognitiveComplexity") を付与して警告が出ないようにします。
clean タスク実行 → Rebuild Project 実行 → build タスクを実行すると無事 "BUILD SUCCESSFUL" のメッセージが出力されました。

error-prone を 2.3.4 → 2.9.0 へバージョンアップする
build.gradle の以下の点を変更します。
plugins {
..........
id "net.ltgt.errorprone" version "2.0.2"
..........
}
..........
dependencies {
..........
def errorproneVersion = "2.9.0"
..........
// for Error Prone ( http://errorprone.info/ )
errorprone("com.google.errorprone:error_prone_core:${errorproneVersion}")
compileOnly("com.google.errorprone:error_prone_annotations:${errorproneVersion}")
- plugins block の以下の点を変更します。
id "net.ltgt.errorprone" version "1.1.1"→id "net.ltgt.errorprone" version "2.0.2"
- dependencies block の以下の点を変更します。
def errorproneVersion = "2.3.4"→def errorproneVersion = "2.9.0"
Gradle Tool Window の左上にある「Reload All Gradle Projects」ボタンをクリックして更新します。
clean タスク実行 → Rebuild Project 実行 → build タスクを実行すると compileJava タスクで大量にエラーが出ました。1つずつ解消します。

https://errorprone.info/bugpattern/SameNameButDifferent は Lombok の @Slf4j、@Data アノテーションを付与している箇所で出力されていました。build.gradle を変更して出力されないようにします。https://ksby.hatenablog.com/entry/2021/03/03/210210#2-1 参照。
[compileJava, compileTestGroovy, compileTestJava]*.options*.encoding = "UTF-8" [compileJava, compileTestGroovy, compileTestJava]*.options*.compilerArgs = ["-Xlint:all,-options,-processing,-path"] tasks.withType(JavaCompile).configureEach { options.errorprone { disableWarningsInGeneratedCode = true disable("SameNameButDifferent") } }
disable("SameNameButDifferent")を追加します。
https://google.github.io/styleguide/javaguide.html#s7.1.3-javadoc-block-tags は Javadoc で @throws、@return の説明文を記述していなかったのが原因でした。@throws、@return に説明文を追加します。https://ksby.hatenablog.com/entry/2020/08/20/002645#2-1 参照。
https://google.github.io/styleguide/javaguide.html#s7.2-summary-fragment は Javadoc に summary fragment がない箇所で出力されていました。summary fragment を記述します。What is a Javadoc summary fragment? 参照。
https://errorprone.info/bugpattern/ReturnValueIgnored は flatMap メソッドの戻り値を元のメソッドで使用していないことが原因でした。@SuppressWarnings("ReturnValueIgnored") を付与してエラーにならないようにします。https://ksby.hatenablog.com/entry/2021/09/04/205832#2-1 参照。
https://errorprone.info/bugpattern/InvalidInlineTag は Javadoc で {@Clob} と記述していた箇所で出力されていました。{@link Clob} のように修正します。
以上で error-prone が出力しているエラー・警告に対応したので再度 clean タスク実行 → Rebuild Project 実行 → build タスクを実行したところ、今度は PMD が 1種類、3箇所で警告を出力していました。

Comment is too large: Too many lines は Javadoc の行数が 6行を超えていると出力されていました。https://github.com/ksby/ksbysample-webapp-lending/blob/master/config/pmd/pmd-project-rulesets.xml を見たところ、こちらでは <exclude name="CommentSize"/> を記述してチェックしないようにしていたので、このファイルをコピーすることにします。
再度 clean タスク実行 → Rebuild Project 実行 → build タスクを実行すると無事 "BUILD SUCCESSFUL" のメッセージが出力されました。

履歴
2021/10/14
初版発行。