Java在Windows系统中卸载重装环境的正确方式

彻底卸载Java需清理注册表、环境变量、缓存目录及旧JDK残留;重装前须确认JAVA_HOME和PATH无旧路径,推荐下载免安装ZIP版JDK并手动配置;IDE和构建工具需单独更新SDK引用。

Java 在 Windows 上卸载重装不是删掉文件夹就完事——残留的注册表项、环境变量、缓存目录和旧版本 JDK/JRE 共存会直接导致 java -version 显示错乱、IDE 找不到 SDK、Maven 编译报 Unsupported class file major version 等问题。

彻底卸载 Java:不止是控制面板里点“卸载”

Windows 控制面板里的“程序和功能”只卸载了通过 MSI 安装包安装的 JDK/JRE,但以下内容不会被自动清理:

  • JAVA_HOMEPATH 中残留的旧路径(比如指向 C:\Program Files\Java\jdk-11.0.2
  • 注册表中 HKEY_LOCAL_MACHINE\SOFTWARE\JavaSoft 下的旧版本配置(影响 java.exe 自动路由)
  • 用户目录下的 %USERPROFILE%\AppData\LocalLow\Sun\Java%USERPROFILE%\AppData\Roaming\Mozilla\Java(部分浏览器插件或旧 JNLP 缓存)
  • 系统级临时目录中的 C:\ProgramData\Oracle\Java(JDK 安装器日志和元数据)

建议操作:

  • 先在控制面板卸载所有带 “Java” 或 “JDK” 字样的条目
  • 手动删除 C:\Program Files\Java\ 下全部子目录(包括 jre*jdk*
  • regedit 删除 HKEY_LOCAL_MACHINE\SOFTWARE\JavaSoftHKEY_CURRENT_USER\SOFTWARE\JavaSoft(若存在)
  • 清空 %USERPROFILE%\AppData\LocalLow\Sun\JavaC:\ProgramData\Oracle\Java

重装前必须检查的三个环境变量

即使你刚清空了 C:\Program Files\Java\,如果 PATH 里还留着旧 bin 路径,终端一打开就会优先加载旧 java.exe,后续安装的新 JDK 彻底失效。

打开命令提示符,执行:

echo %JAVA_HOME%
echo %PATH%

确认输出中不含任何 java 相关路径。若仍有残留,需手动编辑系统环境变量:

  • JAVA_HOME:应设为新 JDK 解压/安装后的根目录,例如 C:\Program Files\Java\jdk-21(注意:不带 \bin
  • PATH:添加 %JAVA_HOME%\bin,不要硬编码完整路径(否则换 JDK 版本时要反复改)
  • 删掉 PATH 中所有其他 javajrejdk 相关条目(尤其警惕 IDE 自动加的路径,如 IntelliJ 的 bin\launcher 前置项)

下载与安装 JDK 的关键选择

官网(https://adoptium.net/ 或 https://sdkman.io/jdks)比 Oracle 官网更推荐——前者提供免安装 ZIP 包(jdk-21+35_windows-x64_bin.zip),后者 MSI 安装器仍会往注册表写 JavaSoft,且默认装到 C:\Program Files\Java\ 下容易权限出问题。

实操建议:

  • 优先下载 .zip 格式 JDK(如 Eclipse Temurin),解压到无空格、无中文路径,例如 D:\jdk-21
  • 避免使用 C:\Program Files\:Windows 对该目录有虚拟化保护,某些工具(如 Gradle Wrapper)可能因权限失败静默降级到旧 JDK
  • 不要勾选 “Add to PATH” 或 “Set JAVA_HOME” 的安装选项(哪怕 MSI 提供)——自己配才可控
  • 装完立刻验证:
    java -version
    javac -version
    where java
    输出应三者一致,且 where java 返回唯一路径,指向你刚设的 %JAVA_HOME%\bin\java.exe

IDE 和构建工具的隐性依赖

IntelliJ / Eclipse / VS Code 的 Java 插件、Maven / Gradle 默认不会读取系统 JAVA_HOME,它们各自维护 SDK 列表。重装 JDK 后,这些工具大概率仍在用旧版本,编译输出却显示“已更新”,极易误判。

必须手动刷新:

  • IntelliJ:File → Project Structure → Project → Project SDK → 点 “+” 添加新 JDK 根目录(选 D:\jdk-21,不是 bin 子目录)
  • Maven:检查 %MAVEN_HOME%\conf\settings.xml 或项目 pom.xml 中是否有 8 类硬编码,它不决定运行时 JDK,但会干扰编译目标字节码版本
  • Gradle:查看 gradle.properties 是否有 org.gradle.java.home,如有,需指向新 JDK 路径
  • VS Code:Java Extension Pack 会扫描 JAVA_HOME,但首次启动后会缓存,需重启窗口或执行命令 “Java: Configure Java Runtime”

最隐蔽的问题是:CMD/PowerShell 里 java -version 正确,但 IDE 终端里仍是旧版本——因为 IDE 的终端继承的是它自己的环境变量,不是系统 Shell 的。