2017-08-01 133 views
4

在我的java代码中,我有这条线System.getProperty("java.home")。在某些环境中,这会返回与已被设置为环境变量JAVA_HOME相同的值。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 VS JRE,这个图说明了它很清楚:

enter image description here

JDK是JRE的超集,并包含一切,这是在JRE,加上 工具,如开发 小应用程序和应用程序所需的编译器和调试器。 JRE提供了用Java编程语言编写的库,Java虚拟机(JVM)和其他组件以运行小应用程序和应用程序 。

2

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

你也可以参考this post了解更多关于JAVA_HOME

+0

简而言之,这应该被标记为答案。 – Jay

+0

它看起来问题本身有这个答案:JAVA_HOME = jdk安装路径和java.home = jre安装路径...因此,它似乎需要在这里回答的问题是:为什么不能在jdk路径内路径匹配?其中的答案可能很简单:“他们是不同的独立产品,因此他们不需要共享相同的路径” –

+0

@MarcoVargas - 你是对的。但我的问题是 - jdk = C:/ Program Files/Java/jdk1.8.0_112然后为什么不能成为C:/ Program Files/Java/jdk1.8.0_112/jre? – yogsma

相关问题