Windows系統(tǒng)下JDK版本一鍵、自動(dòng)切換工具圖文教程
一、背景介紹
作為Java開(kāi)發(fā)者,我們經(jīng)常需要在不同的JDK版本之間切換,比如:
- 維護(hù)基于JDK8的老項(xiàng)目
- 開(kāi)發(fā)使用JDK17的Spring Boot 3.x項(xiàng)目
- 嘗試JDK21的新特性
- 測(cè)試不同JDK版本的性能差異
手動(dòng)切換JDK版本需要修改系統(tǒng)環(huán)境變量,過(guò)程繁瑣且容易出錯(cuò)。為了提高開(kāi)發(fā)效率,我們可以開(kāi)發(fā)一個(gè)一鍵切換工具。
以下是完整的jdk切換腳本,安裝好jdk,并配置JAVA_HOME后運(yùn)行switch-jdk.bat
注意:修改腳本中的C:\Users\lk\Desktop為你自己的用戶(hù)桌面的路徑
@echo off :: 獲取管理員權(quán)限但在當(dāng)前窗口執(zhí)行 >nul 2>&1 "%SYSTEMROOT%\system32\cacls.exe" "%SYSTEMROOT%\system32\config\system" if '%errorlevel%' NEQ '0' ( :: 創(chuàng)建臨時(shí)VBS腳本 echo Set UAC = CreateObject^("Shell.Application"^) > "%temp%\getadmin.vbs" :: 修改為在當(dāng)前窗口運(yùn)行,并且先cd到指定目錄 set "params=%*" echo UAC.ShellExecute "cmd.exe", "/k cd /d C:\Users\lk\Desktop && ""%~s0"" %params%", "", "runas", 1 >> "%temp%\getadmin.vbs" "%temp%\getadmin.vbs" del "%temp%\getadmin.vbs" exit /B ) :: 顯示當(dāng)前目錄 echo 當(dāng)前工作目錄: cd echo. :: 動(dòng)態(tài)生成8-100的版本號(hào)列表 setlocal EnableDelayedExpansion set "SUPPORTED_VERSIONS=" for /l %%i in (8,1,100) do ( set "SUPPORTED_VERSIONS=!SUPPORTED_VERSIONS! %%i" ) :: 獲取已安裝的JDK版本 set "INSTALLED_VERSIONS=" for %%v in (%SUPPORTED_VERSIONS%) do ( if defined jdk%%v ( set "INSTALLED_VERSIONS=!INSTALLED_VERSIONS! %%v" ) ) :: 設(shè)置所有版本的命令別名 for %%v in (%SUPPORTED_VERSIONS%) do ( doskey %%v=call "%~f0" %%v ) :: 如果沒(méi)有參數(shù),顯示歡迎信息 if "%~1"=="" ( echo JDK切換工具已準(zhǔn)備就緒! echo 支持JDK版本范圍:8-100 echo ======================================== echo 已安裝的JDK版本: echo ---------------------------------------- set "found_any=" for %%v in (%SUPPORTED_VERSIONS%) do ( if defined jdk%%v ( set "found_any=1" set "jdkPath=!jdk%%v!" echo %%v - JDK%%v echo 路徑: !jdkPath! ) ) if not defined found_any ( echo 未檢測(cè)到已安裝的JDK echo 請(qǐng)先設(shè)置環(huán)境變量,格式為: jdk^<版本號(hào)^> echo 例如: jdk8, jdk11, jdk17, jdk21 等 ) echo ---------------------------------------- echo 當(dāng)前JAVA_HOME: %JAVA_HOME% echo 當(dāng)前Java版本: java -version echo ---------------------------------------- echo. echo 使用方法:直接輸入版本號(hào)即可切換 echo 例如: 8 ^(切換到JDK8^) echo 17 ^(切換到JDK17^) echo ======================================== echo. cmd /k exit /b 0 ) :: 清除之前可能存在的變量 set "version=" set "jdkEnvName=" :: 清理版本號(hào)中的非數(shù)字字符 set "version=%~1" set "version=%version:jdk=%" set "version=%version:java=%" set "version=%version: =%" :: 驗(yàn)證版本號(hào)是否在支持范圍內(nèi) set "is_supported=" for %%v in (%SUPPORTED_VERSIONS%) do ( if "%%v"=="%version%" set "is_supported=1" ) if not defined is_supported ( echo 錯(cuò)誤: 不支持的JDK版本 %version% echo 支持的版本范圍: 8-100 pause exit /b 1 ) :: 設(shè)置對(duì)應(yīng)的環(huán)境變量名 set "jdkEnvName=jdk%version%" :: 驗(yàn)證目標(biāo)JDK環(huán)境變量是否存在 if not defined %jdkEnvName% ( echo 錯(cuò)誤: 找不到 %jdkEnvName% 環(huán)境變量,請(qǐng)確保已正確設(shè)置! echo 請(qǐng)檢查系統(tǒng)環(huán)境變量中是否存在 %jdkEnvName% 變量。 echo. echo 已安裝的JDK版本: for %%v in (%SUPPORTED_VERSIONS%) do ( if defined jdk%%v ( set "jdkPath=!jdk%%v!" echo %%v - !jdkPath! ) ) echo. echo 您可以通過(guò)以下步驟設(shè)置新的JDK版本: echo 1. 右鍵"此電腦" -^> "屬性" -^> "高級(jí)系統(tǒng)設(shè)置" -^> "環(huán)境變量" echo 2. 在"系統(tǒng)變量"中添加 %jdkEnvName% 變量 echo 3. 將值設(shè)置為對(duì)應(yīng)JDK的安裝路徑(如:C:\Program Files\Java\jdk-%version%) pause exit /b 1 ) :: 顯示當(dāng)前狀態(tài) echo 當(dāng)前JAVA_HOME: %JAVA_HOME% echo 準(zhǔn)備切換到: !%jdkEnvName%! :: 更新JAVA_HOME echo. echo 正在切換到 %jdkEnvName% ... setx JAVA_HOME "%%%jdkEnvName%%%" /M if %errorLevel% neq 0 ( echo 更新JAVA_HOME失敗! pause exit /b 1 ) :: 刷新當(dāng)前會(huì)話的環(huán)境變量 set "JAVA_HOME=!%jdkEnvName%!" set "PATH=%JAVA_HOME%\bin;%PATH%" :: 顯示進(jìn)度 echo 環(huán)境變量已更新,正在驗(yàn)證... echo. :: 等待環(huán)境變量更新 timeout /t 2 /nobreak >nul :: 驗(yàn)證Java版本 echo 當(dāng)前Java版本: echo ------------- java -version if %errorLevel% neq 0 ( echo Java命令執(zhí)行失敗,請(qǐng)檢查環(huán)境變量設(shè)置! pause exit /b 1 ) echo. echo ------------- echo JAVA_HOME 已更新為: %JAVA_HOME% echo JDK切換完成! echo. :: 保持窗口打開(kāi)并停留在指定目錄 cmd /k cd /d C:\Users\lk\Desktop
二、環(huán)境變量配置說(shuō)明
2.1 基礎(chǔ)環(huán)境變量配置
# CLASSPATH配置 .;%JAVA_HOME%\lib; # JAVA_HOME配置(當(dāng)前使用的JDK版本) %jdk17% # 各JDK版本路徑配置 jdk8=D:\javaWork\jdk1.8.0_181 jdk11=D:\javaWork\jdk11 jdk17=D:\javaWork\jdk17.0.9 jdk21=D:\javaWork\jdk-21 # Path配置(添加Java bin目錄) .;%JAVA_HOME%\bin;
2.2 配置說(shuō)明
- 使用%jdkXX%形式的變量引用,便于動(dòng)態(tài)切換
- JAVA_HOME使用引用形式,只需修改引用值即可切換版本
- Path中使用%JAVA_HOME%確保始終使用當(dāng)前選擇的JDK
三、切換工具實(shí)現(xiàn)
3.1 核心功能實(shí)現(xiàn)
@echo off :: switch-jdk.bat
:: 1. 管理員權(quán)限獲取
nul 2>&1 “%SYSTEMROOT%\system32\cacls.exe” “%SYSTEMROOT%\system32\config\system” if ‘%errorlevel%' NEQ ‘0' ( echo Set UAC = CreateObject(“Shell.Application”) > “%temp%\getadmin.vbs” echo UAC.ShellExecute “cmd.exe”, “/k cd /d C:\Users\lk\Desktop && “”%~s0"” %params%", “”, “runas”, 1 >> “%temp%\getadmin.vbs” “%temp%\getadmin.vbs” del “%temp%\getadmin.vbs” exit /B )
:: 2. 動(dòng)態(tài)版本支持
setlocal EnableDelayedExpansion set “SUPPORTED_VERSIONS=” for /l %%i in (8,1,100) do ( set “SUPPORTED_VERSIONS=!SUPPORTED_VERSIONS! %%i” )
:: 3. 版本檢測(cè)與別名設(shè)置
for %%v in (%SUPPORTED_VERSIONS%) do ( if defined jdk%%v ( set “INSTALLED_VERSIONS=!INSTALLED_VERSIONS! %%v” ) doskey %%v=call “%~f0” %%v )
3.2 核心功能說(shuō)明
- 管理員權(quán)限獲取
- 使用UAC提權(quán)確保能修改系統(tǒng)環(huán)境變量
- 保持在當(dāng)前窗口執(zhí)行,提供更好的用戶(hù)體驗(yàn)
- 動(dòng)態(tài)版本支持
- 支持JDK 8-100的所有版本
- 自動(dòng)檢測(cè)系統(tǒng)中已安裝的JDK版本
- 無(wú)需手動(dòng)維護(hù)版本列表
- 命令別名設(shè)置
- 使用doskey設(shè)置簡(jiǎn)化命令
- 支持直接使用版本號(hào)切換(如:8、17)
3.3 版本切換實(shí)現(xiàn)
:: 版本驗(yàn)證和切換 set “jdkEnvName=jdk%version%” if not defined %jdkEnvName% ( echo 錯(cuò)誤: 找不到 %jdkEnvName% 環(huán)境變量 exit /b 1 )
:: 更新JAVA_HOME
setx JAVA_HOME “%%%jdkEnvName%%%” /M
set “JAVA_HOME=!%jdkEnvName%!”
set “PATH=%JAVA_HOME%\bin;%PATH%”
四、使用說(shuō)明
4.1 安裝步驟
環(huán)境變量配置
# 系統(tǒng)變量中添加各JDK版本 jdk8=D:\javaWork\jdk1.8.0_181 jdk11=D:\javaWork\jdk11 jdk17=D:\javaWork\jdk17.0.9 jdk21=D:\javaWork\jdk-21 # 配置JAVA_HOME(初始值) JAVA_HOME=%jdk17% # 配置Path(添加) %JAVA_HOME%\bin
腳本部署
# 將switch-jdk.bat保存到固定目錄或者創(chuàng)建桌面快捷方式
雙擊運(yùn)行
C:\Tools\JDKSwitch\switch-jdk.bat
4.2 使用方法
查看可用版本
switch-jdk.bat
切換JDK版本
# 方式1:直接使用版本號(hào) 8 # 切換到JDK8 17 # 切換到JDK17 # 方式2:使用完整命令 switch-jdk.bat 8 # 切換到JDK8 switch-jdk.bat 17 # 切換到JDK17
4.3 驗(yàn)證切換結(jié)果
# 查看Java版本 java -version # 查看JAVA_HOME echo %JAVA_HOME%
五、擴(kuò)展功能
5.1 添加新JDK版本
- 安裝新版本JDK
- 添加環(huán)境變量:jdkXX=安裝路徑
- 無(wú)需修改腳本,自動(dòng)支持新版本
5.2 錯(cuò)誤處理
- 版本號(hào)驗(yàn)證
- 環(huán)境變量檢查
- 詳細(xì)的錯(cuò)誤提示
- Java命令驗(yàn)證
六、最佳實(shí)踐
- 環(huán)境變量設(shè)置規(guī)范
- 使用統(tǒng)一的命名規(guī)則(jdk + 版本號(hào))
- 路徑中避免空格和特殊字符
- 使用絕對(duì)路徑
- 使用建議
- 創(chuàng)建桌面快捷方式
- 將腳本目錄添加到Path
- 定期清理無(wú)用的JDK版本
- 注意事項(xiàng)
- 首次使用需要管理員權(quán)限
- 某些IDE可能需要重啟
- 注意環(huán)境變量沖突
七、總結(jié)
這個(gè)JDK版本切換工具具有以下優(yōu)勢(shì):
- 使用簡(jiǎn)單,一鍵切換
- 支持廣泛的版本范圍
- 自動(dòng)檢測(cè)已安裝版本
- 無(wú)需頻繁修改腳本
- 提供詳細(xì)的使用反饋
對(duì)于Java開(kāi)發(fā)者來(lái)說(shuō),這個(gè)工具可以:
- 提高開(kāi)發(fā)效率
- 減少環(huán)境配置錯(cuò)誤
- 方便測(cè)試不同JDK版本
- 簡(jiǎn)化多項(xiàng)目開(kāi)發(fā)流程
到此這篇關(guān)于Windows系統(tǒng)下JDK版本一鍵、自動(dòng)切換工具的文章就介紹到這了,更多相關(guān)JDK版本一鍵自動(dòng)切換工具內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
Springboot mybais配置多數(shù)據(jù)源過(guò)程解析
這篇文章主要介紹了Springboot+mybais配置多數(shù)據(jù)源過(guò)程解析,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2020-03-03淺析Java的Hibernate框架中的緩存和延遲加載機(jī)制
這篇文章主要介紹了Java的Hibernate框架中的緩存和延遲加載機(jī)制,Hibernate是注明的Java下SSH三大web開(kāi)發(fā)框架之一,需要的朋友可以參考下2015-11-11springboot開(kāi)發(fā)flowable定時(shí)任務(wù)問(wèn)題
這篇文章主要介紹了springboot開(kāi)發(fā)flowable定時(shí)任務(wù)問(wèn)題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2023-11-11Java利用FTPClient實(shí)現(xiàn)文件上傳和下載的實(shí)踐指南
本文介紹如何使用Java中的FTPClient庫(kù)來(lái)執(zhí)行文件的上傳和下載操作,首先,講解了FTPClient的基本用法,包括連接FTP服務(wù)器和登錄驗(yàn)證,然后,詳細(xì)說(shuō)明了如何使用 storeFile() 和 retrieveFile() 方法分別實(shí)現(xiàn)文件上傳和下載,需要的朋友可以參考下2025-05-05SpringBoot中GlobalExceptionHandler異常處理機(jī)制詳細(xì)說(shuō)明
Spring Boot的GlobalExceptionHandler是一個(gè)全局異常處理器,用于捕獲和處理應(yīng)用程序中發(fā)生的所有異常,這篇文章主要給大家介紹了關(guān)于Java中GlobalExceptionHandler異常處理機(jī)制的相關(guān)資料,需要的朋友可以參考下2024-03-03servlet實(shí)現(xiàn)簡(jiǎn)單的權(quán)限管理和敏感詞過(guò)濾功能
JavaEE課要求用servlet和過(guò)濾器實(shí)現(xiàn)權(quán)限管理和敏感詞過(guò)濾功能,對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2021-05-05SpringBoot+Vue實(shí)現(xiàn)動(dòng)態(tài)菜單的思路梳理
這篇文章主要為大家詳細(xì)介紹了利用SpringBoot+Vue實(shí)現(xiàn)動(dòng)態(tài)菜單的思路梳理,文中的示例代碼講解詳細(xì),感興趣的小伙伴可以動(dòng)手嘗試一下2022-07-07Java重寫(xiě)(Override)與重載(Overload)區(qū)別原理解析
這篇文章主要介紹了Java重寫(xiě)(Override)與重載(Overload)區(qū)別原理解析,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2020-02-02