在我的java代码中,我有这一行System.getProperty("java.home")
。在某些环境中,这将返回与已设置为JAVA_HOME
的环境变量相同的值。
但在某些环境中,System.getProperty("java.home")
会返回与JAVA_HOME
完全不同的值。
所以我的问题是java透视图中java.home
和JAVA_HOME
之间的区别是什么?
从我的研究中我知道JAVA_HOME
是jdk安装路径,java.home
是jre安装路径,但是为什么它不匹配,因为jre可以是jdk安装的一部分。
答案 0 :(得分:4)
正如您所说, 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虚拟库 机器(JVM)以及运行applet和应用程序的其他组件 用Java编程语言编写。
答案 1 :(得分:2)
根据Oracle documentation java.home
是一个系统属性,它代表Java Runtime Environment的安装目录。 JAVA_HOME
是环境变量 - 不是系统属性。请参阅this post以检查系统属性和环境变量之间的区别。
您还可以参考this post了解有关JAVA_HOME
的更多信息。