共有ライブラリを管理するために 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 にはバージョンアップせず元に戻すことにします。