You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Server2016下JDK与JRE的java.exe差异及运行报错排查

解答:JDK与JRE的java.exe差异及报错原因

一、JDK与JRE中java.exe的核心差异

这两个java.exe都是JVM的启动器,但定位和运行逻辑完全不同:

  • JDK的java.exe:面向开发场景的启动器,会额外加载开发环境相关的配置、工具类路径,还会检查一些开发特有的目录和旧机制。简单说,它带着开发环境的“附加逻辑”,启动流程更复杂。
  • JRE的java.exe:纯运行时的启动器,只负责加载运行Java程序必需的核心类库和配置,不会处理开发相关的额外检测逻辑,启动逻辑更轻量化、更专注于运行本身。

举个直观的例子:JDK的java.exe不仅能运行程序,还能关联编译工具(javac)、调试工具的路径;而JRE的java.exe只关心怎么把你的jar/class文件跑起来,其他一概不管。

二、JDK的java.exe报错的原因

你的报错信息已经点明了核心问题:

return (<JAVA_HOME>/lib/ext exists, extensions mechanism no longer supported; Use -classpath instead. Error: Could not create the Java Virtual Machine.
)

从Java 9开始,Oracle就彻底废弃了lib/ext这个旧扩展机制(早年用来添加第三方类库的方式),到Java 10时完全移除了对它的支持。而你的JDK安装目录(C:\java)里恰好存在lib/ext目录,JDK的java.exe启动时会主动检测这个目录,发现后直接抛出废弃提示,进而导致JVM启动失败。

至于JRE的java.exe能正常运行,是因为JRE的启动器根本不会去检测JDK特有的lib/ext目录——它的运行时逻辑里没有这个检测步骤,所以即使JDK目录下有这个目录,你进入JRE的bin目录运行时,完全不会触发这个检查,自然能正常显示版本。

三、快速解决方法

  • 删除JDK目录下的lib/ext文件夹:Java 10已经不支持这个机制了,留着只会引发冲突,直接删掉即可。
  • 调整PATH顺序:确保C:\java\bin排在C:\Program Files (x86)\Common Files\Oracle\Java\javapath前面,避免系统调用到冲突的Java启动器。
  • 验证效果:删除目录后,打开新的命令行窗口(一定要开新窗口,避免PATH缓存影响),执行java -version,应该就能正常显示JDK 10.0.1的版本信息了。

内容的提问来源于stack exchange,提问作者NamedArray

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.29 08:20:59