かんがるーさんの日記

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

Spring Boot 2.3.x の Web アプリを 2.4.x へバージョンアップする ( その6 )( Error Prone を 2.4.0 → 2.5.1 へバージョンアップする )

概要

記事一覧はこちらです。

Spring Boot 2.3.x の Web アプリを 2.4.x へバージョンアップする ( その5 )( PMD を 6.26.0 → 6.32.0 へバージョンアップする ) の続きです。

  • 今回の手順で確認できるのは以下の内容です。
    • Error Prone を 2.4.0 → 2.5.1 へバージョンアップします。

参照したサイト・書籍

  1. tbroyer / gradle-errorprone-plugin
    https://github.com/tbroyer/gradle-errorprone-plugin

目次

  1. build.gradle を変更する
  2. 警告の原因を取り除く
    1. 警告:[SameNameButDifferent] The name@Datarefers to [java.lang.SuppressWarnings, java.util.List, java.lang.String, java.lang.Override, java.lang.Object] within this file. It may be confusing to have the same name refer to multiple types. Consider qualifying them for clarity.

手順

build.gradle を変更する

plugins {
    id "java"
    id "eclipse"
    id "idea"
    id "org.springframework.boot" version "2.4.3"
    id "io.spring.dependency-management" version "1.0.11.RELEASE"
    id "groovy"
    id "checkstyle"
    id "com.github.spotbugs" version "4.5.0"
    id "pmd"
    id "net.ltgt.errorprone" version "1.3.0"
    id "com.gorylenko.gradle-git-properties" version "2.2.4"
    id "org.seasar.doma.codegen" version "1.2.1"
}

..........

dependencies {
    def jdbcDriver = "org.postgresql:postgresql:42.2.19"
    def spockVersion = "1.3-groovy-2.5"
    def domaVersion = "2.45.0"
    def lombokVersion = "1.18.18"
    def errorproneVersion = "2.5.1"
    def powermockVersion = "2.0.9"
    def spotbugsVersion = "4.1.1"

    ..........
  • plugins block の以下の点を変更します。
    • id "net.ltgt.errorprone" version "1.2.1"id "net.ltgt.errorprone" version "1.3.0"
  • dependencies block の以下の点を変更します。
    • def errorproneVersion = "2.4.0"def errorproneVersion = "2.5.1"

Gradle Tool Window の左上にある「Refresh all Gradle projects」ボタンをクリックして更新した後、clean タスク実行 → Rebuild Project 実行 → build タスクを実行すると compileJava タスクで警告が 100個以上出ました(コンソールには 100個と出力されていますが警告が 100個以上あっても1度には 100個までしか出力されません)。

f:id:ksby:20210303102127p:plain

警告の原因を取り除く

警告:[SameNameButDifferent] The name@Datarefers to [java.lang.SuppressWarnings, java.util.List, java.lang.String, java.lang.Override, java.lang.Object] within this file. It may be confusing to have the same name refer to multiple types. Consider qualifying them for clarity.

警告が出ている src/main/java/ksbysample/webapp/lending/config/RedisClusterConfig.java を見ると、警告とは関係ありませんが画面上部に「Spring Boot Configuration Annotation Processor not configured」のメッセージが表示されていました。

f:id:ksby:20210303202825p:plain

メッセージの右側の「Open Documentation...」のリンクをクリックして https://docs.spring.io/spring-boot/docs/2.4.3/reference/html/appendix-configuration-metadata.html#configuration-metadata-annotation-processor を開くと、dependencies block で spring-boot-configuration-processor を記述する時に annotationProcessor が使われていますね。。。

f:id:ksby:20210303203041p:plain

annotationProcessor は使っていなかったはず。。。と思って build.gradle を見ると、compileOnly で記述していました。

f:id:ksby:20210303203339p:plain

annotationProcessor に変更して Gradle Tool Window の左上にある「Refresh all Gradle projects」ボタンをクリックして更新します。

今度は「Re-run Spring Boot Configuration Annotation Processor to update generated metadata」というメッセージが表示されたので、右側の「Hide notification」リンクをクリックしてメッセージが表示されないようにします。

f:id:ksby:20210303204307p:plain

SameNameButDifferent の原因の方ですが、警告が出ている箇所を見ると全て @Data アノテーションが付与されていました。error-prone の GitHub にも以下の Issue がありました。

SameNameButDifferent throw IndexOutOfBoundsException when using lombok @NonNull and @Getter
https://github.com/google/error-prone/issues/2120

おそらく SameNameButDifferent を有効にしていると Lombok の @Data アノテーションで必ず警告が出ているだけのような気がします。build.gradle を以下のように変更して SameNameButDifferent を無効にします。

[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")
    }
}
tasks.named("compileTestJava").configure {
    options.errorprone.enabled = false
}
  • tasks.withType(JavaCompile).configureEach { ... }disable("SameNameButDifferent") を追加します。

Gradle Tool Window の左上にある「Refresh all Gradle projects」ボタンをクリックして更新した後、clean タスク実行 → Rebuild Project 実行 → build タスクを実行すると、今度は警告が出なくなりました。

f:id:ksby:20210303205756p:plain

履歴

2021/03/03
初版発行。