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 を 2.5.4 → 2.5.5 へバージョンアップする
- 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 タスクで大量にテストが失敗しました。

失敗したテストを確認すると、全てのテストで 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 から実行すると同様に失敗して、

この時出力されているログを見ると以下の出力があり、
.......... 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 タスクで大量にテストが失敗する状況が変わりません。

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

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」ボタンをクリックします。

メイン画面に戻ると画面右下に「Indexing...」の表示が出るので、終了するまで待ちます。
build.gradle の以下の点を変更します。
sourceCompatibility = JavaVersion.VERSION_17 targetCompatibility = JavaVersion.VERSION_17
JavaVersion.VERSION_11→JavaVersion.VERSION_17に変更します。
Gradle Tool Window の左上にある「Refresh all Gradle projects」ボタンをクリックして更新します。
clean タスク実行 → Rebuild Project 実行 → build タスクを実行すると compileJava タスクが error-prone が原因でエラーになるので、一旦 build.gradle の error-prone の設定を全てコメントアウトします(後でバージョンアップして解消する予定)。

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

SpotBugs や error-prone をバージョンアップしてから JDK 17 にバージョンアップした方が良さそうな気がしたので、今回は JDK 11 に切り戻すことにします。
切り戻してから clean タスク実行 → Rebuild Project 実行 → build タスクを実行して "BUILD SUCCESSFUL" のメッセージが出力されることを確認しておきます。

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