Spring Boot + npm + Geb で入力フォームを作ってテストする ( その103 )( Eclipse Adoptium OpenJDK(Eclipse Temurin)を 11.0.12+7 → 17+35 へバージョンアップする )
概要
記事一覧はこちらです。
参照したサイト・書籍
Internal JDK Elements Strongly Encapsulated in JDK 17
https://www.infoq.com/news/2021/06/internals-encapsulated-jdk17/How to avoid "Sharing is only supported for boot loader classes because bootstrap classpath has been appended" warning during debug with Java 11?
https://newbedev.com/how-to-avoid-sharing-is-only-supported-for-boot-loader-classes-because-bootstrap-classpath-has-been-appended-warning-during-debug-with-java-11
目次
- Eclipse Adoptium OpenJDK(Eclipse Temurin)を 11.0.12+7 → 17+35 へバージョンアップする
- configureChromeDriverBinary タスクで java.lang.reflect.InvocationTargetException が発生してタスクが失敗する原因を調査する。。。が、対応方法が分からないので com.github.erdi.webdriver-binaries Plugin を外す
- test タスクで
Caused by: org.modelmapper.internal.ErrorsException ...
が発生するので ModelMapper を最新バージョンに上げる
手順
Eclipse Adoptium OpenJDK(Eclipse Temurin)を 11.0.12+7 → 17+35 へバージョンアップする
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 タスクを実行すると configureChromeDriverBinary タスクで失敗して BUILD FAILED が出力されました。
- compileTestJava タスクで以下の WARNING が出力される。
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.1/d50cf49af9b5074d5ab3d0f89889d753623f341e/spotbugs-4.4.1.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
- configureChromeDriverBinary タスクで java.lang.reflect.InvocationTargetException が発生してタスクが失敗する。
FAILURE: Build failed with an exception. * What went wrong: Execution failed for task ':configureChromeDriverBinary'. > java.lang.reflect.InvocationTargetException
compileTestJava タスクの WARNING は SpotBugs が内部で System::setSecurityManager を呼び出しているのが原因のようなので、特に対応はせずにこのままとします。
ただし build.gradle を https://github.com/ksby/ksbysample-webapp-lending のものと比較して変更したい点があったので、以下のように変更します。
configurations { compileOnly.extendsFrom annotationProcessor // annotationProcessor と testAnnotationProcessor、compileOnly と testCompileOnly を併記不要にする testAnnotationProcessor.extendsFrom annotationProcessor testImplementation.extendsFrom compileOnly // for SpotBugs spotbugsStylesheets { transitive = false } } .......... 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") .......... }
- configurations block の以下の点を変更します。
developmentOnly
を削除します。runtimeClasspath { extendsFrom developmentOnly }
→compileOnly.extendsFrom annotationProcessor
に変更します。
- dependencies block の以下の点を変更します。
compileOnly("com.github.spotbugs:spotbugs-annotations:${spotbugs.toolVersion.get()}")
→annotationProcessor("com.github.spotbugs:spotbugs-annotations:${spotbugs.toolVersion.get()}")
に変更します。
configureChromeDriverBinary タスクで java.lang.reflect.InvocationTargetException が発生してタスクが失敗する原因を調査する。。。が、対応方法が分からないので com.github.erdi.webdriver-binaries Plugin を外す
build 時に --debug --stacktrace
オプションを付けて実行し直してみます。
IntelliJ IDEA のメインメニューから「Run」-「Edit Configurations...」を選択して「Run/Debug Configurations」ダイアログを表示した後、「Gradle」-「boot-npm-geb-sample [build]」を選択後、画面右側の「Run」に --debug --stacktrace
を追加します。
clean タスク実行 → Rebuild Project 実行 → build タスクを実行すると Caused by: java.lang.IllegalAccessException: module jdk.proxy12 does not open jdk.proxy12 to unnamed module @1b604f19
が出力されました。
VM options に --add-opens=jdk.proxy12/jdk.proxy12=ALL-UNNAMED
を指定してみます。
clean タスク実行 → Rebuild Project 実行 → build タスクを実行すると Caused by: java.lang.IllegalAccessException: module jdk.proxy4 does not open jdk.proxy4 to unnamed module @cb5822
が出力されたので、
VM options に --add-opens=jdk.proxy4/jdk.proxy4=ALL-UNNAMED
を追加します。
clean タスク実行 → Rebuild Project 実行 → build タスクを実行しましたが、前と同じ Caused by: java.lang.IllegalAccessException: module jdk.proxy4 does not open jdk.proxy4 to unnamed module @cb5822
が出力されます。
これは Plugin の Java 17 対応待ちでしょうか。。。 対応方法が分からないので、今回は com.github.erdi.webdriver-binaries Plugin を外すことにします。
build.gradle で com.github.erdi.webdriver-binaries Plugin に関する記述をコメントアウトします。
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 "2.0.2" id "checkstyle" id "com.github.spotbugs" version "4.7.7" id "pmd" id "com.github.node-gradle.node" version "3.1.1" id "com.gorylenko.gradle-git-properties" version "2.3.1" // Java 17 で build タスクを実行すると java.lang.reflect.InvocationTargetException が発生し、 // 対応方法が不明なのでコメントアウトする // id "com.github.erdi.webdriver-binaries" version "2.6" id "org.seasar.doma.codegen" version "1.4.1" } .......... // Java 17 で build タスクを実行すると java.lang.reflect.InvocationTargetException が発生し、 // 対応方法が不明なのでコメントアウトする //// https://github.com/webdriverextensions/webdriverextensions-maven-plugin-repository/blob/master/repository-3.0.json 参照 //webdriverBinaries { // chromedriver { // version = "94.0.4606.41" // architecture = "X86" // fallbackTo32Bit = true // } // geckodriver { // version = "0.29.1" // architecture = "X86_64" // } //} def drivers = ["chrome", "firefox"] ..........
またこのままでは WebDriver を認識できず gebTest タスクが成功しないので、src/test/resources/GebConfig.groovy の System.setProperty("webdriver.~
から始まる2行のコメントアウトを解除します。
System.setProperty("webdriver.gecko.driver", "D:/geckodriver/0.30.0/geckodriver.bat") System.setProperty("webdriver.chrome.driver", "D:/chromedriver/94.0.4606.61/chromedriver.exe") driver = { ChromeOptions chromeOptions = new ChromeOptions() new ChromeDriver(chromeOptions) // FirefoxOptions firefoxOptions = new FirefoxOptions() // new FirefoxDriver(firefoxOptions) } ..........
build タスクに追加したオプションは全て削除します。
test タスクで Caused by: org.modelmapper.internal.ErrorsException ...
が発生するので ModelMapper を最新バージョンに上げる
clean タスク実行 → Rebuild Project 実行 → build タスクを実行すると、今度は test タスクでテストが大量に失敗しました。
失敗したテストでは Caused by: org.modelmapper.internal.ErrorsException at Errors.java:254
と出力されていました。
build.gradle では implementation("com.github.rozidan:modelmapper-spring-boot-starter:2.3.1")
を指定するだけで ModelMapper のバージョンは明記しておらず、依存関係にある ModelMapper のバージョンを確認したところ 2.3.0 でしたので、最新バージョンの 2.4.4 を依存関係に追加してみることにします。
build.gradle に implementation("org.modelmapper:modelmapper:2.4.4")
を追加します。
dependencies { .......... // dependency-management-plugin によりバージョン番号が自動で設定されないもの、あるいは最新バージョンを指定したいもの .......... implementation("com.github.rozidan:modelmapper-spring-boot-starter:2.3.1") implementation("org.modelmapper:modelmapper:2.4.4") implementation("com.google.guava:guava:31.0.1-jre") ..........
Gradle Tool Window の左上にある「Refresh all Gradle projects」ボタンをクリックして更新します。
clean タスク実行 → Rebuild Project 実行 → build タスクを実行すると無事 "BUILD SUCCESSFUL" が出力されました。
OpenJDK 64-Bit Server VM warning: Sharing is only supported for boot loader classes because bootstrap classpath has been appended
のメッセージは test タスクの jvmArgs に -Xshare:off
オプションを指定すれば出力されなくなりますが、今のままにします。
gebTest タスクも問題ありませんでした。
履歴
2021/10/17
初版発行。