Spring Boot 2.4.x の Web アプリを 2.5.x へバージョンアップする ( その4 )( Gradle を 6.9.1 → 7.2 へバージョンアップする )
概要
記事一覧はこちらです。
Spring Boot 2.4.x の Web アプリを 2.5.x へバージョンアップする ( その3 )( Spring Boot を 2.4.10 → 2.5.4 へバージョンアップする ) の続きです。
- 今回の手順で確認できるのは以下の内容です。
- Gradle を 6.9.1 → 7.2 へバージョンアップします。
参照したサイト・書籍
Upgrading your build from Gradle 6.x to the latest
https://docs.gradle.org/7.2/userguide/upgrading_version_6.htmlWhat's new in Gradle 7.0
https://gradle.org/whats-new/gradle-7/
目次
手順
Gradle を 6.9.1 → 7.2 にバージョンアップする
build.gradle の wrapper タスクの記述を以下のように変更します。
wrapper {
gradleVersion = "7.2"
distributionType = Wrapper.DistributionType.ALL
}
gradleVersion = "6.9.1"
→gradleVersion = "7.2"
に変更します。
コマンドプロンプトから gradlew wrapper --gradle-version=7.2
、gradlew --version
コマンドを実行します。
gradle/wrapper/gradle-wrapper.properties は以下の内容になります。
distributionBase=GRADLE_USER_HOME distributionPath=wrapper/dists distributionUrl=https\://services.gradle.org/distributions/gradle-7.2-all.zip zipStoreBase=GRADLE_USER_HOME zipStorePath=wrapper/dists
Gradle Tool Window の左上にある「Refresh all Gradle projects」ボタンをクリックして更新します。
clean タスク実行 → Rebuild Project 実行 → build タスクを実行すると bootJar タスクでエラーが発生しました。
build 時のエラーを解消する
bootJar タスクでエラーが発生する
以下のエラーメッセージが出力されていました。
Entry BOOT-INF/classes/META-INF/ksbysample/webapp/lending/dao/LendingAppDao/selectById.sql is a duplicate but no duplicate handling strategy has been set. Please refer to https://docs.gradle.org/7.2/dsl/org.gradle.api.tasks.Copy.html#org.gradle.api.tasks.Copy:duplicatesStrategy for details.
URL の先の Gradle 7.2 のマニュアルを見ると duplicatesStrategy というプロパティがあるとのこと。このプロジェクトではリソースを2重にコピーしても問題ないので、bootJar タスクに duplicatesStrategy = DuplicatesStrategy.INCLUDE
を設定します。
.......... tasks.named("compileTestJava").configure { options.errorprone.enabled = false } bootJar { duplicatesStrategy = DuplicatesStrategy.INCLUDE } ..........
jar タスクでエラーが発生する
再度 clean タスク実行 → Rebuild Project 実行 → build タスクを実行すると、今度は jar タスクでエラーが発生しました。
jar タスクは不要なので(build/libs の下に ksbysample-webapp-lending-2.5.4.jar 以外に ksbysample-webapp-lending-2.5.4-plain.jar が生成されます)、Spring Boot 2.5 Release Notes の Gradle Default jar and war Tasks、及び Spring Boot Gradle Plugin Reference Guide の 4.3. Packaging Executable and Plain Archives を見て build.gradle で jar タスクを無効にします。
.......... bootJar { duplicatesStrategy = DuplicatesStrategy.INCLUDE } jar { enabled = false } ..........
再度 clean タスク実行 → Rebuild Project 実行 → build タスクを実行すると、今度は "BUILD SUCCESSFUL" のメッセージが出力されました。また以前は出力されていた Deprecated Gradle features were used in this build, making it incompatible with Gradle 7.0.
のメッセージが出力されなくなりました。
build.gradle で Deprecated になった記述を修正する
copyDomaResources タスク内の compileJava.destinationDir
メソッドが Deprecated となっていたので、
into compileJava.destinationDirectory
プロパティに変更します。
task copyDomaResources(type: Sync) { from sourceSets.main.resources.srcDirs into compileJava.destinationDirectory include "doma.compile.config" include "META-INF/**/*.sql" include "META-INF/**/*.script" } compileJava.dependsOn copyDomaResources
変更後に clean タスク実行 → Rebuild Project 実行 → build タスクを実行すると、問題なく "BUILD SUCCESSFUL" のメッセージが出力されました。
最後に .gradle ディレクトリの下にバージョン番号のディレクトリがあるので、7.2 以外を削除します。
履歴
2021/08/26
初版発行。
2021/09/11
* 「参照したサイト・書籍」に What's new in Gradle 7.0 を追加しました。