本质是系统找不到java.exe,问题出在环境变量路径指向、加载时机或冲突覆盖;需确认java_home指向jdk根目录而非bin目录,path中含%java_home%\bin且位置靠前,关闭并重开终端执行where java验证路径优先级。

Windows 10配置JDK 21后命令行仍报“java不是内部或外部命令”,本质是系统找不到java.exe可执行文件,问题不出在JDK安装本身,而出在环境变量的路径指向、加载时机或冲突覆盖上。
确认JAVA_HOME是否指向根目录而非bin目录
打开系统环境变量设置 → 在“系统变量”中找到JAVA_HOME → 检查变量值是否为JDK安装的根目录(如D:\environment\JDK\jdk-21.0.10),而非D:\environment\JDK\jdk-21.0.10\bin。
如果填了bin路径,所有依赖JAVA_HOME的工具(Maven、Gradle、Burp Suite)都会失败——因为它们会自动拼接%JAVA_HOME%\bin\java.exe,而你给的是D:\...\bin\bin\java.exe,路径直接越级错两层。
检查Path中是否真正包含%JAVA_HOME%\bin
在同一个“系统变量”列表中,找到Path → 点击编辑 → 查看是否存在一项内容为%JAVA_HOME%\bin。
注意:不能写成绝对路径(如C:\Program Files\Java\jdk-21\bin),否则JAVA_HOME变更后Path就失效;也不能漏掉%符号,写成JAVA_HOME\bin会被当成字面路径查找。
若存在多个Java相关路径,确保%JAVA_HOME%\bin排在最前面或至少不被其他java.exe覆盖——比如Oracle MSI安装器会悄悄往Path开头塞C:\Program Files\Common Files\Oracle\Java\javapath,它里面三个.exe(java、javaw、javaws)会劫持所有java调用。
验证环境变量是否已加载到当前终端
第一步:关闭所有已打开的CMD/PowerShell窗口;
第二步:以管理员身份重新打开一个新的PowerShell;
第三步:依次执行以下命令:
echo %JAVA_HOME% → 应输出你设置的JDK根路径;
echo %PATH% → 手动搜索输出中是否含%JAVA_HOME%\bin字符串;
where java → 若返回多行,说明有多个java.exe共存,优先取第一行路径;若只返回Oracle javapath下的路径,说明它正在拦截;
【关键动作】 如果where java指向C:\Program Files\Common Files\Oracle\Java\javapath\java.exe,请直接重命名该目录(如改为javapath_off),这是MSI安装包埋下的典型陷阱。
排查用户变量与系统变量的混用冲突
方法一:只改系统变量,彻底忽略用户变量里的JAVA_HOME或Path项;
方法二:若必须使用用户变量,请确保用户Path中没有重复添加旧JDK路径(如C:\Program Files\Java\jdk-8\bin),否则即使系统Path正确,用户Path里更靠前的旧路径也会优先命中;
方法三:运行set JAVA_HOME和set Path,对比CMD输出的变量值与环境变量窗口中看到的是否一致——不一致说明某处被脚本或注册表动态覆盖。
绕过环境变量,用绝对路径启动验证JDK有效性
第一步:进入你的JDK安装目录下的bin子目录(例如D:\environment\JDK\jdk-21.0.10\bin);
第二步:双击运行java.exe(会闪退,但证明它能执行);
第三步:在该目录下按住Shift + 右键 → “在此处打开Powershell窗口” → 输入.\java -version;
如果这一步成功输出版本号,说明JDK本身完好,问题100%出在环境变量链路上,无需重装JDK。











