Windows JDK 多版本管理方案 Windows JDK 多版本管理方案Windows JDK 多版本管理方案前言方案一纯手动配置原生环境变量切换1. 配置三个 JAVA_HOME2. 配置 Path 变量3. 清理干扰路径关键一步方案二使用 venv 工具vng/jEnv / SDKMAN推荐工具vng (原 jenv-for-windows)现代选择SDKMAN! 进阶避坑指南Windows JDK 多版本管理方案前言在Windows系统中管理多个版本的JDK核心思路是避免让多个JDK的路径同时写死在系统变量中而是通过修改一个“中转变量”来实现一键切换。以下是目前最主流、最优雅的两种管理方案方案一纯手动配置原生环境变量切换这是最基础、最透明的方法不需要安装任何第三方工具。原理是利用 Windows 环境变量的引用机制。1. 配置三个JAVA_HOME打开系统环境变量设置右键“此电脑” - 属性 - 高级系统设置 - 环境变量在系统变量中新建以下变量JAVA_HOME_8_291C:\Program Files\Java\jdk1.8.0_291(你的JDK8u291实际路径)JAVA_HOME_8_491C:\Program Files\Java\jdk1.8.0_491(你的JDK8u491实际路径)JAVA_HOME_17C:\Program Files\Java\jdk-17(你的JDK17实际路径)然后再新建一个总开关变量JAVA_HOME让它去引用其中一个具体版本JAVA_HOME%JAVA_HOME_8_291%(当前想用哪个就改后面的数字)2. 配置Path变量在系统变量中找到Path点击编辑。新建一条记录将其置于最顶端非常重要防止被其他软件自带的Java路径覆盖%JAVA_HOME%\bin3. 清理干扰路径关键一步很多时候切换失效是因为某些软件如 Oracle 或早期的 Java 安装包在Path中自动添加了路径。检查并删除Path中类似的自带路径C:\Program Files\Common Files\Oracle\Java\javapathC:\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 版本管理工具。安装下载并安装vng可以直接在 GitHub 搜索jenv-for-windows或vng。下载链接JEnv-for-Windows解压到任一位置添加path环境变量验证版本提示因为 Windows 的 PowerShell 安全策略Execution Policy 默认比较严格禁止在系统上运行未经数字签名的脚本文件执行脚本修改一下 PowerShell 的执行策略即可Set-ExecutionPolicy-ExecutionPolicyRemoteSigned-ScopeCurrentUser再进入jenv运行以下命令来解除该脚本文件的锁定状态Unblock-File-PathD:\Program Files\JEnv\src\jenv.ps1添加 JDKjenv add 1.8 C:\Program Files\Java\jdk1.8.0_311 jenv add 17 C:\Program Files\Java\jdk-17查看已添加的版本jenv list一键切换jenv change17现代选择SDKMAN!如果除了 JDK你还需要管理 Maven、Gradle 等多种开发工具在 Windows 11 上结合 WSL 或 Git Bash 使用SDKMAN!是极佳的选择。它支持直接在终端在线下载并管理几乎所有发行版的 JDK如 Temurin, Oracle, Corretto。 进阶避坑指南IDE如 IntelliJ IDEA / VS Code不受系统全局 JDK 影响现在的现代 IDE 极其智能它们允许你为每个项目单独指定 JDK 版本。即使你系统全局配的是 JDK 17你在 IDEA 的Project Structure-SDKs中依然可以导入并使用 JDK 8。因此如果只是为了应用开发不一定非要折腾系统全局变量直接在 IDE 里配置更安全。**构建工具Maven/Gradle会读取JAVA_HOME**如果你在命令行运行mvn clean packageMaven 会严格使用当前系统Path和JAVA_HOME指向的 Java 版本。如果编译报错记得先用java -version检查一下。如果你在切换过程中遇到了版本“卡死”不变的情况可以告诉我这通常是Path变量的顺序问题。