2017-08-01 45 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