かんがるーさんの日記

最近自分が興味をもったものを調べた時の手順等を書いています。今は Spring Boot をいじっています。

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 へバージョンアップする )

概要

記事一覧はこちらです。

Spring Boot + npm + Geb で入力フォームを作ってテストする ( その101 )( Spring Boot を 2.5.4 → 2.5.5 へバージョンアップするが、Eclipse Adoptium OpenJDK(Eclipse Temurin)を 11.0.12+7 → 17+35 へバージョンアップするのは一旦諦める ) の続きです。

  • 今回の手順で確認できるのは以下の内容です。

参照したサイト・書籍

目次

  1. SpotBugs を 4.0.2 → 4.4.1 へバージョンアップする
  2. PMD を 6.23.0 → 6.39.0 へバージョンアップする
  3. 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" のメッセージが出力されました。

f:id:ksby:20211013083447p:plain

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 で警告が出ました。

f:id:ksby:20211013221405p:plain

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

f:id:ksby:20211013221620p:plain

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" のメッセージが出力されました。

f:id:ksby:20211013230258p:plain

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つずつ解消します。

f:id:ksby:20211013232627p:plain

https://errorprone.info/bugpattern/SameNameButDifferentLombok の @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-tagsJavadoc で @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-fragmentJavadoc に 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/InvalidInlineTagJavadoc{@Clob} と記述していた箇所で出力されていました。{@link Clob} のように修正します。

以上で error-prone が出力しているエラー・警告に対応したので再度 clean タスク実行 → Rebuild Project 実行 → build タスクを実行したところ、今度は PMD が 1種類、3箇所で警告を出力していました。

f:id:ksby:20211014001705p:plain

Comment is too large: Too many linesJavadoc の行数が 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" のメッセージが出力されました。

f:id:ksby:20211014003932p:plain

履歴

2021/10/14
初版発行。