必须先查清所有已安装JDK版本及路径再卸载:Windows查注册表和Java目录,macOS用/usr/libexec/java_home -V,Linux手动检查常见路径;卸载需同步清理安装目录、注册表(Windows)、环境变量及IDE/构建工具配置。

确认当前系统中安装的JDK版本和路径
卸载前必须先搞清哪些JDK实际被安装、是否正在被IDE或构建工具使用。Windows下常通过java -version和where java查默认JDK,但这两个命令只反映PATH中的首个匹配项,容易漏掉静默安装的旧版本。
- Windows:打开命令提示符,运行
reg query "HKEY_LOCAL_MACHINE\SOFTWARE\JavaSoft\Java Development Kit" /s
查注册表中所有JDK条目;同时检查C:\Program Files\Java\和C:\Program Files (x86)\Java\目录 -
macOS:运行
/usr/libexec/java_home -V
(注意大小写),它会列出所有通过官方安装包注册的JDK,包括未出现在$PATH里的 - Linux:通常无全局注册中心,需手动检查
/usr/lib/jvm/、/opt/java/、用户家目录下的jdk-*文件夹
Windows下彻底删除JDK安装目录和注册表项
仅删C:\Program Files\Java\jdk-xx目录是不够的——Oracle JDK安装器会在注册表写入配置,后续安装新JDK可能复用旧路径或触发冲突。手动清理注册表前请备份(导出对应键值)。
- 删除整个JDK安装目录,例如
C:\Program Files\Java\jdk-8u291 - 删除注册表项:
HKEY_LOCAL_MACHINE\SOFTWARE\JavaSoft\Java Development Kit\1.8.0_291(版本号需严格匹配) - 检查并清理环境变量:
JAVA_HOME是否仍指向已删路径;PATH中是否含%JAVA_HOME%\bin或绝对路径如C:\Program Files\Java\jdk-8u291\bin - 注意:OpenJDK构建(如Adoptium、Amazon Corretto)通常不写注册表,删目录即可,但也要同步清理
JAVA_HOME和PATH
macOS上移除JDK需兼顾Homebrew、SDKMAN!和原生安装包
macOS的JDK来源混杂,不同渠道安装方式差异大,卸载逻辑完全不同。尤其要注意/Library/Java/JavaVirtualMachines/ 是系统级JDK存放位置,而~/.sdkman/candidates/java 属于SDKMAN!私有管理。
- 原生.pkg安装(Oracle/Adoptium官网下载):直接删对应目录,例如
sudo rm -rf /Library/Java/JavaVirtualMachines/jdk-11.0.18.jdk
- Homebrew安装(
brew install openjdk@11):必须用brew uninstall openjdk@11
,否则只删目录会导致brew doctor报错 - SDKMAN!安装:运行
sdk uninstall java 11.0.18-tem
(版本标识以sdk list java输出为准),不要手动删~/.sdkman/candidates/java子目录 - 验证:执行
/usr/libexec/java_home -V
,确保目标版本不再出现
Linux清理后务必重置JAVA_HOME和shell配置
Linux没有统一安装机制,但用户常在~/.bashrc、~/.profile或/etc/environment里硬编码JAVA_HOME。旧JDK删完却不改配置,会导致java命令失效或Maven/Gradle编译失败。
立即学习“Java免费学习笔记(深入)”;
- 搜索所有shell配置文件:
grep -r "JAVA_HOME" ~/.bash* ~/.zsh* /etc/environment 2>/dev/null
- 逐个编辑,注释或删除类似
export JAVA_HOME=/usr/lib/jvm/java-8-openjdk-amd64的行 - 如果用
update-alternatives管理JDK(常见于Debian/Ubuntu),运行sudo update-alternatives --config java
确认当前选中项是否还存在,必要时用--remove清理已失效链接 - 生效新配置:
source ~/.bashrc
(或对应shell文件),再运行echo $JAVA_HOME和java -version验证
彻底卸载JDK最难的不是删文件,而是找到所有隐式依赖点:IDE的Project SDK设置、CI脚本里的JDK_VERSION变量、Dockerfile中硬编码的openjdk:8-jre-slim镜像……这些不会因本地JDK删除而自动更新。










