かんがるーさんの日記

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

Spring Boot 2.4.x の Web アプリを 2.5.x へバージョンアップする ( その13 )( Spring Boot を 2.5.4 → 2.5.5 へ、Eclipse Adoptium OpenJDK(Eclipse Temurin) を 11.0.12+7 → 17+35 へバージョンアップする )

概要

記事一覧はこちらです。

Spring Boot 2.4.x の Web アプリを 2.5.x へバージョンアップする ( その12 )( build.gradle から --add-opens=.....=ALL-UNNAMED の記述を削除する ) の続きです。

  • 今回の手順で確認できるのは以下の内容です。
    • Java 17 に対応した Spring Boot 2.5.5. と、Eclipse Adoptium OpenJDK(Eclipse Temurin)の 17 がリリースされたので、バージョンアップします。

参照したサイト・書籍

目次

  1. Spring Boot を 2.5.4 → 2.5.5 へバージョンアップする
  2. Eclipse Adoptium OpenJDK(Eclipse Temurin) を 11.0.12+7 → 17+35 へバージョンアップする
  3. build タスク時に pmdMain タスクと test タスクで出力された警告を確認する
    1. WARNING: System::setSecurityManager will be removed in a future release
    2. OpenJDK 64-Bit Server VM warning: Sharing is only supported for boot loader classes because bootstrap classpath has been appended

手順

Spring Boot を 2.5.4 → 2.5.5 へバージョンアップする

build.gradle の以下の点を変更します。

buildscript {
    ext {
        group "ksbysample"
        version "2.5.5"
    }
    repositories {
        mavenCentral()
        maven { url "https://repo.spring.io/release/" }
        gradlePluginPortal()
    }
    dependencies {
        // for doma-codegen-plugin
        classpath "org.postgresql:postgresql:42.2.24"
    }
}

plugins {
    id "java"
    id "eclipse"
    id "idea"
    id "org.springframework.boot" version "2.5.5"
    id "io.spring.dependency-management" version "1.0.11.RELEASE"
    id "groovy"
    id "checkstyle"
    id "com.github.spotbugs" version "4.7.3"
    id "pmd"
    id "net.ltgt.errorprone" version "2.0.2"
    id "com.gorylenko.gradle-git-properties" version "2.3.1"
    id "org.seasar.doma.codegen" version "1.4.1"
}

..........

dependencyManagement {
    imports {
        // bomProperty に指定可能な property は以下の URL の BOM に記述がある
        // https://repo1.maven.org/maven2/org/springframework/boot/spring-boot-dependencies/2.5.4/spring-boot-dependencies-2.5.4.pom
        mavenBom(org.springframework.boot.gradle.plugin.SpringBootPlugin.BOM_COORDINATES) {
            // Spring Boot の BOM に定義されているバージョンから変更する場合には、ここに以下のように記述する
            // bomProperty "thymeleaf.version", "3.0.9.RELEASE"
        }
        mavenBom("org.junit:junit-bom:5.8.1")
    }
}

dependencies {
    def spockVersion = "2.0-groovy-3.0"
    def jdbcDriver = "org.postgresql:postgresql:42.2.24"
    def domaVersion = "2.49.0"
    def lombokVersion = "1.18.20"
    def errorproneVersion = "2.9.0"

    ..........

Spring Boot 2.5.5 へのバージョンアップとして以下の点を変更します。

  • buildscript block の以下の点を変更します。
    • version "2.5.4"version "2.5.5"
  • plugins block の以下の点を変更します。
    • id "org.springframework.boot" version "2.5.4"id "org.springframework.boot" version "2.5.5"

各種ライブラリのバージョンアップとして以下の点を変更します。

  • buildscript block の以下の点を変更します。
    • classpath "org.postgresql:postgresql:42.2.23"classpath "org.postgresql:postgresql:42.2.24"
  • dependencyManagement block の以下の点を変更します。
    • mavenBom("org.junit:junit-bom:5.7.2")mavenBom("org.junit:junit-bom:5.8.1")
  • dependencies block の以下の点を変更します。
    • def jdbcDriver = "org.postgresql:postgresql:42.2.23"def jdbcDriver = "org.postgresql:postgresql:42.2.24"
    • def domaVersion = "2.47.1"def domaVersion = "2.49.0"

Gradle Tool Window の左上にある「Reload All Gradle Projects」ボタンをクリックして更新します。

clean タスク実行 → Rebuild Project 実行 → build タスクを実行すると "BUILD SUCCESSFUL" のメッセージが出力されました。

f:id:ksby:20210926132712p:plain

Eclipse Adoptium OpenJDK(Eclipse Temurin) を 11.0.12+7 → 17+35 へバージョンアップする

  1. IntelliJ IDEA を終了させます。

  2. https://adoptium.net/index.html から OpenJDK17-jdk_x64_windows_hotspot_17_35.msi をダウンロードします。

    f:id:ksby:20210926133106p:plain

  3. インストール時に削除されるかもしれないので D:\Java\jdk-11.0.12.7-hotspot → D:\Java\jdk-11.0.12.7-hotspotx にリネームします。

  4. インストーラーを実行して D:\java\jdk-17.0.0.35-hotspot へインストールした後、環境変数 JAVA_HOME のパスを D:\java\jdk-17.0.0.35-hotspot へ変更します。

    f:id:ksby:20210926133806p:plain

    コマンドプロンプトから java -version を実行し、17+35 に変更されていることを確認します。

    f:id:ksby:20210926134034p:plain

  5. D:\Java\jdk-11.0.12.7-hotspotx → D:\Java\jdk-11.0.12.7-hotspot に戻します。

  6. IntelliJ IDEA を起動します。

  7. 「Welcome to IntelliJ IDEA」ダイアログで ksbysample-webapp-lending プロジェクトを開いて、プロジェクトが使用する JDK を 11.0.12+7 に変更します。

  8. IntelliJ IDEA のメイン画面が開いたら、メニューから「File」-「Project Structure...」を選択します。

  9. 「Project Structure」ダイアログが表示されます。「Project SDK」で D:\Java\jdk-17.0.0.35-hotspot を選択します(なぜか2行表示されています)。

    f:id:ksby:20210926134643p:plain

  10. 「Experimental Feature Alert」のダイアログが表示されるので「Accept」ボタンをクリックします。

    f:id:ksby:20210926134821p:plain

  11. 「Project SDK」の「Edit」ボタンをクリックします。

    f:id:ksby:20210926134956p:plain

  12. 「Project Structure」ダイアログが表示されます。画面左側で「Platform Settings」-「SDKs」を選択して、中央のリストから「11.0.12.7」を選択した後、リストの上の「-」ボタンをクリックして削除します。

    f:id:ksby:20210926135118p:plain

  13. 中央のリストから「17」を選択した後、"17" → "17+35" へ変更します。

    f:id:ksby:20210926135259p:plain

  14. 「OK」ボタンをクリックして「Project Structure for New Projects」ダイアログを閉じます。

  15. メイン画面に戻ると画面右下に「Indexing...」の表示が出るので、終了するまで待ちます。

  16. build.gradle の sourceCompatibility、targetCompatibility の設定を JavaVersion.VERSION_17 に変更します。

    • sourceCompatibility = JavaVersion.VERSION_11sourceCompatibility = JavaVersion.VERSION_17
    • targetCompatibility = JavaVersion.VERSION_11targetCompatibility = JavaVersion.VERSION_17
  17. Gradle Tool Window の左上にある「Refresh all Gradle projects」ボタンをクリックして更新します。

  18. clean タスク実行 → Rebuild Project 実行 → build タスクを実行すると "BUILD SUCCESSFUL" のメッセージが出力されますが、pmdMain タスクと test タスクで警告が出力されました。

    f:id:ksby:20210926140206p:plain

    pmdMain タスクで出力された警告は以下のものでした。

    • WARNING: A terminally deprecated method in java.lang.System has been called
    • WARNING: System::setSecurityManager has been called by edu.umd.cs.findbugs.ba.jsr305.TypeQualifierValue (file:/C:/Users/root/.gradle/caches/modules-2/files-2.1/com.github.spotbugs/spotbugs/4.4.0/83d0d8856de551bb4aa2f4b815a61b606c93acf/spotbugs-4.4.0.jar)
    • WARNING: Please consider reporting this to the maintainers of edu.umd.cs.findbugs.ba.jsr305.TypeQualifierValue
    • WARNING: System::setSecurityManager will be removed in a future release

    test タスクで出力された警告は以下のものでした。

    • OpenJDK 64-Bit Server VM warning: Sharing is only supported for boot loader classes because bootstrap classpath has been appended

    調査は後回しにして先に進めます。

  19. Project Tool Window で src/test でコンテキストメニューを表示して「More Run/Debug」-「Run 'All Tests' with Coverage」を選択し、テストが全て成功することを確認します。

    f:id:ksby:20210926141718p:plain

build タスク時に pmdMain タスクと test タスクで出力された警告を確認する

WARNING: System::setSecurityManager will be removed in a future release

pmdMain タスクで出力された警告ですが、将来 Security Manager を廃止するために非推奨になっているためでした(https://openjdk.java.net/jeps/411 参照)。 ログを見ると spotbugs-4.4.0.jar で System::setSecurityManager が呼び出されているので PMD ではなく SpotBugs が原因でした。

SpotBugs は 4.4.1 がリリースされていたのでバージョンアップしてみましたが、警告が出力される状況は解消されなかったので、現時点では 4.4 のままとし SpotBugs の対応を待つことにします。

OpenJDK 64-Bit Server VM warning: Sharing is only supported for boot loader classes because bootstrap classpath has been appended

以下の URL にこの警告に関する記述があり、

test タスク実行時の jvmArgs に -Xshare:off オプションを追加すれば警告が出力されないようにはできますが、気にするような警告ではないようなので、今は出力されたままにすることにします。

Java 17 は特にエラーも出ずに切り替えることができました。

ただし Lombok は現在使用している 1.18.20 ではまだ PLATFORM: JDK16 support added. 止まりで正式に Java 17 対応を表明してはいないので(https://projectlombok.org/changelog 参照)、Lombok を使うなら Java 17 の利用は Lombok の正式対応を待った方が良さそうです。

Gradle もまだ Java 17 には正式に対応していませんでした(https://github.com/gradle/gradle/issues/16857 参照)。7.3 で対応するそうです。

履歴

2021/09/26
初版発行。