java.home和JAVA_HOME的区别

2022-09-02 13:19:08

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

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

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

我从我的研究中知道的是jdk安装路径,是jre安装路径,但是为什么它不能匹配,因为jre可以是jdk安装的一部分。JAVA_HOMEjava.home


答案 1

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

但是java.home指向JRE安装路径,现在它返回用于运行应用程序的JRE,请记住,您可以在同一台服务器/计算机上拥有多个版本的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的区别,这张图非常清楚地解释了这一点:

enter image description here

JDK 是 JRE 的超集,包含 JRE 中的所有内容,以及开发小程序和应用程序所需的编译器和调试器等工具。JRE 提供了库、Java 虚拟机 (JVM) 和其他组件来运行用 Java 编程语言编写的小程序和应用程序。


答案 2

根据Oracle文档,它是一个系统属性,表示Java运行时环境的安装目录。 是环境变量 - 而不是系统属性。请参考这篇文章,检查系统属性和环境变量之间的区别。java.homeJAVA_HOME

您也可以参考这篇文章来了解有关 .JAVA_HOME


推荐