Windows JDK 多版本管理方案

Windows JDK 多版本管理方案

Windows JDK 多版本管理方案

前言

在Windows系统中管理多个版本的JDK,核心思路是避免让多个JDK的路径同时写死在系统变量中,而是通过修改一个"中转变量"来实现一键切换。

以下是目前最主流、最优雅的两种管理方案:


方案一:纯手动配置(原生环境变量切换)

这是最基础、最透明的方法,不需要安装任何第三方工具。原理是利用 Windows 环境变量的引用机制。

1. 配置三个 JAVA_HOME

打开系统环境变量设置(右键"此电脑" -> 属性 -> 高级系统设置 -> 环境变量),在系统变量中新建以下变量:

  • JAVA_HOME_8_291 = C:\Program Files\Java\jdk1.8.0_291 (你的JDK8u291实际路径)
  • JAVA_HOME_8_491 = C:\Program Files\Java\jdk1.8.0_491 (你的JDK8u491实际路径)
  • JAVA_HOME_17 = C:\Program Files\Java\jdk-17 (你的JDK17实际路径)

然后再新建一个总开关变量 JAVA_HOME,让它去引用其中一个具体版本:

  • JAVA_HOME = %JAVA_HOME_8_291% (当前想用哪个,就改后面的数字)

2. 配置 Path 变量

在系统变量中找到 Path,点击编辑。

新建一条记录,将其置于最顶端(非常重要,防止被其他软件自带的Java路径覆盖):

  • %JAVA_HOME%\bin

3. 清理干扰路径(关键一步)

很多时候切换失效,是因为某些软件(如 Oracle 或早期的 Java 安装包)在 Path 中自动添加了路径。检查并删除 Path 中类似的自带路径:

  • C:\Program Files\Common Files\Oracle\Java\javapath
  • C:\Program Files (x86)\Common Files\Oracle\Java\javapath

如何切换:

以后需要换版本时,只需把 JAVA_HOME 的值改成 %JAVA_HOME_8%%JAVA_HOME_21%,保存后重新打开 命令行终端(CMD 或 PowerShell),输入 java -version 即可完成切换。


方案二:使用 venv 工具(vng/jEnv / SDKMAN)

如果你嫌频繁点开"环境变量"窗口太麻烦,推荐使用专门的 Java 版本管理器,在命令行一行命令搞定。

推荐工具:vng (原 jenv-for-windows)

这是一个专门为 Windows 编写的轻量级 Java 版本管理工具。

  1. 安装: 下载并安装 vng(可以直接在 GitHub 搜索 jenv-for-windowsvng)。

    下载链接:JEnv-for-Windows

    解压到任一位置

    添加 path 环境变量

    验证版本提示 因为 Windows 的 PowerShell 安全策略(Execution Policy) 默认比较严格,禁止在系统上运行未经数字签名的脚本文件 ,执行脚本修改一下 PowerShell 的执行策略即可

    shell 复制代码
    Set-ExecutionPolicy -ExecutionPolicy RemoteSigned -Scope CurrentUser

    再进入 jenv 运行以下命令来解除该脚本文件的锁定状态

    shell 复制代码
    Unblock-File -Path "D:\Program Files\JEnv\src\jenv.ps1"
  2. 添加 JDK:

    cmd 复制代码
    jenv add 1.8 C:\Program Files\Java\jdk1.8.0_311
    jenv add 17 C:\Program Files\Java\jdk-17
  3. 查看已添加的版本:

    shell 复制代码
    jenv list
  4. 一键切换:

    shell 复制代码
    jenv change 17

现代选择:SDKMAN!

如果除了 JDK,你还需要管理 Maven、Gradle 等多种开发工具,在 Windows 11 上结合 WSL 或 Git Bash 使用 SDKMAN! 是极佳的选择。它支持直接在终端在线下载并管理几乎所有发行版的 JDK(如 Temurin, Oracle, Corretto)。


💡 进阶避坑指南

  1. IDE(如 IntelliJ IDEA / VS Code)不受系统全局 JDK 影响
    现在的现代 IDE 极其智能,它们允许你为每个项目单独指定 JDK 版本。即使你系统全局配的是 JDK 17,你在 IDEA 的 Project Structure -> SDKs 中依然可以导入并使用 JDK 8。因此,如果只是为了应用开发,不一定非要折腾系统全局变量,直接在 IDE 里配置更安全。
  2. **构建工具(Maven/Gradle)会读取 JAVA_HOME**
    如果你在命令行运行 mvn clean package,Maven 会严格使用当前系统 PathJAVA_HOME 指向的 Java 版本。如果编译报错,记得先用 java -version 检查一下。

如果你在切换过程中遇到了版本"卡死"不变的情况,可以告诉我,这通常是 Path 变量的顺序问题。