Java/Kotlin
PR

「Deprecated Gradle features were used in this build」の原因を調べる方法|IntelliJ対応

saratogax
記事内に商品プロモーションを含む場合があります

Gradle でビルドすると、最後に「Deprecated Gradle features were used in this build」という警告が出て、何が非推奨なのか分からず困っていませんか?

Deprecated Gradle features were used in this build, making it incompatible with Gradle 10.

You can use '--warning-mode all' to show the individual deprecation warnings and determine if they come from your own scripts or plugins.

この警告はビルドの最後に出る要約で、どの機能が非推奨なのかまでは表示されません。

詳細は、--warning-mode all を付けてビルドし直すと表示できます。

この記事では、コマンドラインと IntelliJ IDEA のそれぞれで詳細を表示する方法と、私が gradle.properties の置き場所でつまずいた点を紹介します。

手順は Gradle 8.14.5 と 9.8.0 で実際に動かして確認しています。

「incompatible with Gradle 9.0/10」は何を意味するのか

この警告は、使っている機能が次のメジャーバージョンで使えなくなるという予告です。

Gradle 8 系では「Gradle 9.0」、Gradle 9 系では「Gradle 10」と、次のバージョンの番号が入ります。

今すぐビルドが失敗するわけではありませんが、Gradle を上げた時点でエラーになるので、放置せずに中身を確認しておくのがおすすめです。

私が最初にこの警告を見たのは Gradle 4.10 の頃で、そのときは「incompatible with Gradle 5.0」でした。

数字が変わるだけで、警告の出方と詳細の調べ方はその頃から変わっていません。

コマンドラインで詳細を表示する

ビルドのコマンドに --warning-mode all を付けます。

./gradlew build --warning-mode all

試しに、実行時に Task.project を呼ぶビルドスクリプトで実行すると、Gradle 9.8.0 では次の詳細が出ました。

Invocation of Task.project at execution time has been deprecated. This will fail with an error in Gradle 10.

どの機能が、どのバージョンでエラーになるのかまで書かれています。

--warning-mode に指定できる値は次の 4 つです。

  • summary:最後に要約だけを出す(何も指定しないときの動き)
  • all:非推奨の警告をすべて出す
  • fail:すべて出したうえで、警告が 1 件でもあればビルドを失敗させる
  • none:最後の要約も含めて警告を出さない

CI で非推奨を見逃したくないなら、fail にしておくと警告が出た時点でビルドが止まります。

IntelliJ IDEA で詳細を表示する

IntelliJ IDEA からビルドしている場合は、次の 2 つの方法があります。

実行構成の「Run」欄に引数を足す

Gradle ツールウィンドウで実行したいタスクを右クリックし、「Modify Run Configuration」を開きます。

「Run」欄のタスク名の後ろに --warning-mode all を足して実行すると、詳細が表示されます。

build --warning-mode all

JetBrains の公式ドキュメントでも、この欄にはタスクに加えて引数を指定できると説明されています。

gradle.properties に書く

毎回引数を足すのが面倒なら、gradle.properties に org.gradle.warning.mode=all を書いておく方法が確実です。

Gradle 自身がこのファイルを読むので、IntelliJ から実行してもコマンドラインから実行しても効きます。

置き場所は次の 2 つのどちらかです。

  • プロジェクトの直下(settings.gradle と同じ階層):そのプロジェクトだけに効く。Git で共有すればチーム全員に効く
  • Gradle のユーザーホーム(Mac なら ~/.gradle/gradle.properties、Windows なら C:\Users\ユーザー名\.gradle\gradle.properties):自分の PC のすべてのプロジェクトに効く
$ vi ~/.gradle/gradle.properties

org.gradle.warning.mode=all

プロジェクトの中にある .gradle フォルダに置いても効きません。

私は最初にここへ作って認識されず、しばらく悩みました。

Gradle 9.8.0 でも試しましたが、プロジェクトの .gradle/gradle.properties に書いても詳細は出ませんでした。

このフォルダは Gradle のキャッシュの置き場所で、設定ファイルを読む場所ではないためです。

ほかにも IntelliJ の VM Options に -Dorg.gradle.warning.mode=all を足してみましたが、私の環境では効きませんでした。

コマンドラインなら、この指定でも詳細が出ます。

Problems report でまとめて確認する

Gradle 9.8.0 では、ビルドの出力に「Problems report is available at」という行と、HTML ファイルの場所が表示されました。

このファイル(build/reports/problems/problems-report.html)をブラウザで開くと、非推奨の警告を一覧で確認できます。

警告が多くてコンソールで追いにくいときに便利です。

ただし、出力には「[Incubating]」と付いていて、まだ試験的な機能の扱いです。

詳細メッセージの読み方(私の場合)

私の場合は、詳細を表示すると次の警告が出ていました(Gradle 4.10 の頃)。

The project name ‘hoge/fuga’ contains at least one of the following characters: [ , /, \, :, <, >, “, ?, *, |].This has been deprecated and is scheduled to be removed in Gradle 5.0. Set the ‘rootProject.name’ or adjust the ‘include’ statement

要するに、プロジェクト名にスラッシュを使うなということですね。

プロジェクト名は私が付けたものではなかったので、命名した人に直してもらって解決しました。

警告の最後には、指定をどう直せばいいか(この例なら rootProject.name を設定する)まで書かれていることが多いです。

自分のビルドスクリプトではなくプラグインが原因の場合は、プラグインのバージョンを上げると消えることがあります。

詳細の表示を元に戻す

すぐに直さない警告の場合、毎回詳細が出るとビルドのログが読みにくくなります。

その場合は、gradle.properties の行をコメントアウトしておくと元に戻せます。

$ vi ~/.gradle/gradle.properties

#org.gradle.warning.mode=all

最後の要約メッセージは出続けますが、これも消したい場合は none を指定します。

まとめ

  • 「Deprecated Gradle features were used in this build」は、次のメジャーバージョンで使えなくなる機能があるという要約
  • 詳細は --warning-mode all で表示できる
  • IntelliJ IDEA なら実行構成の「Run」欄に引数を足すか、gradle.properties に org.gradle.warning.mode=all を書く
  • gradle.properties はプロジェクトの直下かユーザーホームの .gradle に置く(プロジェクト内の .gradle フォルダでは効かない)

Gradle の compile が非推奨になった件(implementation / api への置き換え)を調べている人は、こちらもあわせてどうぞ。

あわせて読みたい
Gradleのcompileは非推奨なのでimplementationかapiに置き換える
Gradleのcompileは非推奨なのでimplementationかapiに置き換える

参考(出典)

ABOUT ME
saratoga
saratoga
フリーランスエンジニア
仕事にも趣味にも IT を駆使するフリーランスエンジニア。技術的な TIPS や日々の生活の中で深堀りしてみたくなったことを備忘録として残していきます。
記事URLをコピーしました