かんがるーさんの日記

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

共有ライブラリを管理するために Sonatype の Nexus Repository Manager OSS を使用する ( 番外編 )( Gradle のバージョンを 3.0 に上げてみようとしたら Spring Boot 1.4.0 以降が必要でした )

概要

Gradle の version 3.0 がリリースされていますが、かなり速くなっているという話を Twitter で見かけました。興味が湧いたので、Gradle のバージョンアップを試してみます。

プロジェクトは ksbysample-webapp-demo を使用します。

参照したサイト・書籍

  1. How to change the version of the 'default gradle wrapper' in IntelliJ IDEA?
    http://stackoverflow.com/questions/25205113/how-to-change-the-version-of-the-default-gradle-wrapper-in-intellij-idea

  2. Bug in Gradle 2.14-rc1 - No service of type StyledTextOutputFactory
    https://discuss.gradle.org/t/bug-in-gradle-2-14-rc1-no-service-of-type-styledtextoutputfactory/17638

目次

  1. 現在使用している Gradle のバージョンを確認するには?
  2. バージョンアップしてみる

手順

現在使用している Gradle のバージョンを確認するには?

gradlew --version コマンドを実行するか /gradle/wrapper/gradle-wrapper.properties を見れば分かるようです。

gradlew --version コマンドを実行すると以下の内容が出力されました。Gradle のバージョンは 2.13 ですね。

f:id:ksby:20160824185951p:plain

/gradle/wrapper/gradle-wrapper.properties を見ると以下の内容でした。distributionUrl を見ると Gradle のバージョンが 2.13 であることが分かります。

#Wed Aug 24 18:42:29 JST 2016
distributionBase=GRADLE_USER_HOME
distributionPath=wrapper/dists
zipStoreBase=GRADLE_USER_HOME
zipStorePath=wrapper/dists
distributionUrl=https\://services.gradle.org/distributions/gradle-2.13-bin.zip

バージョンアップしてみる

How to change the version of the 'default gradle wrapper' in IntelliJ IDEA? の QA を見ると、gradlew wrapper --gradle-version ... のコマンドを実行するだけか、build.gradle に task wrapper ... を記述して gradlew wrapper コマンドを実行するかの方法があるようです。

個人的には build.gradle にバージョンを明記する方が分かりやすそうで好みなので、こちらの方法で試してみます。

まず build.gradle を以下のように変更します。

buildscript {
    ext {
        springBootVersion = '1.3.6.RELEASE'
    }
    repositories {
        mavenCentral()
    }
    dependencies {
        classpath("org.springframework.boot:spring-boot-gradle-plugin:${springBootVersion}")
    }
}

apply plugin: 'java'
apply plugin: 'eclipse'
apply plugin: 'spring-boot'
apply plugin: 'maven'

jar {
    baseName = 'ksbysample-webapp-demo'
    version = '0.0.1-SNAPSHOT'
}
sourceCompatibility = 1.8
targetCompatibility = 1.8

task wrapper(type: Wrapper) {
    gradleVersion = '3.0'
}

repositories {
    maven { url "http://localhost:8081/repository/maven-public" }
}
  • task wrapper(type: Wrapper) { ... } を追加します。バージョンは 3.0 を指定します。

コマンドラインから gradle wrapper コマンドを実行します。

f:id:ksby:20160824191545p:plain

/gradle/wrapper/gradle-wrapper.properties を見ると distributionUrl に記載されている Gradle のバージョンも 3.0 に変更されていました。

#Wed Aug 24 19:14:58 JST 2016
distributionBase=GRADLE_USER_HOME
distributionPath=wrapper/dists
zipStoreBase=GRADLE_USER_HOME
zipStorePath=wrapper/dists
distributionUrl=https\://services.gradle.org/distributions/gradle-3.0-bin.zip

IntelliJ IDEA の Gradle projects View の左上にある「Refresh all Gradle projects」ボタンをクリックして build.gradle を反映しようとしたところ、以下のエラーメッセージが表示されました。

f:id:ksby:20160824191953p:plain

エラーメッセージの Open File リンクをクリックすると build.gradle の spring-boot plugin のところにカーソルが移動しました。

f:id:ksby:20160824192136p:plain

Web でこのエラーメッセージに関する記事がないか検索してみたところ、Bug in Gradle 2.14-rc1 - No service of type StyledTextOutputFactory というページが見つかりました。2.14 から StyledTextOutputFactory は Gradle の内部Service になり third-party plugin では使えなくなっているようです。

上のやり取りが行われているのが 2016/5/18~2016/6/22 の期間で ksbysample-webapp-demo プロジェクトで使用している Spring Boot のバージョンが 1.3.6-RELEASE なので、後のバージョンで解消されている可能性があります。Spring Boot のバージョンを上げてみます。

1.3.6-RELEASE1.3.7-RELEASE へ上げてみます。build.gradle の version を以下のように変更します。

buildscript {
    ext {
        springBootVersion = '1.3.7.RELEASE'
    }
    repositories {
        mavenCentral()
    }
    dependencies {
        classpath("org.springframework.boot:spring-boot-gradle-plugin:${springBootVersion}")
    }
}

Gradle projects View の左上にある「Refresh all Gradle projects」ボタンをクリックして build.gradle を反映してみましたが、同じエラーメッセージが表示されました。

f:id:ksby:20160824194135p:plain

1.3.7-RELEASE1.4.0-RELEASE へ上げてみます。build.gradle の version を以下のように変更します。

buildscript {
    ext {
        springBootVersion = '1.4.0.RELEASE'
    }
    repositories {
        mavenCentral()
    }
    dependencies {
        classpath("org.springframework.boot:spring-boot-gradle-plugin:${springBootVersion}")
    }
}

Gradle projects View の左上にある「Refresh all Gradle projects」ボタンをクリックして build.gradle を反映してみたところ、今度はエラーメッセージは表示されませんでした。Spring Boot 1.4.0 以降だと Gradle version 3.0 が使用できるようです ( ただし現時点ではエラーメッセージが出ていないというだけで本当に使えるのかは分かりません )。

個人的には 1.4.0 がまだ出たばかりであることと、Spring IO Platform が Spring Boot 1.4.0 に未対応なので Spring Boot 1.4.0 に手を出すつもりがありません。今回は Gradle version 3.0 にはバージョンアップせず元に戻すことにします。