Spring Boot + npm + Geb で入力フォームを作ってテストする ( その57 )( build.gradle に記述する BOM を Spring IO Platform のものから Spring Boot のものに変更する )
概要
記事一覧はこちらです。
Spring Boot + npm + Geb で入力フォームを作ってテストする ( その56 )( PMD を 5.8.1 → 6.4.0 へバージョンアップする2 ) の続きです。
- 今回の手順で確認できるのは以下の内容です。
- build.gradle に記述する BOM は Spring IO Platform のものを利用していたのですが、9 April 2019 に EOL となることが決まったので Spring Boot の BOM を利用するように変更します。
参照したサイト・書籍
Spring IO platform
http://platform.spring.io/platform/67. Spring Boot Gradle plugin
https://docs.spring.io/autorepo/docs/spring-boot/1.5.10.RELEASE/reference/html/build-tool-plugins-gradle-plugin.htmlSpring Boot Gradle Plugin Reference Guide
https://docs.spring.io/spring-boot/docs/2.0.2.RELEASE/gradle-plugin/reference/html/- Spring Boot 2 系の Spring Boot Gradle Plugin のマニュアルです。参考にメモしておきます。
spring-boot-starter-parent
https://repo.spring.io/release/org/springframework/boot/spring-boot-starter-parent/spring-boot-dependencies
https://repo.spring.io/release/org/springframework/boot/spring-boot-dependencies/
目次
手順
build.gradle を変更する
67. Spring Boot Gradle plugin に記載されているように Spring Boot Gradle plugin を使用していれば spring-boot-starter-parent の BOM が自動で適用されるのですが、個人的な好みで BOM は明記することにします。
build.gradle の以下の点を変更します。
dependencyManagement { imports { // mavenBom は以下の URL のものを使用する // https://repo.spring.io/release/org/springframework/boot/spring-boot-starter-parent/1.5.10.RELEASE/ // bomProperty に指定可能な property は以下の URL の BOM に記述がある // https://repo.spring.io/release/org/springframework/boot/spring-boot-dependencies/1.5.10.RELEASE/spring-boot-dependencies-1.5.10.RELEASE.pom mavenBom("org.springframework.boot:spring-boot-starter-parent:${springBootVersion}") { bomProperty 'thymeleaf.version', '3.0.9.RELEASE' bomProperty 'thymeleaf-extras-springsecurity4.version', '3.0.2.RELEASE' bomProperty 'thymeleaf-layout-dialect.version', '2.2.2' bomProperty 'thymeleaf-extras-data-attribute.version', '2.0.1' bomProperty 'thymeleaf-extras-java8time.version', '3.0.1.RELEASE' } } } dependencies { .......... // dependency-management-plugin によりバージョン番号が自動で設定されないもの、あるいは最新バージョンを指定したいもの .......... compile("com.google.guava:guava:22.0") compile("org.apache.commons:commons-lang3:3.7") .......... }
mavenBom("io.spring.platform:platform-bom:Brussels-SR7")
→mavenBom("org.springframework.boot:spring-boot-starter-parent:${springBootVersion}")
に変更します。bomProperty 'guava.version', '22.0'
を削除します。- Spring Boot の BOM では guava と commons-lang3 はサポートされていないので、記述する位置を変更し、バージョンを明記します。
compile("com.google.guava:guava")
→compile("com.google.guava:guava:22.0")
compile("org.apache.commons:commons-lang3")
→compile("org.apache.commons:commons-lang3:3.7")
変更後、Gradle Tool Window の左上にある「Refresh all Gradle projects」ボタンをクリックして更新します。
モジュールのバージョンを確認します。Spring Boot は 1.5.10.RELEASE が使用されており、
Thymeleaf も 3.0.9.RELEASE が使用されています。
clean タスク実行 → Rebuild Project 実行 → build タスクを実行します。1件だけある必ず失敗するテストをコメントアウトせずに build タスクを実行したので test タスクはエラーが出ましたが、それ以外は問題なさそうです。また BOM を変更したことで追加でダウンロードされたモジュールがありました。
guava-23.5-jre.pom
がダウンロードされていたので、プロジェクトで使用する guava も build.gradle で指定している 22.0 でないのか?と思い gradlew dependencies
コマンドを実行して確認したところ、23 を使用しているのは checkstyle で、Web アプリの方では 22.0 が使用されていました。
checkstyle - The Checkstyle libraries to be used for this project. \--- com.puppycrawl.tools:checkstyle:8.8 +--- antlr:antlr:2.7.7 +--- org.antlr:antlr4-runtime:4.7.1 +--- commons-beanutils:commons-beanutils:1.9.3 | \--- commons-collections:commons-collections:3.2.2 +--- commons-cli:commons-cli:1.4 +--- com.google.guava:guava:23.6-jre | +--- com.google.code.findbugs:jsr305:1.3.9 | +--- org.checkerframework:checker-compat-qual:2.0.0 | +--- com.google.errorprone:error_prone_annotations:2.1.3 | +--- com.google.j2objc:j2objc-annotations:1.1 | \--- org.codehaus.mojo:animal-sniffer-annotations:1.14 \--- net.sf.saxon:Saxon-HE:9.8.0-7 compile - Dependencies for source set 'main' (deprecated, use 'implementation ' instead). +--- org.springframework.boot:spring-boot-starter-web -> 1.5.10.RELEASE .......... +--- com.google.guava:guava:22.0 | +--- com.google.code.findbugs:jsr305:1.3.9 | +--- com.google.errorprone:error_prone_annotations:2.0.18 | +--- com.google.j2objc:j2objc-annotations:1.1 | \--- org.codehaus.mojo:animal-sniffer-annotations:1.14 +--- org.apache.commons:commons-lang3:3.7 \--- org.seasar.doma:doma:2.19.1
build.gradle の plugin の記述を plugins { id '...' }
の書式に変更する
今回の変更で 67. Spring Boot Gradle plugin を見て、今の build.gradle の plugin の書き方が古いことに気づいたので、新しい書き方に変更します。
build.gradle の以下の点を変更します。
buildscript { ext { group "ksbysample" version "1.0.1-RELEASE" springBootVersion = "1.5.10.RELEASE" } } plugins { id "java" id "eclipse" id "idea" // plugins {} block 内では ${springBootVersion} が使用できないので、バージョンを直接記述している id "org.springframework.boot" version "1.5.10.RELEASE" id "groovy" id "net.ltgt.errorprone" version "0.0.13" id "checkstyle" id "findbugs" id "pmd" id "com.moowork.node" version "1.2.0" } sourceCompatibility = 1.8 targetCompatibility = 1.8 ..........
buildscript { ... }
の前にgroup ...
、version ...
を記述しているとonly buildscript {} and other plugins {} script blocks are allowed before plugins {} blocks, no other statements are allowed
というエラーメッセージが出力されますので、以下の2行をbuildscript { ext { ... } }
の中に移動します。group 'ksbysample'
version '1.0.0-RELEASE'
buildscript { ... }
内のrepositories { ... }
、dependencies { ... }
を削除します。apply plugin: '...'
の記述全てをplugins { ... }
で囲み、apply plugin:
→id
に変更します。- 以下の3つのプラグインは
version ...
を追加します。id "org.springframework.boot"
id "net.ltgt.errorprone"
id "com.moowork.node"
id "org.springframework.boot"
では version ${springBootVersion}
と記述したかったのですが、Gradle Tool Window の左上にある「Refresh all Gradle projects」ボタンをクリックして更新するとエラーが出ます。Allow the plugin DSL to expand properties as part of the version によるとまだ変数は使用できないようです。今は直接記述するようにします。
変更後、Gradle Tool Window の左上にある「Refresh all Gradle projects」ボタンをクリックして更新します。
clean タスク実行 → Rebuild Project 実行 → build タスクを実行して BUILD SUCCESSFUL が出力されることを確認します(失敗するテストはコメントアウトしてあります)。
履歴
2018/06/10
初版発行。