Edited at

Gradle で「詳細は、-Xlint:uncheckedオプションを指定して再コンパイルしてください」と表示されたときの対処


「詳細は、-Xlint:uncheckedオプションを指定して再コンパイルしてください」と言われる

$ gradle build

> Task :compileJava
注意:/Users/az/myapp/src/main/java/MyApp.javaの操作は、未チェックまたは安全ではありません。
注意:詳細は、-Xlint:uncheckedオプションを指定して再コンパイルしてください。


対処方法

build.gradle に以下を追加する。

tasks.withType(JavaCompile) {

options.compilerArgs << '-Xlint:unchecked'
}

これで具体的な警告内容が表示されるようになる。

$ gradle build

> Task :compileJava
/Users/az/myapp/src/main/java/MyApp.java:10: 警告:[unchecked] raw型ArrayListのメンバーとしてのadd(E)への無検査呼出しです
myList.add("Hello, world.");
^
Eが型変数の場合:
クラス ArrayListで宣言されているE extends Object
警告1個


他の警告も出力してみる

build.gradle に以下を設定する。

-Xlint の unchecked と divzero を指定。

deprecation を指定。

tasks.withType(JavaCompile) {

options.compilerArgs << '-Xlint:unchecked,divzero'
options.deprecation = true
}

コンパイルすると指定した3種類について警告が出力される。

$ gradle build

> Task :compileJava
/Users/az/myapp/src/main/java/MyApp.java:11: 警告:[unchecked] raw型ArrayListのメンバーとしてのadd(E)への無検査呼出しです
myList.add("Hello, world.");
^
Eが型変数の場合:
クラス ArrayListで宣言されているE extends Object
/Users/az/myapp/src/main/java/MyApp.java:13: 警告:[divzero] ゼロで除算
int a = 10 / 0;
^
/Users/az/myapp/src/main/java/MyApp.java:15: 警告:[removal] java.util.jarのPack200は推奨されておらず、削除用にマークされています
Pack200.newPacker();
^
警告3個


Gradle の tasks は TaskContainer


You can obtain a TaskContainer instance by calling Project.getTasks(), or using the tasks property in your build script.



Gradle の options は CompileOptions

CompileOptions - Gradle DSL Version 5.6.2


Main options for Java compilation.


CompileOptions - Gradle DSL Version 5.6.2


compilerArgs

Returns any additional arguments to be passed to the compiler. Defaults to the empty list. Compiler arguments not supported by the DSL can be added here.



-Xlint:unchecked は javac コマンドのオプション

JDK 11ドキュメント - ツール・リファレンス - javac


-Xlint:[-]key(,[-]key)*

有効または無効にする警告をカンマ(,)で区切って指定します。指定した警告を無効にするには、キーの前にハイフン(-)を指定します。

unchecked: 無検査操作について警告します。



-Xlint にはもっと多くのオプションがある

JDK 11ドキュメント - ツール・リファレンス - javac


-Xlint:[-]key(,[-]key)*

有効または無効にする警告をカンマ(,)で区切って指定します。指定した警告を無効にするには、キーの前にハイフン(-)を指定します。

サポートされているkeyの値は、次のとおりです。

all: すべての警告を有効にします。

auxiliaryclass: ソース・ファイルでは非表示で、他のファイルから使用される補助クラスについて警告します。

cast: 不要なキャストの使用について警告します。

classfile: クラス・ファイルの内容に関連した問題について警告します。

deprecation: 非推奨項目の使用について警告します。

dep-ann: javadocで非推奨とマークされているのに@Deprecated注釈を使用していない項目について警告します。

divzero: 定整数0による除算について警告します。

empty: if以降が空の文であることについて警告します。

exports: モジュールのエクスポートに関する問題について警告します。

fallthrough: switch文の1つのcaseから次へのフォール・スルーについて警告します。

finally: 正常に完了しないfinally節について警告します。

module: モジュール・システム関連の問題について警告します。

opens: モジュールのオープンに関する問題について警告します。

options: コマンド行オプションの使用に関する問題について警告します。

overloads: メソッドのオーバーロードに関する問題について警告します。

overrides: メソッドのオーバーライドに関する問題について警告します。

path : コマンド行の無効なパス要素について警告します。

processing: 注釈処理に関する問題について警告します。

rawtypes: raw型の使用について警告します。

removal: 削除用にマークされたAPIの使用について警告します。

requires-automatic: requires句内の自動モジュールの使用について開発者に警告します。

requires-transitive-automatic: requires transitive内の自動モジュールについて警告します。

serial: シリアル・バージョンIDを指定しない直列化可能なクラスについて警告します。また、直列化可能要素からpublic以外のメンバーへのアクセスについて警告します。

static : インスタンスを使用したstaticメンバーへのアクセスについて警告します。

try : tryブロック(try-with-resources)の使用に関する問題について警告します。

unchecked: 無検査操作について警告します。

varargs: 安全ではない可能性があるvarargメソッドについて警告します。

none: すべての警告を無効にします。


-Xlint を指定するだけですべての警告を有効にすることもできる。

JDK 11ドキュメント - ツール・リファレンス - javac


-Xlint

推奨されるすべての警告を有効にします。このリリースでは、利用可能なすべての警告を有効にすることが推奨されています。


-Xlint とは別に -deprecation という省略表記オプションもある。

JDK 11ドキュメント - ツール・リファレンス - javac


-deprecation

非推奨のメンバーやクラスの使用またはオーバーライドのたびに説明を表示します。-deprecationオプションが指定されていない場合、javacは、非推奨のメンバーやクラスを使用またはオーバーライドしているソース・ファイルのサマリーを表示します。-deprecationオプションは-Xlint:deprecationの省略表記です。



今回の環境


  • Gradle 5.6.2

  • OpenJDK 11.0.2


参考資料