かんがるーさんの日記

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

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 へバージョンアップします。

参照したサイト・書籍

  1. Upgrading your build from Gradle 6.x to the latest
    https://docs.gradle.org/7.2/userguide/upgrading_version_6.html

  2. What's new in Gradle 7.0
    https://gradle.org/whats-new/gradle-7/

目次

  1. Gradle を 6.9.1 → 7.2 にバージョンアップする
  2. build 時のエラーを解消する
    1. bootJar タスクでエラーが発生する
    2. jar タスクでエラーが発生する
  3. build.gradle で Deprecated になった記述を修正する

手順

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.2gradlew --version コマンドを実行します。

f:id:ksby:20210825062251p:plain

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 タスクでエラーが発生しました。

f:id:ksby:20210825063131p:plain

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 タスクでエラーが発生しました。

f:id:ksby:20210825211823p:plain

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. のメッセージが出力されなくなりました。

f:id:ksby:20210825213331p:plain

build.gradle で Deprecated になった記述を修正する

copyDomaResources タスク内の compileJava.destinationDir メソッドが Deprecated となっていたので、

f:id:ksby:20210825233605p:plain

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 を追加しました。