読者です 読者をやめる 読者になる 読者になる

かんがるーさんの日記

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

Spring Boot 1.3.x の Web アプリを 1.4.x へバージョンアップする ( その14 )( spring-boot-gradle-plugin は dependency-management-plugin を自動的に適用するので build.gradle に記述する必要がありませんでした )

概要

記事一覧はこちらです。

Spring Boot 1.3.x の Web アプリを 1.4.x へバージョンアップする ( その13 )( RestTemplate で WebAPI を呼び出している処理に spring-retry でリトライ処理を入れる ) の続きです。

  • 今回の手順で確認できるのは以下の内容です。

参照したサイト・書籍

目次

  1. まずは単に classpath("io.spring.gradle:dependency-management-plugin:0.6.1.RELEASE") をコメントアウトしてみる
  2. dependencyManagement { ... } もコメントアウトするとどうなるのか?
  3. Spring IO Platform の POM を記述した場合と記述しない場合で何が違うのか?
  4. build.gradle を修正する
  5. 次回は。。。

手順

まずは単に classpath("io.spring.gradle:dependency-management-plugin:0.6.1.RELEASE")コメントアウトしてみる

build.gradle から dependency-management-plugin に関する部分をコメントアウトしてみます。

buildscript {
    ext {
        springBootVersion = '1.4.4.RELEASE'
    }
    repositories {
        jcenter()
        maven { url "http://repo.spring.io/repo/" }
        maven { url "https://plugins.gradle.org/m2/" }
    }
    dependencies {
        classpath("org.springframework.boot:spring-boot-gradle-plugin:${springBootVersion}")
//        classpath("io.spring.gradle:dependency-management-plugin:0.6.1.RELEASE")
        // for Error Prone ( http://errorprone.info/ )
        classpath("net.ltgt.gradle:gradle-errorprone-plugin:0.0.9")
        // for Grgit
        classpath("org.ajoberstar:grgit:1.8.0")
        // Gradle Download Task
        classpath("de.undercouch:gradle-download-task:3.2.0")
    }
}

apply plugin: 'java'
apply plugin: 'eclipse'
apply plugin: 'idea'
apply plugin: 'org.springframework.boot'
//apply plugin: 'io.spring.dependency-management'
apply plugin: 'de.undercouch.download'
apply plugin: 'groovy'
apply plugin: 'net.ltgt.errorprone'
apply plugin: 'checkstyle'
apply plugin: 'findbugs'
  • 以下の記述の行をコメントアウトします。
    • classpath("io.spring.gradle:dependency-management-plugin:0.6.1.RELEASE")
    • apply plugin: 'io.spring.dependency-management'

コメントアウト後、Gradle Tool Window の左上にある「Refresh all Gradle projects」ボタンをクリックして更新すると、エラーは出ずに終了しました。

clean タスク → Rebuild Project → build タスク も実行してみましたが、こちらも無事 “BUILD SUCCESSFUL” が表示されました。

f:id:ksby:20170324004205p:plain

gradlew dependencies コマンドを実行してみると checkstyle が依存する guava のバージョンが 21.0 になっています。Spring Boot 1.4.5 の Appendix F. Dependency versions には com.google.guava:guava の記述はないので、build.gradle に記述している dependencyManagement { imports { mavenBom("io.spring.platform:platform-bom:Athens-SR3") { ... } } } の BOM の内容が反映されていることが確認できます。

checkstyle - The Checkstyle libraries to be used for this project.
\--- com.puppycrawl.tools:checkstyle:7.5.1
     +--- antlr:antlr:2.7.7
     +--- org.antlr:antlr4-runtime:4.6
     +--- commons-beanutils:commons-beanutils:1.9.3
     |    \--- commons-collections:commons-collections:3.2.2
     +--- commons-cli:commons-cli:1.3.1
     \--- com.google.guava:guava:19.0 -> 21.0

よって、Spring IO Platform の BOM を利用したい場合には spring-boot-gradle-plugin だけ記述すればよく、dependency-management-plugin を記述する必要はありませんでした。

dependencyManagement { ... }コメントアウトするとどうなるのか?

更に build.gradle の dependencyManagement { ... } を削除するとどうなるのか興味が湧いたので、試してみます。

//dependencyManagement {
//    imports {
//        mavenBom("io.spring.platform:platform-bom:Athens-SR3") {
//            bomProperty 'commons-lang3.version', '3.5'
//            bomProperty 'guava.version', '21.0'
//        }
//    }
//}

コメントアウト後、Gradle Tool Window の左上にある「Refresh all Gradle projects」ボタンをクリックして更新すると、以下のエラーが表示されました。

f:id:ksby:20170324010643p:plain

これだけでは原因が分からないので、コマンドラインから gradlew dependencies コマンドを実行してみると以下のエラーが表示されました。guava と commons-lang3 の依存性解決に失敗したのが原因でした。

f:id:ksby:20170324011130p:plain

Spring Boot 1.4.5 の Appendix F. Dependency versions には guava も commons-lang3 も記述されていないので当然と言えば当然ですね。

build.gradle の dependencies 内で guava と commons-lang3 にバージョン番号を明記してみます。

    compile("com.google.guava:guava:21.0")
    compile("org.apache.commons:commons-lang3:3.5")

変更後、Gradle Tool Window の左上にある「Refresh all Gradle projects」ボタンをクリックして更新すると、エラーは出ずに終了しました。

clean タスク → Rebuild Project → build タスク を実行すると、無事 “BUILD SUCCESSFUL” が表示されました。ただしなんか足りないライブラリをダウンロードしています。

f:id:ksby:20170324013347p:plain

gradlew dependencies コマンドを実行してみると checkstyle が依存する Guava のバージョンは 19.0 のままでした。

checkstyle - The Checkstyle libraries to be used for this project.
\--- com.puppycrawl.tools:checkstyle:7.5.1
     +--- antlr:antlr:2.7.7
     +--- org.antlr:antlr4-runtime:4.6
     +--- commons-beanutils:commons-beanutils:1.9.3
     |    \--- commons-collections:commons-collections:3.2.2
     +--- commons-cli:commons-cli:1.3.1
     \--- com.google.guava:guava:19.0

Spring IO Platform の POM を記述した場合と記述しない場合で何が違うのか?

両方の場合の gradlew dependencies コマンドの出力結果を比較してみました。

checkstyle - The Checkstyle libraries to be used for this project.

component 記述した場合 記述しない場合
com.google.guava:guava 21.0 19.0

■errorprone

component 記述した場合 記述しない場合
com.google.guava:guava 21.0 20.0
com.google.code.findbugs:jsr305 3.0.1 3.0.0

findbugs - The FindBugs libraries to be used for this project.

component 記述した場合 記述しない場合
com.google.code.findbugs:jsr305 3.0.1 3.0.0

■上記以外

component 記述した場合 記述しない場合
javax.activation:activation 1.1.1 1.1
com.rabbitmq:amqp-client 3.6.6 3.6.5
org.objenesis:objenesis 2.4 2.1

guava, commons-lang3 以外にも BOM を記述した方がバージョンが上がるものがあります。

build.gradle を修正する

Spring IO Platform の BOM を記述した方が guava や commons-lang3 も依存性解決の対象になって個人的には好みなので、今回は単に dependency-management-plugin の記述だけを削除することにします。

build.gradle を リンク先の内容 に変更した後、Gradle Tool Window の左上にある「Refresh all Gradle projects」ボタンをクリックして更新します。問題が出ないことは上に書きましたので、ここでは改めて記述しません。

次回は。。。

Spring Boot 1.4 で一番変更が入ったと聞いているテストクラスのアノテーションを見直します。

ソースコード

build.gradle

buildscript {
    ext {
        springBootVersion = '1.4.4.RELEASE'
    }
    repositories {
        jcenter()
        maven { url "http://repo.spring.io/repo/" }
        maven { url "https://plugins.gradle.org/m2/" }
    }
    dependencies {
        classpath("org.springframework.boot:spring-boot-gradle-plugin:${springBootVersion}")
        // for Error Prone ( http://errorprone.info/ )
        classpath("net.ltgt.gradle:gradle-errorprone-plugin:0.0.9")
        // for Grgit
        classpath("org.ajoberstar:grgit:1.8.0")
        // Gradle Download Task
        classpath("de.undercouch:gradle-download-task:3.2.0")
    }
}

apply plugin: 'java'
apply plugin: 'eclipse'
apply plugin: 'idea'
apply plugin: 'org.springframework.boot'
apply plugin: 'de.undercouch.download'
apply plugin: 'groovy'
apply plugin: 'net.ltgt.errorprone'
apply plugin: 'checkstyle'
apply plugin: 'findbugs'
  • classpath("io.spring.gradle:dependency-management-plugin:0.6.1.RELEASE") を削除します。
  • apply plugin: 'io.spring.dependency-management' を削除します。

履歴

2017/03/24
初版発行。