卸载旧版JDK需精准清理注册表项、环境变量、javapath及IDE/构建工具缓存。先用where java、reg query或/usr/libexec/java_home -V摸清现状,再删除冗余PATH、修正JAVA_HOME、清除JavaSoft下各版本子项(含Wow6432Node),最后验证java/javac版本、路径一致性及IDE配置。

卸载旧版 JDK 不能只靠控制面板点几下就完事。真正导致冲突的,是残留的注册表项、环境变量路径、系统目录里的幽灵文件,以及 IDE 和构建工具缓存的旧 SDK。清理的关键不是“删得狠”,而是“删得准”。
先看清系统里到底还剩哪些 JDK
别急着删,先摸清现状:
- Windows:以管理员身份运行命令提示符,执行 where java —— 输出的每条路径,都代表一个还在生效的 java.exe;再执行 reg query "HKEY_LOCAL_MACHINE\SOFTWARE\JavaSoft\JDK" /s 和 reg query "HKEY_LOCAL_MACHINE\SOFTWARE\JavaSoft\Java Development Kit" /s,查看注册表中登记的所有 JDK 版本和 JavaHome 路径
- macOS:终端运行 /usr/libexec/java_home -V,列出所有已注册 JDK;再检查 /Library/Java/JavaVirtualMachines/ 目录下的实际安装包
- Linux(Debian/Ubuntu):用 dpkg -l | grep jdk;(RHEL/CentOS):用 rpm -qa | grep java;手动解压安装的则搜索 /usr/lib/jvm 或 /opt/java
重点清理三类“隐形干扰源”
这些地方不清掉,新 JDK 很可能被无视:
- 删掉 Oracle 自建的 javapath:路径是 C:\Program Files (x86)\Common Files\Oracle\Java\javapath,它会劫持 java/javac 命令。先从 PATH 中删掉该路径,再手动清空整个文件夹
- PATH 中只留 %JAVA_HOME%\bin:把所有硬编码的 JDK bin 路径(如 C:\Program Files\Java\jdk1.8.0_291\bin)全删掉,避免多版本混用
- JAVA_HOME 必须指向 JDK 根目录:值应为 C:\Program Files\Java\jdk-21 这类完整路径,不能带 \bin,也不能指向 JRE 或已删除的目录
精准删注册表,不碰根节点
注册表残留是 Windows 下最常导致 java -version 显示旧版本、IDE 无法识别新 JDK 或 Maven 编译失败的根源:
- 打开 regedit,进入 HKEY_LOCAL_MACHINE\SOFTWARE\JavaSoft\JDK\{版本号}(例如 1.8.0_381),右键删除整个子项
- 同样操作 HKEY_LOCAL_MACHINE\SOFTWARE\JavaSoft\Java Development Kit\{版本号}
- 64 位系统务必检查 Wow6432Node 分支:HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\JavaSoft\JDK\{版本号} 和对应 Java Development Kit 路径——这个分支常被遗漏,却是“明明删了 JDK 却还被识别”的元凶
- ⚠️ 注意:不要删除 JavaSoft 这个父项本身,否则可能影响后续新 JDK 的自动注册
验证是否真干净了
改完环境变量后,必须新开命令行窗口再验证:
- 运行 java -version 和 javac -version,两行输出要完全一致
- 运行 where java,只应返回一条路径,且该路径必须在 %JAVA_HOME%\bin 下
- 检查 echo %JAVA_HOME% 是否真实存在,并与 java -version 的版本匹配
- IDE(IntelliJ/Eclipse/VS Code)需手动刷新或重置 SDK 配置;Maven/Gradle 也要清理本地缓存,避免继续引用已删除的 JDK


















