TL;DR
Java のツールが自動的に読み込む環境変数に JAVA_TOOL_OPTIONS
と JDK_JAVA_OPTIONS
があります。
これらの主な違いは、その提供範囲で、以下のようになります。
JAVA_TOOL_OPTIONS
: java, javac, jar, javadoc などの全てのJavaツールJDK_JAVA_OPTIONS
: javaコマンドのみ
JAVA_TOOL_OPTIONS
JAVA_TOOL_OPTIONS
環境変数は、java
, javac
, jar
, javadoc
などあらゆるJavaツールが自動的に読み込む環境変数で、JDK 5 から導入されました。
システムプロパティ -Dfile.encoding=UTF-8
やエージェントのロード -javaagent
、--add-exports
や --add-opens
といった、すべてのJavaツールに共通で適用たいオプションを指定できます(ランチャによって処理されるコマンド行の拡張である -client
-server
オプションを使ったVM選択などには使用できません)。
この環境変数が設定されている場合、コマンドラインに以下のメッセージが表示されます。
Picked up JAVA_TOOL_OPTIONS: -Dxxxx
この表示が邪魔という意見が大多数なのですが、広範囲に影響を与える環境変数であり、意図しない適用を予防する意味でメッセージ表示されます。 このメッセージは、標準エラー出力に出力されるため、環境によっては以下のようにエラーと誤解させるように出力されることがあります。
javac failed: Picked up JAVA_TOOL_OPTIONS: -Dxxxx
JDK_JAVA_OPTIONS
JDK_JAVA_OPTIONS
は JDK 9 から有効になったオプションです。
JAVA_TOOL_OPTIONS
とは異なり、javaコマンドのみに適用されます(javac
を始めとした他のコマンドには適用されません)。
JAVA_TOOL_OPTIONS
と同じオプションが指定されていた場合、JDK_JAVA_OPTIONS
で指定されたのもが優先となります(コマンドラインで直接していされたオプションはJDK_JAVA_OPTIONS
のものより優先)。
-jar
や --module
、-h
や -version
など、JDK_JAVA_OPTIONS
に指定できないオプションも存在します(指定されていた場合はエラー)。
JDK_JAVA_OPTIONSが設定されている場合、ランチャはメッセージを標準エラー出力にリマインダとして出力します。
NOTE: Picked up JDK_JAVA_OPTIONS: -D...
JAVA_TOOL_OPTIONS
の場合と同じように以下のように出力されることもあります。
java failed: NOTE: Picked up JDK_JAVA_OPTIONS: -D...