如何在Windows中快速切換不同的Java版本
作為一名Java程式設計師,我們經常需要在不同的Java版本下執行我們的應用程式,或者,我們想在不同Java版本上嘗試執行我們的程式碼。當然,如果你在IDE下工作,可以非常輕鬆地切換Java版本(大部分IDE都提供該功能),但是如果你只想在CMD下執行Java程式,而又不想頻繁地去修改系統環境變數,有什麼好的辦法呢?
本文將向你介紹如何在Windows中同時安裝多個Java版本,以及如何通過命令列非常簡單地在不同地Java版本間進行切換。
安裝多個不同版本的Java
在Windows中同時安裝多個Java版本非常容易,你只需要下載並執行每個版本的安裝程式,它們會自動安裝到不同的目錄中
下載不同版本的Java
- Java SE 1.1 - 該版本不能執行在64位Windows上
- Java SE 1.2 - 預設安裝到目錄C:\jdk1.2.2\和C:\Program Files (x86)\JavaSoft\JRE\1.2\ - 推薦安裝到目錄C:\Program Files (x86)\Java\jdk1.2.2\和目錄C:\Program Files (x86)\Java\jre.1.2.2\。
- Java SE 1.3 - 預設安裝到目錄C:\jdk1.3.1_28\ - 推薦安裝到目錄C:\Program Files (x86)\Java\jdk1.3.1_28\。
下面這些版本不用修改安裝目錄,直接預設安裝:
注意:以下Oracle發行版只能用於個人開發,不能應用於商業軟體開發:
- Java SE 11 / OpenJDK 11
- Java SE 12 / OpenJDK 12
- Java SE 13 / OpenJDK 13
- Java SE 14 / OpenJDK 14
- Java SE 15 / OpenJDK 15
- Java SE 16 / OpenJDK 16
以下最新版本僅可用於測試:
注意,由於Oracle版權的問題,我們推薦下載OpenJDK版本:
環境變數
大部分情況下,我們都可以通過以下兩個環境變數來確定當前應用程式使用的是哪個Java版本:
- JAVA_HOME - 多數指令碼使用該環境變數來確定Java版本的位置。
- Path - 當從控制檯執行Java二進位制檔案(如iava和javac)時,使用的是該環境變數。
手動設定環境變數
上面列出來的Java安裝程式在安裝過程中都會自動建立環境變數,首先我們需要手動清除掉這些環境變數。最簡單的方式是使用Windows搜尋欄,輸入“env”,然後開啟"Edit the system environment variables"。當然,你也可以開啟Windows資源管理器,右鍵單擊“我的電腦”,選擇“屬性”,在開啟的視窗中點選“高階系統設定”,然後開啟“環境變數”。
如下圖所示,
- "User variables"中應該不包含任何與Java相關的環境變數。
- "System variables"中應該包含"JAVA_HOME"環境變數並且指向你本地所安裝的其中一個Java版本的目錄(我當前安裝的是Java 16)。如果"JAVA_HOME"環境變數不存在,則需要手動新增。
- 刪除“Path”環境變數中與Java相關的值,如:
- C:\ProgramData\Oracle\Java\javapath
- C:\Program Files (x86)\Common Files\Oracle\Java\javapath
- 同時在"Path"環境變數中新增:
- %JAVA_HOME%\bin
修改完之後的“Path”環境變數的值看起來像這樣:
這裡的“%JAVA_HOME%\bin”確保當程式查詢“Path”環境變數時,找到的Java版本的位置與“JAVA_HOME”環境變數中所對應的位置是一致的。
現在開啟控制檯,輸入下面的命令來檢查以上設定是否有效:
echo %JAVA_HOME% java -version
如果你看到下圖所示的結果,則表示設定沒有問題:
新增切換Java版本的指令碼
接下來我們將為每個Java版本新增一個指令碼檔案,以方便在多個不同Java版本間進行快速切換。我將這些指令碼檔案存放到目錄C:|Program Files\Java\scripts\中,然後將該目錄新增到"Path"環境變數:
這些指令碼檔案被命名為java16.bat、java15.bat、java14.bat、java14.bat、java13.bat等等,在每一個指令碼檔案中,我們會修改當前“JAVA_HOME”環境變數的值為對應Java版本的位置。例如下面是java16.bat指令碼檔案的內容:
@echo off set JAVA_HOME=C:\Program Files\Java\jdk-16 set Path=%JAVA_HOME%\bin;%Path% echo Java 16 activated.
這個指令碼很簡單,我們在“Path”變數值的開頭部分插入了當前要切換的Java版本所對應目錄的位置,該位置是Java版本目錄中Java.exe可執行檔案的位置,因此,每一次Java版本的切換都會導致“Path”變數的值增加,不過這個只會影響當前開啟的控制檯,當控制檯被關閉後該操作也就失效了。
下面這個ZIP檔案包含了從Java 1.2到Java 17的所有指令碼,你可以下載以供參考:scripts-up-to-jdk17.zip
最後,讓我們來快速測試一下我們的指令碼是否能正常工作。注意,將目錄C:|Program Files\Java\scripts\新增到“Path”環境變數後,你需要開啟一個新的控制檯來獲取新新增的環境變數的值。
關掉該控制檯,然後重新開啟一個控制檯,輸入"java -version",你會看到當前Java版本又恢復到預設版本了。