Windows 下的 Java 版本管理工具推荐,轻松切换 JDK 版本
在参加开源项目过程中,经常需要根据对应的项目切换不同的java版本,虽然说在IDEA中可以方便的对项目的Java版本进行管理,但是在原生的命令行操作时,却很麻烦。作为一名开发者,经常会遇到不同项目需要不同 Java 版本的情况。就像 Node.js 有 nvm 可以方便管理版本一样,Windows 系统下也有专门的工具来管理 Java 版本。今天就来给大家分享几款实用的工具,以及如何用它们在 JDK 8 和 JDK 17 之间灵活切换。
主流 Java 版本管理工具
1. jabba(推荐,跨平台)
jabba 是一款轻量级、跨平台的 Java 版本管理器,支持 Windows、macOS、Linux,操作简单,能自动下载、安装和切换 JDK,非常适合 Windows 用户。
安装步骤:
打开 PowerShell(管理员模式),运行以下命令:
Invoke-Expression (Invoke-WebRequest https://github.com/shyiko/jabba/raw/master/install.ps1 -UseBasicParsing).Content
安装完成后,重启 PowerShell 使配置生效。
常用命令:
查看可安装的 JDK 版本:
jabba ls-remote
(可筛选,如jabba ls-remote | findstr "17"
查找 Java 17 版本)安装指定版本(以 Java 17 为例):
jabba install adopt@1.17.0-00
(adopt 指 AdoptOpenJDK,可替换为 temurin、zulu 等发行版)查看已安装版本:
jabba ls
切换当前版本:
jabba use adopt@1.17.0-00
设置全局默认版本:
jabba alias default adopt@1.17.0-00
2. SDKMAN!(依赖 WSL)
SDKMAN! 是一款强大的软件开发工具包管理器,支持 Java、Kotlin、Maven 等多种工具的版本管理。不过它原生不支持 Windows 系统,需要通过 WSL(Windows Subsystem for Linux)安装使用,比较适合习惯 Linux 命令行的用户。
使用方法:
先启用 WSL 并安装 Linux 发行版(如 Ubuntu),然后在 WSL 终端中安装 SDKMAN!:
curl -s "https://get.sdkman.io" | bash
重启终端后,常用命令:
安装 JDK:
sdk install java 17.0.9-tem
(tem 指 Eclipse Temurin 发行版)切换版本:
sdk use java 17.0.9-tem
查看已安装版本:
sdk list java
3. 手动管理(适合简单场景)
如果不想安装工具,也可以手动管理多个 JDK 版本,通过修改环境变量切换:
步骤:
下载多个版本的 JDK(如 JDK 11、17),分别安装到不同目录(如 D:\Java\jdk11、D:\Java\jdk17)。
配置环境变量:删除系统变量中已有的 JAVA_HOME(若存在),新增变量(如 JAVA11_HOME)指向 JDK 11 目录,JAVA17_HOME 指向 JDK 17 目录,修改 Path 变量,将
%JAVA_HOME%\bin
放在前面(确保优先生效)。切换版本时,手动修改 JAVA_HOME 的值为
%JAVA11_HOME%
或%JAVA17_HOME%
,重启命令行即可。
工具对比
注意事项
安装 JDK 时,建议选择主流发行版(如 Eclipse Temurin、AdoptOpenJDK、Zulu),兼容性更好。
切换版本后,需重启命令行或 IDE(如 IntelliJ IDEA、Eclipse),确保新版本生效。
部分工具(如 jabba)可能需要科学上网才能正常下载 JDK,国内用户可尝试配置镜像源(如阿里云、华为云的 JDK 镜像)。
根据需求选择合适的工具,jabba 是 Windows 下最推荐的轻量方案,无需复杂配置即可快速管理 Java 版本。
已有 JDK 8,用 jabba 安装 JDK 8 和切换 JDK 17 需卸载已有版本吗?
不需要卸载已安装的 JDK 8,jabba 可以与系统中已有的 Java 版本共存,且能通过命令行优先使用 jabba 管理的版本,不会冲突。
无需卸载现有 JDK 8 的原因:
jabba 管理的 JDK 会安装在其独立的目录(默认路径为 ~/.jabba/jdk/
),与你当前系统中已安装的 JDK 8 目录(如 C:\Program Files\Java\jdk1.8.0_xxx
)完全分离,两者互不干扰。当使用 jabba use <版本>
切换时,jabba 会临时修改当前终端的 JAVA_HOME 和 PATH 环境变量,优先指向其管理的 JDK 版本;关闭终端后,系统默认的 JDK 8 仍可正常使用(除非你设置了 jabba 的全局默认版本)。
操作建议(保留现有 JDK 8 + 用 jabba 管理 JDK 17):
确认当前系统的 Java 版本:
打开命令行(PowerShell 或 cmd),运行:
java -version
此时会显示你已安装的 JDK 8 版本(说明系统默认仍使用原版本)。
用 jabba 安装 JDK 17(以 Eclipse Temurin 发行版为例):
jabba install temurin@1.17.0-00 # 安装 JDK 17
若下载缓慢,可尝试添加国内镜像(如阿里云),在 ~/.jabbarc
文件中添加:
export JABBA_JDK_MIRROR=https://mirrors.aliyun.com/jdk/
切换到 JDK 17 并验证:
jabba use temurin@1.17.0-00 # 临时切换到 JDK 17(当前终端生效)
java -version # 此时应显示 JDK 17 版本
切回原系统的 JDK 8:
jabba use system # 切换回系统默认的 JDK(即你已安装的 JDK 8)
java -version # 验证是否切回成功
补充说明:
若后续想让 jabba 管理的版本成为全局默认(替代系统原 JDK 8),可运行:
jabba alias default temurin@1.17.0-00 # 全局默认 JDK 17
# 如需改回系统默认,运行:jabba alias default system
部分 IDE(如 IntelliJ IDEA)可能需要手动指定 JDK 路径,可在
~/.jabba/jdk/
下找到 jabba 安装的版本路径,添加到 IDE 配置中。
综上,无需卸载现有 JDK 8,直接用 jabba 安装 JDK 17 并切换即可,操作灵活且安全。
用 jabba 动态切换 JDK 8 和 JDK 17 运行不同项目
在 Windows 系统中使用 jabba 动态切换 JDK 8 和 JDK 17 非常方便,具体步骤如下(假设你已安装 jabba,且系统中已有 JDK 8):
一、将现有 JDK 8 关联到 jabba(可选但推荐)
如果想让 jabba 统一管理系统中已安装的 JDK 8(方便后续切换),可以用 link 命令关联:
找到你已安装的 JDK 8 路径(例如 C:\Program Files\Java\jdk1.8.0_301
),在 PowerShell 中运行:
jabba link system@1.8 "C:\Program Files\Java\jdk1.8.0_301"
这一步会将系统中的 JDK 8 注册到 jabba 管理列表,命名为 system@1.8
。
二、用 jabba 安装 JDK 17
查看可安装的 JDK 17 版本(以 Eclipse Temurin 为例,主流且稳定):
jabba ls-remote | findstr "17"
安装指定版本(例如 17.0.9):
jabba install temurin@1.17.0-09 # temurin 是 Eclipse 的 JDK 发行版
若下载慢,可先配置国内镜像(提升速度):
# 在 PowerShell 中执行,设置阿里云镜像
echo 'export JABBA_JDK_MIRROR=https://mirrors.aliyun.com/jdk/' >> $env:USERPROFILE/.jabbarc
三、动态切换 JDK 版本
临时切换(仅当前终端生效)
切换到 JDK 8:
jabba use system@1.8 # 如果你之前关联了系统 JDK 8
# 或直接用 jabba 安装的 JDK 8(如果单独安装过):jabba use temurin@1.8.0-392
切换到 JDK 17:
jabba use temurin@1.17.0-09
验证切换结果
切换后运行以下命令,确认版本是否正确:
java -version # 显示当前使用的 JDK 版本
javac -version # 确认编译器版本(与 JDK 版本一致)
为不同项目设置默认版本(推荐)
如果某个项目固定需要 JDK 8,另一个需要 JDK 17,可以在项目根目录创建.jabbarc
文件,自动切换版本:
在 JDK 8 项目根目录创建.jabbarc
,内容:
use system@1.8
在 JDK 17 项目根目录创建 .jabbarc
,内容:
use temurin@1.17.0-09
进入项目目录时,jabba 会自动读取 .jabbarc
并切换到对应版本(需在 PowerShell 中操作)。
四、补充说明
全局默认版本:如果想设置一个全局默认 JDK(如 JDK 17),运行:
jabba alias default temurin@1.17.0-09
取消全局默认(恢复系统默认):
jabba unalias default
卸载版本:如果需要删除某个版本:
jabba uninstall temurin@1.17.0-09
IDE 配置:在 IntelliJ IDEA 或 Eclipse 中,需手动指定项目使用的 JDK 路径:
jabba 安装的 JDK 路径默认在:C:\Users\<你的用户名>\.jabba\jdk\
找到对应版本目录(如temurin@1.17.0-09
),在 IDE 中添加为项目 SDK 即可。
通过以上步骤,你可以在不同项目间快速切换 JDK 8 和 JDK 17,无需手动修改环境变量,非常适合多版本兼容场景。
安装 jabba 时遇到执行策略限制错误的解决方法
有朋友可能会遇到这样的错误:
. : 无法加载文件 C:\Users\11060971\.jabba\jabba.ps1,因为在此系统上禁止运行脚本。有关详细信息,请参阅 https:/go.microsoft.com/fwlink/?LinkID=135170 中的 about_Execution_Policies。
所在位置 行:80 字符: 3
+ . $jabbaHome\jabba.ps1
+ ~~~~~~~~~~~~~~~~~~~~
+ CategoryInfo : SecurityError: (:) [],PSSecurityException
+ FullyQualifiedErrorId : UnauthorizedAccess
这是由于 Windows PowerShell 的执行策略限制导致的,默认情况下 PowerShell 禁止运行未签名的脚本(包括 jabba.ps1)。解决方法如下:
步骤:修改 PowerShell 执行策略
以管理员身份打开 PowerShell:点击「开始」→ 搜索「PowerShell」→ 右键「以管理员身份运行」。
查看当前执行策略:
Get-ExecutionPolicy
默认可能是 Restricted,严格禁止脚本运行。
3. 临时放宽执行策略:
Set-ExecutionPolicy RemoteSigned -Scope CurrentUser
提示确认时,输入 Y 并回车。
解释:RemoteSigned 策略允许运行本地创建的脚本(如 jabba.ps1),但要求从网络下载的脚本必须经过签名,兼顾安全性和可用性。
4. 重新加载 jabba:关闭当前 PowerShell 窗口,重新打开一个新的 PowerShell(无需管理员权限),运行:
jabba --version
若显示版本号(如 0.11.2),则安装成功。
5. (可选)恢复执行策略:如果担心安全问题,后续可将策略恢复为默认值:
Set-ExecutionPolicy Restricted -Scope CurrentUser
完成后,即可正常使用 jabba 命令管理 Java 版本。如果仍有问题,可重启电脑后再试,确保策略生效。
希望以上内容能帮到大家,在 Windows 系统下轻松管理 Java 版本,提高开发效率!如果有其他问题,欢迎在评论区交流~