在参加开源项目过程中,经常需要根据对应的项目切换不同的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%,重启命令行即可。

工具对比

工具

跨平台性

操作复杂度

适合场景

jabba

支持 Windows

简单

纯 Windows 环境,追求便捷性

SDKMAN!

依赖 WSL

中等

熟悉 Linux 命令,需管理多工具

手动管理

无依赖

繁琐

版本少,切换频率低

注意事项

  • 安装 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)

  1. 确认当前系统的 Java 版本
    打开命令行(PowerShell 或 cmd),运行:

java -version

此时会显示你已安装的 JDK 8 版本(说明系统默认仍使用原版本)。

  1. 用 jabba 安装 JDK 17(以 Eclipse Temurin 发行版为例):

jabba install temurin@1.17.0-00  # 安装 JDK 17

若下载缓慢,可尝试添加国内镜像(如阿里云),在 ~/.jabbarc 文件中添加:

export JABBA_JDK_MIRROR=https://mirrors.aliyun.com/jdk/
  1. 切换到 JDK 17 并验证

jabba use temurin@1.17.0-00  # 临时切换到 JDK 17(当前终端生效)
java -version  # 此时应显示 JDK 17 版本
  1. 切回原系统的 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 版本

  1. 临时切换(仅当前终端生效)
    切换到 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
  1. 验证切换结果
    切换后运行以下命令,确认版本是否正确:

java -version  # 显示当前使用的 JDK 版本
javac -version  # 确认编译器版本(与 JDK 版本一致)
  1. 为不同项目设置默认版本(推荐)
    如果某个项目固定需要 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 执行策略

  1. 以管理员身份打开 PowerShell:点击「开始」→ 搜索「PowerShell」→ 右键「以管理员身份运行」。

  2. 查看当前执行策略:

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 版本,提高开发效率!如果有其他问题,欢迎在评论区交流~