Spring Boot + npm + Geb で入力フォームを作ってテストする ( その89 )( Spring Boot を 2.1.4 → 2.2.7 へバージョンアップする )
概要
記事一覧はこちらです。
Spring Boot + npm + Geb で入力フォームを作ってテストする ( その88 )( Gradle を 5.3.1 → 6.4 へバージョンアップする ) の続きです。
- 今回の手順で確認できるのは以下の内容です。
- Spring Boot を 2.1.4 → 2.2.7 へバージョンアップします。
- 依存関係にあるモジュールも一部を除き最新バージョンにバージョンアップします。
参照したサイト・書籍
目次
- Spring Boot を 2.1.4 → 2.2.7 へバージョンアップする
- Freemarker のテンプレートの拡張子を
*.ftl
→*.ftlh
に変更する - 開発環境で Web アプリを起動する時には
-XX:TieredStopAtLevel=1
オプションを指定する logging.file
→logging.file.name
に変更する- 最後に build で問題がないか確認する
手順
Spring Boot を 2.1.4 → 2.2.7 へバージョンアップする
以下の方針でバージョンアップします。
- Spring Boot を 2.1.4 → 2.2.7 にバージョンアップする。
- Gradle の Plugin も最新バージョンにする。
- checkstyle, spotbugs, pmd, error-prone は後回し。
- com.google.guava:guava はバージョンアップするとコンパイル時に警告が出るのでバージョンアップしない。
- doma 2 の最新バージョンは 2.29.0 ですが domaGen タスクが動作しないため 2.28.0 にする。
build.gradle の以下の点を変更します。
buildscript { ext { group "ksbysample" version "2.2.7-RELEASE" } repositories { mavenCentral() gradlePluginPortal() } } plugins { id "java" id "eclipse" id "idea" id "org.springframework.boot" version "2.2.7.RELEASE" id "io.spring.dependency-management" version "1.0.9.RELEASE" id "groovy" id "net.ltgt.errorprone" version "0.7.1" id "checkstyle" // id "com.github.spotbugs" version "1.6.9" id "pmd" id "com.moowork.node" version "1.3.1" id "com.gorylenko.gradle-git-properties" version "2.2.2" // Gradle 5.3 で internal API が変更されて gradle-processes が動かなくなったのでコメントアウトする // id "com.github.johnrengelman.processes" version "0.5.0" id "com.energizedwork.webdriver-binaries" version "1.4" } .......... configurations { developmentOnly runtimeClasspath { extendsFrom developmentOnly } // annotationProcessor と testAnnotationProcessor、compileOnly と testCompileOnly を併記不要にする testAnnotationProcessor.extendsFrom annotationProcessor testImplementation.extendsFrom compileOnly // for Doma 2 domaGenRuntime } .......... dependencyManagement { imports { // mavenBom は以下の URL のものを使用する // https://repo.spring.io/release/org/springframework/boot/spring-boot-starter-parent/2.1.4.RELEASE/ // bomProperty に指定可能な property は以下の URL の BOM に記述がある // https://repo.spring.io/release/org/springframework/boot/spring-boot-dependencies/2.1.4.RELEASE/spring-boot-dependencies-2.1.4.RELEASE.pom mavenBom org.springframework.boot.gradle.plugin.SpringBootPlugin.BOM_COORDINATES mavenBom("org.junit:junit-bom:5.6.2") } } dependencies { def spockVersion = "1.3-groovy-2.5" def domaVersion = "2.28.0" def lombokVersion = "1.18.12" def errorproneVersion = "2.3.3" def powermockVersion = "2.0.7" def seleniumVersion = "3.141.59" def spotbugsVersion = "3.1.11" // dependency-management-plugin によりバージョン番号が自動で設定されるもの // Appendix F. Dependency versions ( https://docs.spring.io/spring-boot/docs/2.1.4.RELEASE/reference/html/appendix-dependency-versions.html ) 参照 implementation("org.springframework.boot:spring-boot-starter-web") implementation("org.springframework.boot:spring-boot-starter-thymeleaf") implementation("org.springframework.boot:spring-boot-starter-data-jpa") implementation("org.springframework.boot:spring-boot-starter-freemarker") implementation("org.springframework.boot:spring-boot-starter-mail") implementation("org.springframework.boot:spring-boot-starter-security") implementation("org.springframework.boot:spring-boot-starter-actuator") runtimeOnly("org.springframework.boot:spring-boot-devtools") implementation("org.springframework.session:spring-session-core") implementation("org.springframework.session:spring-session-jdbc") implementation("org.codehaus.janino:janino") testImplementation("org.springframework.boot:spring-boot-starter-test") testImplementation("org.springframework.security:spring-security-test") testImplementation("org.yaml:snakeyaml") // dependency-management-plugin によりバージョン番号が自動で設定されないもの、あるいは最新バージョンを指定したいもの implementation("com.integralblue:log4jdbc-spring-boot-starter:2.0.0") implementation("org.flywaydb:flyway-core:5.2.4") implementation("com.h2database:h2:1.4.200") implementation("com.github.rozidan:modelmapper-spring-boot-starter:2.3.1") implementation("com.google.guava:guava:27.1-jre") implementation("org.apache.commons:commons-lang3:3.8.1") testImplementation("org.dbunit:dbunit:2.7.0") testImplementation("org.assertj:assertj-core:3.16.0") testImplementation("org.spockframework:spock-core:${spockVersion}") testImplementation("org.spockframework:spock-spring:${spockVersion}") testImplementation("org.jsoup:jsoup:1.13.1") testImplementation("com.icegreen:greenmail:1.5.13") // for lombok annotationProcessor("org.projectlombok:lombok:${lombokVersion}") compileOnly("org.projectlombok:lombok:${lombokVersion}") // for Doma annotationProcessor("org.seasar.doma:doma:${domaVersion}") implementation("org.seasar.doma:doma:${domaVersion}") domaGenRuntime("org.seasar.doma:doma-gen:${domaVersion}") domaGenRuntime("com.h2database:h2:1.4.200") // for Error Prone ( http://errorprone.info/ ) errorprone("com.google.errorprone:error_prone_core:${errorproneVersion}") compileOnly("com.google.errorprone:error_prone_annotations:${errorproneVersion}") // PowerMock testImplementation("org.powermock:powermock-module-junit4:${powermockVersion}") testImplementation("org.powermock:powermock-api-mockito2:${powermockVersion}") // for Geb + Spock testImplementation("org.gebish:geb-spock:3.4") { exclude group: "org.codehaus.groovy", module: "groovy-all" } testImplementation("org.seleniumhq.selenium:selenium-chrome-driver:${seleniumVersion}") testImplementation("org.seleniumhq.selenium:selenium-firefox-driver:${seleniumVersion}") testImplementation("org.seleniumhq.selenium:selenium-support:${seleniumVersion}") testImplementation("org.seleniumhq.selenium:selenium-api:${seleniumVersion}") testImplementation("org.seleniumhq.selenium:selenium-remote-driver:${seleniumVersion}") // for SpotBugs // compileOnly("com.github.spotbugs:spotbugs:${spotbugsVersion}") // compileOnly("net.jcip:jcip-annotations:1.0") // compileOnly("com.github.spotbugs:spotbugs-annotations:${spotbugsVersion}") // testImplementation("com.google.code.findbugs:jsr305:3.0.2") // for JUnit 5 // junit-jupiter で junit-jupiter-api, junit-jupiter-params, junit-jupiter-engine の3つが依存関係に追加される testCompile("org.junit.jupiter:junit-jupiter") testRuntime("org.junit.platform:junit-platform-launcher") } ..........
- buildscript block の以下の点を変更します。
version "2.1.4-RELEASE"
→version "2.2.7-RELEASE"
に変更します。maven { url "https://plugins.gradle.org/m2/" }
→gradlePluginPortal()
に変更します。
- plugins block の以下の点を変更します。
id "org.springframework.boot"
をversion "2.1.4.RELEASE"
→version "2.2.7.RELEASE"
に変更します。id "io.spring.dependency-management"
のversion "1.0.7.RELEASE"
→version "1.0.9.RELEASE"
に変更します。id "com.gorylenko.gradle-git-properties"
のversion "2.0.0"
→version "2.2.2"
に変更します。
- configurations block の以下の点を変更します。
developmentOnly
を追加します。runtimeClasspath { extendsFrom developmentOnly }
を追加します。
- dependencyManagement block の以下の点を変更します。
mavenBom("org.junit:junit-bom:5.4.2")
→mavenBom("org.junit:junit-bom:5.6.2")
に変更します。
- dependencies block の以下の点を変更します。
def domaVersion = "2.24.0"
→def domaVersion = "2.28.0"
に変更します。def lombokVersion = "1.18.6"
→def lombokVersion = "1.18.12"
に変更します。def powermockVersion = "2.0.0"
→def powermockVersion = "2.0.7"
に変更します。implementation("com.integralblue:log4jdbc-spring-boot-starter:1.0.2")
→implementation("com.integralblue:log4jdbc-spring-boot-starter:2.0.0")
に変更します。implementation("org.flywaydb:flyway-core:5.2.4")
→implementation("org.flywaydb:flyway-core:6.4.1")
に変更します。implementation("com.h2database:h2:1.4.192")
→implementation("com.h2database:h2:1.4.200")
に変更します。implementation("com.github.rozidan:modelmapper-spring-boot-starter:1.0.0")
→implementation("com.github.rozidan:modelmapper-spring-boot-starter:2.3.1")
に変更します。implementation("org.apache.commons:commons-lang3:3.8.1")
→implementation("org.apache.commons:commons-lang3:3.10")
に変更します。testImplementation("org.dbunit:dbunit:2.6.0")
→testImplementation("org.dbunit:dbunit:2.7.0")
に変更します。testImplementation("org.assertj:assertj-core:3.12.2")
→testImplementation("org.assertj:assertj-core:3.16.0")
に変更します。testImplementation("org.jsoup:jsoup:1.11.3")
→testImplementation("org.jsoup:jsoup:1.13.1")
に変更します。testImplementation("com.icegreen:greenmail:1.5.10")
→testImplementation("com.icegreen:greenmail:1.5.13")
に変更します。domaGenRuntime("com.h2database:h2:1.4.192")
→domaGenRuntime("com.h2database:h2:1.4.200")
に変更します。
変更後、Gradle Tool Window の左上にある「Refresh all Gradle projects」ボタンをクリックして更新すると、特にエラーは出ずに更新されました。
clean タスク実行 → Rebuild Project 実行 → build タスク実行をしてみると、テストが 13件失敗しました。
エラーメッセージは全て org.h2.jdbc.JdbcSQLException at InquiryTestSpec.groovy:29 Caused by: java.net.SocketTimeoutException at InquiryTestSpec.groovy:29
で、原因は build タスクでは実行されないようにしていた Geb のテストが JUnit 5 のテストを実行するように設定していたはずの test タスクで実行されていたからでした。
build.gradle の test タスクに exclude "geb/**"
を追加して Geb のテストが除外されるようにします。
test { // test タスクの jvmArgs は tasks.withType(Test) { ... } で定義している exclude "geb/**" // for JUnit 5 useJUnitPlatform() testLogging { afterSuite printTestCount } }
再度 clean タスク実行 → Rebuild Project 実行 → build タスク実行をしてみると今度は BUILD SUCCESSFUL が表示されました。
Freemarker のテンプレートの拡張子を *.ftl
→ *.ftlh
に変更する
Spring Boot 2.1.x の Web アプリを 2.2.x へバージョンアップする ( その5 )( Release Notes を見て必要な箇所を変更する ) で変更した内容を boot-npm-geb-sample にも反映します。
以下のファイルの拡張子を *.ftl
→ *.ftlh
に変更します。
src/main/resources/templates/mail/inquirymail-body.ftlh
開発環境で Web アプリを起動する時には -XX:TieredStopAtLevel=1
オプションを指定する
build.gradle の bootRun タスクに "-XX:TieredStopAtLevel=1"
を追加します。
bootRun { jvmArgs = jvmArgsForTask + jvmArgsAddOpens + [ "-Dspring.profiles.active=develop", "-XX:TieredStopAtLevel=1" ] }
logging.file
→ logging.file.name
に変更する
src/main/resources/application-product.properties 内の設定を logging.file → logging.file.name に変更します。
server.tomcat.basedir=C:/webapps/boot-npm-geb-sample logging.file.name=${server.tomcat.basedir}/logs/boot-npm-geb-sample.log
最後に build で問題がないか確認する
clean タスク実行 → Rebuild Project 実行 → build タスク実行をすると BUILD SUCCESSFUL が表示されます(と思いましたが testJUnit4AndSpock と test タスクのどちらも 147 tests になっていました、次の回で解消します)。
Web アプリを起動してから gebTest タスクを実行するとこちらも BUILD SUCCESSFUL が表示されます。
履歴
2020/05/10
初版発行。