かんがるーさんの日記

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

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 を利用するように変更します。

参照したサイト・書籍

目次

  1. build.gradle を変更する
  2. build.gradle の plugin の記述を plugins { id "..." } の書式に変更する

手順

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 が使用されており、

f:id:ksby:20180609075539p:plain

Thymeleaf も 3.0.9.RELEASE が使用されています。

f:id:ksby:20180609075711p:plain

clean タスク実行 → Rebuild Project 実行 → build タスクを実行します。1件だけある必ず失敗するテストをコメントアウトせずに build タスクを実行したので test タスクはエラーが出ましたが、それ以外は問題なさそうです。また BOM を変更したことで追加でダウンロードされたモジュールがありました。

f:id:ksby:20180609082046p:plain

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 が出力されることを確認します(失敗するテストはコメントアウトしてあります)。

f:id:ksby:20180610193339p:plain

履歴

2018/06/10
初版発行。