卸载旧JDK需彻底清理四部分:①删安装目录及缓存;②精准清除注册表中对应版本项;③删除旧JAVA_HOME和Path中相关路径并重设;④同步更新IDE和Maven/Gradle配置。

卸载旧 JDK 不是点几下“卸载”就完事,关键在清理干净——否则新 JDK 可能不生效、java -version 显示旧版、IDE 报“no JDK specified”,甚至 Maven 编译失败。
先摸清现状,再动手删
别急着删文件或改注册表。先确认系统里到底装了哪些 JDK,它们在哪、谁在用:
-
Windows:
- 打开命令提示符,运行
where java→ 列出所有java.exe路径(每个都对应一个可能残留的 JDK) - 运行
reg query "HKEY_LOCAL_MACHINE\SOFTWARE\JavaSoft\JDK" /s→ 查看注册表登记的所有 JDK 版本和JavaHome - 检查
echo %JAVA_HOME%,看它指向的目录是否存在
- 打开命令提示符,运行
-
macOS:
- 终端执行
/usr/libexec/java_home -V→ 显示所有已注册 JDK(含未在 PATH 中的) -
ls /Library/Java/JavaVirtualMachines/→ 看物理目录是否匹配
- 终端执行
-
Linux(deb/rpm):
-
dpkg -l | grep jdk或rpm -qa | grep java - 手动安装的则检查
/usr/lib/jvm、/opt/java或家目录下的jdk-*文件夹
-
Windows 彻底清理四步走
控制面板卸载只是起点,真正要清的是这四块:
-
删安装目录
- 进入
where java输出的每个路径的上层目录(如C:\Program Files\Java\jdk-11.0.18),整个文件夹删除 - 同时检查
C:\Program Files (x86)\Java\和用户目录AppData\LocalLow\Sun\Java等缓存位置
- 进入
-
清注册表(精准删,不碰整个 JavaSoft)
- 运行
regedit,定位到:-
HKEY_LOCAL_MACHINE\SOFTWARE\JavaSoft\JDK\{版本号} -
HKEY_LOCAL_MACHINE\SOFTWARE\JavaSoft\Java Development Kit\{版本号}
-
- 只删对应旧版本的子项,不要删整个
JavaSoft项(否则影响 JRE 或其他 Java 工具)
- 运行
-
清环境变量
- 进「系统属性 → 高级 → 环境变量」:
- 删除旧的
JAVA_HOME变量 - 在
Path中移除所有含jdk-xx\bin的条目(包括%JAVA_HOME%\bin和绝对路径)
- 删除旧的
- 进「系统属性 → 高级 → 环境变量」:
-
重设并验证
- 新建
JAVA_HOME,值为新 JDK 根目录(如C:\Program Files\Java\jdk-21,不含\bin) -
Path中只加一条:%JAVA_HOME%\bin -
必须新开命令行窗口,运行:
-
echo %JAVA_HOME%→ 确认路径存在 -
java -version和javac -version→ 两者版本一致且为新版本
-
- 新建
macOS / Linux 分类处理
-
macOS(.pkg 安装):
-
sudo rm -rf /Library/Java/JavaVirtualMachines/jdk-*.jdk - 然后立即运行
/usr/libexec/java_home -V,确认该版本已消失
-
-
macOS(Homebrew):
-
brew list | grep openjdk查包名,如openjdk@17,再brew uninstall openjdk@17
-
-
Linux(tar.gz 解压安装):
- 直接
rm -rf /opt/jdk-17或对应路径 - 检查
/etc/profile、~/.bashrc、~/.zshrc中是否有export JAVA_HOME=,删掉或更新
- 直接
别漏掉 IDE 和构建工具
它们不会随系统卸载自动同步:
-
IntelliJ / Eclipse / CLion:
- 进
File → Project Structure → SDKs,手动删掉所有指向已删除路径的 JDK 条目 - 新项目默认 SDK 别选错,建议统一设为“Project SDK”并锁定语言级别
- 进
-
Maven / Gradle:
- 运行
mvn -v或gradle --version,确认其实际使用的 Java 路径与java -version一致 - 若不一致,检查
MAVEN_OPTS或JAVA_HOME是否被脚本硬编码覆盖
- 运行
不复杂但容易忽略
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南











