Java -version 显示旧版本是因PATH中旧JDK路径优先,需检查where java、确保JAVA_HOME指向新JDK根目录且%JAVA_HOME%\bin在PATH最前,重开终端;javac缺失说明安装不完整,应重装并勾选开发工具;IDE需单独配置SDK;macOS需在~/.zshrc中设置JAVA_HOME。

Java -version 显示旧版本,但已安装新JDK
这是路径冲突最典型的表现:系统仍从 PATH 中靠前的旧 JDK(比如 C:\Program Files\Java\jdk1.8.0_202\bin)调用 java 和 javac,而新 JDK(如 jdk-17.0.1)虽已解压或安装,却未被纳入环境变量优先级。
- 检查当前生效的 Java 路径:
where java(Windows)或which java(macOS/Linux) - 确认
JAVA_HOME指向新 JDK 根目录(不含\bin),例如C:\Program Files\Java\jdk-17.0.1 -
PATH中必须包含%JAVA_HOME%\bin(Windows)或$JAVA_HOME/bin(macOS/Linux),且该条目要放在所有其他 Java 相关路径之前 - 修改后务必重启终端或命令行窗口——CMD/PowerShell 不继承已启动进程的环境变量变更
安装 JDK 后 javac 命令不可用
根本原因不是 JDK 没装好,而是 javac 仅存在于 JDK 的 bin 目录中,而 JRE 或某些“精简版”安装包不带编译器。常见于误下 JRE、双击运行了 jdk-xx_windows-x64_bin.exe 但勾选了“Public JRE”并取消了“Development Tools”(旧版 Oracle 安装器)。
- 验证是否真有
javac.exe:进入你认为的 JDK 安装目录 →bin子目录,看是否存在javac.exe(Windows)或javac(macOS/Linux) - 若缺失,重装 JDK 并确保勾选全部开发组件;推荐直接下载压缩包版(.zip/.tar.gz),解压即用,无安装器陷阱
- 别依赖注册表或控制面板里的“已安装程序”列表判断——Oracle 安装器可能只写了个 JRE,JDK 实际没落地
IDE(IntelliJ / Eclipse)识别不到新 JDK
IDE 不读系统 JAVA_HOME 或 PATH,而是维护自己的 SDK 配置。即使终端里 java -version 正确,IDE 仍可能卡在旧版本甚至报 “No JDK specified”。
- IntelliJ:File → Project Structure → Platform Settings → SDKs → “+” → Add JDK → 选择新 JDK 根目录(同
JAVA_HOME路径) - Eclipse:Preferences → Java → Installed JREs → “Add…” → Standard VM → Next → JRE home 选新 JDK 根目录
- 注意:项目级别的 JDK 版本(Project SDK / Compiler compliance level)需单独设置,和全局 SDK 不联动
- 改完后重启 IDE——部分版本不会热更新 JDK 列表
Mac 上 zsh 下 JAVA_HOME 设置失效
macOS Catalina 及之后默认用 zsh,但很多教程仍教你在 ~/.bash_profile 里写 export JAVA_HOME=...,这完全不生效。
立即学习“Java免费学习笔记(深入)”;
- 查当前 shell:
echo $SHELL,确认是/bin/zsh - 把配置加到
~/.zshrc(用户级)或~/.zprofile(登录 shell 级),例如:export JAVA_HOME=$(/usr/libexec/java_home -v 17)
-
/usr/libexec/java_home -V可列出所有已知 JDK,避免硬编码路径 - 执行
source ~/.zshrc使配置立即生效,再开新终端验证$JAVA_HOME
org.gradle.java.home 强制指定,Maven 依赖 JAVA_HOME,而 Docker 构建则完全隔离主机环境——这些上下文切换时,光靠终端里 java -version 正确,掩盖不了真实运行时的错配。










