かんがるーさんの日記

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

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

概要

記事一覧はこちらです。

Spring Boot + npm + Geb で入力フォームを作ってテストする ( その100 )( Gradle を 6.9.1 → 7.2 へ、Spring Boot を 2.4.10 → 2.5.4 へ、Geb を 4.1 → 5.0 へバージョンアップする2 ) の続きです。

  • 今回の手順で確認できるのは以下の内容です。
    • まず JDK 11 のまま、まずは Spring Boot を 2.5.4 → 2.5.5 へバージョンアップします。
    • その後に Eclipse Adoptium OpenJDK(Eclipse Temurin)を 11.0.12+7 → 17+35 へバージョンアップします。。。が、今回は一旦諦めます。

参照したサイト・書籍

目次

  1. Spring Boot を 2.5.4 → 2.5.5 へバージョンアップする
  2. Eclipse Adoptium OpenJDK(Eclipse Temurin) を 11.0.12+7 → 17+35 へバージョンアップする。。。のは一旦諦める

手順

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

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

buildscript {
    ext {
        group "ksbysample"
        version "2.5.5"
    }
    repositories {
        mavenCentral()
        gradlePluginPortal()
    }
    dependencies {
        // for doma-codegen-plugin
        classpath "com.h2database:h2:1.4.200"
    }
}

plugins {
    id "java"
    id "groovy"
    id "eclipse"
    id "idea"
    id "org.springframework.boot" version "2.5.5"
    id "io.spring.dependency-management" version "1.0.11.RELEASE"
    id "net.ltgt.errorprone" version "1.1.1"
    id "checkstyle"
    id "com.github.spotbugs" version "4.0.8"
    id "pmd"
    id "com.github.node-gradle.node" version "3.1.1"
    id "com.gorylenko.gradle-git-properties" version "2.3.1"
    id "com.github.erdi.webdriver-binaries" version "2.6"
    id "org.seasar.doma.codegen" version "1.4.1"
}

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"

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

clean タスク実行 → Rebuild Project 実行 → build タスクを実行すると test タスクで大量にテストが失敗しました。

f:id:ksby:20211012150450p:plain

失敗したテストを確認すると、全てのテストで Caused by: org.xml.sax.SAXNotRecognizedException at Driver.java:178 が出力されてました。

InquiryMailHelperTest > 全ての項目に値がセットされている場合のテスト FAILED
    java.lang.IllegalStateException at DefaultCacheAwareContextLoaderDelegate.java:132
        Caused by: java.lang.IllegalStateException at LoggingApplicationListener.java:328
            Caused by: java.lang.IllegalStateException at LogbackLoggingSystem.java:168
                Caused by: ch.qos.logback.core.joran.spi.JoranException at SaxEventRecorder.java:89
                    Caused by: org.xml.sax.SAXNotRecognizedException at Driver.java:178

失敗しているテストを 1つ IntelliJ IDEA から実行すると同様に失敗して、

f:id:ksby:20211012151457p:plain

この時出力されているログを見ると以下の出力があり、

..........
15:07:38,542 |-INFO in ch.qos.logback.classic.LoggerContext[default] - Could NOT find resource [logback-test.xml]
15:07:38,542 |-INFO in ch.qos.logback.classic.LoggerContext[default] - Could NOT find resource [logback.groovy]
15:07:38,543 |-INFO in ch.qos.logback.classic.LoggerContext[default] - Found resource [logback.xml] at [file:/D:/project-springboot/ksbysample-boot-miscellaneous/boot-npm-geb-sample/out/test/resources/logback.xml]
15:07:38,706 |-ERROR in ch.qos.logback.core.joran.event.SaxEventRecorder@44c79f32 - Parser configuration error occurred org.xml.sax.SAXNotRecognizedException: unrecognized feature http://xml.org/sax/features/external-general-entities
..........

out/test/resources/logback.xml に問題がある模様。ファイルを開いてみると以下の内容でした。

<?xml version="1.0" encoding="UTF-8"?>
<configuration>
    <!--
        Geb+Spock で Firefox を headless モードで動かした時に大量に以下の DEBUG ログ
        が出力されるのを抑制するために作成しているファイルである。ファイルがあればログを抑
        制できるので、特に logger の定義は記述していない。

        [Forwarding ... on session ... to remote] DEBUG org.apache.http
     -->
</configuration>

実際のファイルは src/test/resources/logback.xml なので、このファイルを削除してみます。

再び clean タスク実行。。。してみましたが、out ディレクトリを削除してくれないことに気づきました。clean タスクで out ディレクトリと、ついでに src/main/generated、src/test/generated_tests ディレクトリを削除するよう build.gradle に設定を追加します。

bootRun {
    jvmArgs = jvmArgsForTask +
            [
                    "-Dspring.profiles.active=develop",
                    "-XX:TieredStopAtLevel=1"
            ]
}

clean {
    doLast {
        rootProject.file("out").deleteDir()
        rootProject.file("src/main/generated").deleteDir()
        rootProject.file("src/test/generated_tests").deleteDir()
    }
}

再度 clean タスク実行 → Rebuild Project 実行 → build タスクを実行してみましたが、test タスクで大量にテストが失敗する状況が変わりません。

f:id:ksby:20211012160925p:plain

src/test/resources/logback.xml を削除しましたが、関係ないようなので元に戻します。

Web でいろいろ検索してみるとなぜか珍しく自分の過去の記事の Spring Boot 2.2.x の Web アプリを 2.3.x へバージョンアップする ( その2 )( Spring Boot を 2.2.2 → 2.2.9 へ、Gradle を 6.0.1 → 6.5.1 へバージョンアップする ) がヒットしました。この時は org.xml.sax.SAXNotSupportedException: not supported setting property http://xml.org/sax/properties/lexical-handler というエラーでしたが、SpotBugs の依存関係から pull-parser を削除して解決しています。

今回は Parser configuration error occurred org.xml.sax.SAXNotRecognizedException: unrecognized feature http://xml.org/sax/features/external-general-entities というエラーが出て失敗していますが、同じ原因のような気がするので SpotBugs の依存関係から pull-parser を削除してみます。

build.gradle を以下のように変更します。

dependencies {
    ..........

    // for SpotBugs
    compileOnly("com.github.spotbugs:spotbugs:${spotbugsVersion}") {
        exclude group: "pull-parser", module: "pull-parser"
    }
    ..........
  • exclude group: "pull-parser", module: "pull-parser" を追加します。

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

f:id:ksby:20211012170605p:plain

2.5.4 までは問題なかったのに 2.5.5 でエラーになったのかは謎です。。。

Eclipse Adoptium OpenJDK(Eclipse Temurin) を 11.0.12+7 → 17+35 へバージョンアップする。。。のは一旦諦める

Eclipse Adoptium OpenJDK(Eclipse Temurin)の 17+35 は 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 へバージョンアップする ) でインストール済なので、プロジェクトで使用する JDK の設定を変更します。

IntelliJ IDEA のメインメニューから「File」-「Project Structure...」を選択し、「Project Structure」ダイアログが表示されたら「Project SDK」で「17+35」を選択して「OK」ボタンをクリックします。

f:id:ksby:20211012172055p:plain

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

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

sourceCompatibility = JavaVersion.VERSION_17
targetCompatibility = JavaVersion.VERSION_17
  • JavaVersion.VERSION_11JavaVersion.VERSION_17 に変更します。

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

clean タスク実行 → Rebuild Project 実行 → build タスクを実行すると compileJava タスクが error-prone が原因でエラーになるので、一旦 build.gradle の error-prone の設定を全てコメントアウトします(後でバージョンアップして解消する予定)。

f:id:ksby:20211012173026p:plain

再度 clean タスク実行 → Rebuild Project 実行 → build タスクを実行しますが、今度は spotBugsMain タスクが大量にログを出力し、configureChromeDriverBinary タスクでエラーになりました。

f:id:ksby:20211012173811p:plain

SpotBugs や error-prone をバージョンアップしてから JDK 17 にバージョンアップした方が良さそうな気がしたので、今回は JDK 11 に切り戻すことにします。

切り戻してから clean タスク実行 → Rebuild Project 実行 → build タスクを実行して "BUILD SUCCESSFUL" のメッセージが出力されることを確認しておきます。

f:id:ksby:20211012175311p:plain

Spring Boot のバージョンアップや JDK 17 へのバージョンアップは難しくないイメージがあったのですが、今回は結構辛いです。。。 バージョンアップはこまめにやった方がいいな、というのが正直な感想です。

履歴

2021/10/12
初版発行。