java.home 和 JAVA_HOME 之间的区别

Difference between java.home and JAVA_HOME

在我的 java 代码中,我有这一行 System.getProperty("java.home")。在某些环境中,此 returns 与设置为 JAVA_HOME 的环境变量的值相同。

但在某些环境中,System.getProperty("java.home") returns 与 JAVA_HOME 完全不同的值。

所以我的问题是从java的角度来看java.homeJAVA_HOME有什么区别?

我查了一下,JAVA_HOME是jdk的安装路径,java.home是jre的安装路径,但是为什么不能匹配,因为jre可以是其中的一部分jdk安装。

根据Oracle documentation java.home is a system property that represents the installation directory of Java Runtime Environment. JAVA_HOME is an environment variable - not a system property. Please refer to this post查看系统属性和环境变量有什么区别

您也可以参考this post了解更多JAVA_HOME

如你所说,JAVA_HOME指向环境变量给出的JDK安装路径(%JAVA_HOME%)。

但是 java.home 指向 JRE installation path,现在它 returns 用于 运行 应用程序的 JRE ,请记住您可以在同一个 server/computer

上安装多个版本的 JRE 和 JDK

并且您可以 运行 指定要使用的 jre 或 jdk 的应用程序。

因此,例如,如果您的环境路径中有:

%JAVA_HOME% = C:\Program Files\Java\jdk1.6.0_24

但是如果您 运行 应用程序使用特定的 jre:

"C:\Program Files (x86)\Java\jre1.8.0_73\bin\java" -jar TheJavaFile.jar

在 运行 时间的应用程序中,您将获得 java.home 不同版本的 JAVA_HOME

这可以解释为什么在某些情况下您会得到变量和系统的不同版本 属性。

此外,请注意路径可能完全不同,因为 JRE 与 JDK 是不同的产品,因此它们安装在不同的位置,因为它们是独立的

现在,关于 JDK 与 JRE 的区别,这张图解释得很清楚:

JDK is a superset of JRE, and contains everything that is in JRE, plus tools such as the compilers and debuggers necessary for developing applets and applications. JRE provides the libraries, the Java Virtual Machine (JVM), and other components to run applets and applications written in the Java programming language.