「Deprecated Gradle features were used in this build」の原因を調べる方法|IntelliJ対応
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 User Manual:Command-Line Interface(Warnings)
- IntelliJ IDEA Documentation:Run/Debug configuration: Gradle
