JDK 能编译也能运行,JRE 只能运行;javac 找不到说明只装了 JRE;装了 JDK 却提示缺运行环境是因 IDE 或注册表指向错误 JRE;服务器仅运行 .jar 用 JRE 即可,调试需 JDK;Java 11+ 官方不再单独提供 JRE。
JDK 能编译也能运行,JRE 只能运行——这是你装哪个、怎么配环境的唯一判断依据。
你在命令行敲 javac HelloWorld.java,却收到 'javac' is not recognized as an internal or external command,基本可以断定:系统 PATH 指向的是 JRE 目录,或者根本没装 JDK。
javac.exe,只有 java.exe 和 jvm.dll
javac 一定在 C:\Program Files\Java\jdk-21.0.2\bin\ 下bin 文件夹里有没有 javac.exe;再查 PATH 环境变量是否包含该路径常见于 IDE(如 IntelliJ 或 Eclipse)启动失败、或双击 .jar 文件报错。这不是缺 JRE,而是 JVM 启动参数或默认 JRE 配置指向了错误位置。
jdk-21.0.2\jre\),但某些旧版工具会优先读取注册表或系统级 JRE(如 C:\Program Files\Java\jre1.8.0_391\)Project Structure → SDKs 里若选了 JRE 而非 JDK,就无法识别源码依赖和注解处理器
.jar 时,Windows 默认用注册表中 HKEY_LOCAL_MACHINE\SOFTWARE\JavaSoft\Java Runtime Environment 指定的 JRE,哪怕你 PATH 里是 JDK只运行 Spring Boot 打包好的 .jar 文件,JRE 就够用;但如果你要在服务器上热编译、用 jstack 查线程、或跑 jvisualvm 分析内存,就必须装 JDK。
jlink 自定义最小运行时镜像
java 命令,但无 javac
真正容易被忽略的点是:JDK 中的 java 命令,实际调用的是它自带 jre\bin\ 下的可执行文件,而不是你自己 PATH 里混进去的另一个 JRE —— 所以别以为 PATH 里有 java 就万事大吉,javac 和 java 必须来自同一套 JDK 才能保证版本一致、类库兼容。