卸载macos jdk需四步:先用/usr/libexec/java_home -v和ls /library/java/javavirtualmachines/确认所有版本及路径;再删对应.jdk目录、系统插件(javaappletplugin.plugin等)、用户缓存(~/library/application support/oracle/java等)及环境变量;最后验证java -version报错且java_home -v无残留。

卸载 macOS 上的 JDK,光删 /Library/Java/JavaVirtualMachines/ 下的 jdk 文件夹远远不够——残留的插件、偏好设置、用户缓存和环境变量会继续干扰后续 Java 工具链行为,比如 java -version 仍显示旧版本、/usr/libexec/java_home -V 列出已删除的 JDK、甚至 IDE(如 IntelliJ)启动时卡在“Loading JDK”。
确认当前 JDK 安装路径和版本
别凭记忆删,先看系统里到底装了什么:
- 运行
/usr/libexec/java_home -V查看所有注册的 JDK(包括已删但未清理注册表的“幽灵版本”) - 运行
ls /Library/Java/JavaVirtualMachines/看实际存在的 jdk 目录(注意:有些 JDK 安装后不会自动注册到java_home,但目录还在) - 检查
java -version和javac -version输出——如果还能执行,说明至少有一个 runtime 仍被 shell 找到
删除 JDK 主安装目录
这是最基础一步,但必须带完整路径和精确文件夹名:
- 进入
/Library/Java/JavaVirtualMachines/,用ls确认要删的目录名,例如jdk-17.0.2.jdk或zulu-11.jdk - 执行
sudo rm -rf /Library/Java/JavaVirtualMachines/jdk-17.0.2.jdk(替换为你自己的目录名) - 注意:不要漏掉
.jdk后缀,也不要误删整个JavaVirtualMachines文件夹(可能含其他 JDK) - 如果用 Homebrew 安装过(如
brew install openjdk@17),优先用brew uninstall openjdk@17,再手动清理残留
清理系统级 Java 插件与控制面板
这些是 Oracle JDK 安装器偷偷塞进系统的位置,不删会导致偏好设置异常、浏览器插件残留、甚至触发自动更新弹窗:
sudo rm -rf /Library/Internet\ Plug-Ins/JavaAppletPlugin.pluginsudo rm -rf /Library/PreferencePanes/JavaControlPanel.prefPanesudo rm -f /Library/Preferences/com.oracle.java.JavaPreferences.plist
注意空格转义:Internet\ Plug-Ins 中的反斜杠不能省;PreferencePanes 不是 PreferencesPanes(常见拼写错误)。
清除用户级 Java 配置与缓存
即使 root 层面删干净了,当前用户目录下仍有 Oracle 或 OpenJDK 写入的配置,它们会影响 java_home 解析、IDE 自动探测、甚至 Maven 构建行为:
rm -rf ~/Library/Application\ Support/Oracle/Java/rm -rf ~/Library/Caches/com.oracle.java.JavaAppletPluginrm -f ~/Library/Preferences/com.oracle.java.JavaPreferences.plistrm -f ~/Library/Preferences/com.apple.java.util.prefs.plist- 检查
~/.bash_profile、~/.zshrc或~/.profile,删掉类似export JAVA_HOME=$(/usr/libexec/java_home -v 17)或硬编码路径的行 - 改完后执行
source ~/.zshrc(macOS Catalina 及之后默认用 zsh)
容易忽略的是:某些 IDE(如 older IntelliJ)会在 ~/Library/Caches/JetBrains/ 下缓存 JDK 路径,重启 IDE 前建议清空对应子目录或重置设置。
真正“干净”的标志不是目录为空,而是 /usr/libexec/java_home -V 不再列出已删版本,且 java -version 报错 command not found 或明确提示 “No Java runtime present”。任何残留的 plist、cache 或环境变量都可能让后续安装的新 JDK 行为异常——尤其是多版本共存时,顺序和注册状态比文件是否存在更重要。











