共有ライブラリを管理するために Sonatype の Nexus Repository Manager OSS を使用する ( 番外編 )( Gradle のバージョンを 3.0 に上げてみようとしたら Spring Boot 1.4.0 以降が必要でした )
概要
Gradle の version 3.0 がリリースされていますが、かなり速くなっているという話を Twitter で見かけました。興味が湧いたので、Gradle のバージョンアップを試してみます。
プロジェクトは ksbysample-webapp-demo を使用します。
参照したサイト・書籍
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-ideaBug 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
目次
手順
現在使用している Gradle のバージョンを確認するには?
gradlew --version コマンドを実行するか /gradle/wrapper/gradle-wrapper.properties を見れば分かるようです。
gradlew --version コマンドを実行すると以下の内容が出力されました。Gradle のバージョンは 2.13 ですね。

/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 コマンドを実行します。

/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 を反映しようとしたところ、以下のエラーメッセージが表示されました。

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

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-RELEASE → 1.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 を反映してみましたが、同じエラーメッセージが表示されました。

1.3.7-RELEASE → 1.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 にはバージョンアップせず元に戻すことにします。