1. 程式人生 > >Java - 怎麼通過環境變數來切換jdk版本

Java - 怎麼通過環境變數來切換jdk版本

問題與分析

我在本地安裝了1.7和1.8兩個版本的jdk,此時我的JAVA_HOME環境變數配置的是jdk1.8,在cmd視窗輸入java -version發現報錯如下:

C:\Users\Lewis>java -version
Error: Registry key 'Software\JavaSoft\Java Runtime Environment'\CurrentVersion'
has value '1.8', but '1.7' is required.
Error: could not find java.dll
Error: Could not find Java SE Runtime Environment.

接著輸入javac -version則是正常:

C:\Users\Lewis>javac -version
javac 1.8.0_191

javac命令能正常執行, 說明我配置的CLASSPATH變數和JAVA_HOME變數正確。而java命令報錯,則說明PATH變數有問題。cmd視窗在執行命令時會去PATH變數的值裡尋找路徑,當找到對應的路徑後就不會再繼續查詢下去。

所以我們應該把java相關的路徑放到PATH變數值的最前面,需要注意的是,如果你安裝了Oracle,你會發現Oracle的環境變數會直接排到最前面,也就是說,這時候會優先去Oracle指定的目錄下尋找java的命令。

但只是將java路徑放置到最前面還是不夠的,因為WINDOW本身系統SYSTEM32裡面的環境變數載入等級要優先於使用者設定的環境變數,所以我們還需要將C:\Windows\System32目錄下的java.exe、javaw.exe、javaws.exe三個程式刪掉或者重新命名才行。

解決方案

  1. 將PATH環境變數的變數值裡的java路徑放置到最前面;
  2. C:\Windows\System32目錄下的java.exe、javaw.exe、javaws.exe三個程式刪掉或者重新命名。

接下來進行測試,會發現java -version得到了正確的結果:

C:\Users\Lewis>java -version
java version "1.8.0_191"
Java(TM) SE Runtime Environment (build 1.8.0_191-b12)
Java HotSpot(TM) 64-Bit Server VM (build 25.191-b12, mixed mode)

接著將JAVA_HOME改為jdk1.7的目錄,再一次測試java和javac命令,都能得到正確的結果。

參考連結