他们似乎也这样做,但输出略有不同。 这让我相信他们可能有不同的用例:

$ JDK_JAVA_OPTIONS="-Dstuff" java Foo

NOTE: Picked up JDK_JAVA_OPTIONS: -Dstuff

$ JDK_JAVA_OPTIONS="illegalStuff" java Foo

NOTE: Picked up JDK_JAVA_OPTIONS: illegalStuff

Error: Cannot specify main class in environment variable JDK_JAVA_OPTIONS

$ JAVA_TOOL_OPTIONS="-Dstuff" java Foo

Picked up JAVA_TOOL_OPTIONS: -Dstuff

$ JAVA_TOOL_OPTIONS="illegalStuff" java Foo

Picked up JAVA_TOOL_OPTIONS: illegalStuff

Unrecognized option: illegalStuff

Error: Could not create the Java Virtual Machine.

Error: A fatal exception has occurred. Program will exit.

我正在使用一个很小的测试程序:

public class Yo {

public static final void main(String[] args) {

System.out.println(System.getProperty("stuff"));

}

}

它表明JDK_JAVA_OPTIONS优先于JAVA_TOOL_OPTIONS :

$ JDK_JAVA_OPTIONS="-Dstuff=jdk" JAVA_TOOL_OPTIONS="-Dstuff=tool" java Yo

NOTE: Picked up JDK_JAVA_OPTIONS: -Dstuff=jdk

Picked up JAVA_TOOL_OPTIONS: -Dstuff=tool

jdk

但最终命令行赢了:

$ JDK_JAVA_OPTIONS="-Dstuff=jdk" JAVA_TOOL_OPTIONS="-Dstuff=tool" java -Dstuff=cmd Yo

NOTE: Picked up JDK_JAVA_OPTIONS: -Dstuff=jdk

Picked up JAVA_TOOL_OPTIONS: -Dstuff=tool

cmd

但是,在构建时,只读取JAVA_TOOL_OPTIONS :

$ JDK_JAVA_OPTIONS="-Dstuff=jdk" JAVA_TOOL_OPTIONS="-Dstuff=tool" javac Yo.java

Picked up JAVA_TOOL_OPTIONS: -Dstuff=tool

我目前正在使用AdoptOpenJDK 11 build 28。

更多推荐