java.home 和 JAVA_HOME 的区别

Posted

技术标签:

【中文标题】java.home 和 JAVA_HOME 的区别【英文标题】:Difference between java.home and JAVA_HOME 【发布时间】:2018-01-08 12:55:39 【问题描述】:

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

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

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

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

【问题讨论】:

【参考方案1】:

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

但是java.home指向JRE installation path,现在它返回了用于运行应用程序的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 的区别,这张图解释得很清楚:

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

【讨论】:

【参考方案2】:

根据Oracle documentationjava.home是一个系统属性,代表Java Runtime Environment的安装目录。 JAVA_HOME 是一个环境变量 - 不是系统属性。请参考this post查看系统属性和环境变量的区别。

您也可以参考this post了解更多关于JAVA_HOME的信息。

【讨论】:

看起来问题本身有这个答案:JAVA_HOME = jdk 安装路径和 java.home = jre 安装路径......因此,这里需要回答的问题似乎是:为什么可以' jdk路径内的jre路径匹配?其中答案可能很简单,例如“它们是不同且独立的产品,因此它们不必共享相同的路径” @MarcoVargas - 你是对的。但我的问题是 - jdk = C:/Program Files/Java/jdk1.8.0_112 那么为什么 jre 不能是 C:/Program Files/Java/jdk1.8.0_112/jre ? 同意你的观点,这就是我发布上述评论的原因,因为杰伊建议将此答案标记为明确答案,但似乎你的问题在我给出的另一个答案中得到了回答......说明这是因为它们是不同的 Oracle 产品,这就是它们不共享根路径的原因

以上是关于java.home 和 JAVA_HOME 的区别的主要内容,如果未能解决你的问题,请参考以下文章

如何在 Mac 中永久设置 JAVA_HOME?

jdk1.7jdk1.8兼容共存环境配置方案

为什么使用$ JAVA_HOME或$ AIR_HOME而不仅仅是$ PATH?

我需要在linux上配置JAVA_HOME,可是不知道jdk装在哪里了?

tomcat启动一闪而过 有一些信息显示但是启动不了

linux java环境变量设置