卸载旧版JDK后注册表残留是导致java-version显示旧版本、IDE无法识别新JDK或Maven编译失败的主因;须精准删除HKEY_LOCAL_MACHINE\SOFTWARE\JavaSoft\JDK及Java Development Kit下对应旧版本子项(含Wow6432Node分支),并清除System32/SysWOW64中的幽灵java.exe,严禁删除JavaSoft根节点。

卸载旧版 JDK 后注册表残留是 Windows 下最常导致 java -version 显示旧版本、IDE 无法识别新 JDK 或 Maven 编译失败的根源。清理注册表不能靠“删整个 JavaSoft”,而要精准定位、只删对应旧版本项。
先确认哪些 JDK 版本注册在系统里
以管理员身份打开命令提示符,运行:
reg query "HKEY_LOCAL_MACHINE\SOFTWARE\JavaSoft\JDK" /s
reg query "HKEY_LOCAL_MACHINE\SOFTWARE\JavaSoft\Java Development Kit" /s
这两条命令会列出所有已登记的 JDK 版本及其 JavaHome 路径。对比你已手动删除的安装目录(如 C:\Program Files\Java\jdk1.8.0_381),找出那些 JavaHome 指向已不存在路径的旧版本项——这些就是必须清理的残留。
只删具体版本子项,不碰 JavaSoft 根节点
打开注册表编辑器(regedit),逐个进入以下路径:
立即学习“Java免费学习笔记(深入)”;
-
HKEY_LOCAL_MACHINE\SOFTWARE\JavaSoft\JDK\{版本号}(例如1.8.0_381) HKEY_LOCAL_MACHINE\SOFTWARE\JavaSoft\Java Development Kit\{版本号}
右键点击对应旧版本的整个子项 → “删除”。⚠️ 注意:不要删除 JavaSoft 这个父项本身,否则可能影响后续新 JDK 的自动注册或 Oracle 安装包行为。
Java项目代码review工具。分析Git变更+完整调用链路上下文,推断业务需求,进行多维度评分和分类汇总,生成完整PRD文档。包含细粒度Java代码审查清单(Null安全、异常处理、Streams、并发、equals/hashCode、资源管理、API设计、性能、MyBatis/ORM、事务边界、SQL/DD...
如果某版本在两个路径下都存在登记,两个都要删;若只在一个路径下有,就只删那一个。
别忽略 Wow6432Node(64位系统必查)
在 64 位 Windows 上,32 位 JDK 可能注册在:
HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\JavaSoft\JDK\{版本号}
HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\JavaSoft\Java Development Kit\{版本号}
同样只删已确认废弃的版本子项。这个分支常被遗漏,却是很多“明明删了 JDK 却还被识别”的元凶。
额外检查:System32 中的幽灵 java.exe
某些 JDK 安装程序(尤其是较老版本)会把 java.exe、javaw.exe 复制到系统目录:
C:\Windows\System32\java.exeC:\Windows\SysWOW64\java.exe
它们优先级极高,即使 PATH 和 JAVA_HOME 都设对了,也可能被调用。用管理员权限运行 CMD,执行:
del /f /q "%windir%\System32\java.exe"
del /f /q "%windir%\SysWOW64\java.exe"
del /f /q "%windir%\System32\javaw.exe"
del /f /q "%windir%\SysWOW64\javaw.exe"
删前可先用 where java 确认是否真有这些文件被调用。

















