Java 8未使用自定義配置的JAVA_HOME

前言

我將JDK安裝到了 C:\Program Files\Java 目錄下,並且配置了系統變量 JAVA_HOME=C:\Program Files\Java\jdk1.8.0_212 和環境變量 PATH=%JAVA_HOME%\bin 但在實際運行過程中,我的JAVA_HOME並沒有生效。

問題與分析

從前言中,我們知道了我電腦上的配置情況 JAVA_HOME=C:\Program Files\Java\jdk1.8.0_212,但當我在 CMD 中編譯運行下面的程序時,結果卻讓我很疑惑:

public class Test{
	public static void main(String[] args){
		// 這行代碼將打印出 系統變量JAVA_HOME 的值
		System.out.println(System.getProperty("java.home"));
	}
}

我期待的結果是: C:\Program Files\Java\jdk1.8.0_212
但實際結果確是:
實際的JAVA_HOME結果.png
兩者是不一致的。
我就索性刪除了系統變量JAVA_HOME,但發現該段代碼依然能打印出 C:\Program Files\Java\jre1.8.0_212 ,這就讓我非常困惑。後來想到我的程序是在 CMD 中運行的,所以Windows會根據 環境變量Path 中指定的路徑來尋找java指令,所以我仔細瀏覽環境變量列表,發現
環境變量.pnh
環境變量列表的第一行配置的路徑地址中有 Java 字樣,我切換到該目錄下,看到了
javapath.png
而我每次基於 JAVA_HOME 在環境變量新添加 java指令執行路徑 時,都將其添加到了環境變量列表末尾,而 Windows 是按照環境變量地址中的路徑地址的先後順序來尋找在 cmd 中執行的指令,所以我執行的 java指令 實際上是位於 C:\Program Files (x86)\Common Files\Oracle\Java\javapath 下的 java指令。
那爲什麼我沒有配置 JAVA_HOME 依然能通過 System.getProperty(“java.home”) 得到一個結果呢?我在 StackOverflow 上的這個問題 Which JRE does C:\ProgramData\Oracle\Java\javapath\java.exe use? 的一個回答中找到了答案
stackoverflow上的一個回答.png
我將信將疑地打開自己電腦上的註冊表,確實發現了
註冊表中Java Runtime-Environment項的值.png
註冊表中配置的 JavaHome 的值 C:\Program Files\Java\jre1.8.0_212 確實就是我們那段程序的運行結果。
所以,我們可以合理地猜測,通過運行 C:\Program Files (x86)\Common Files\Oracle\Java\javapathjava 指令到註冊表中獲取了 JavaHome值 從而輸出了我們看到的結果。

解決

刪除環境變量中的 C:\Program Files (x86)\Common Files\Oracle\Java\javapath,然後 按正常步驟添加 系統變量JAVA_HOME 以及 環境變量中添加 %JAVA_HOME%\bin 即可。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章