系统命令提示符与STS终端Java版本不匹配问题
Java版本不一致的根本原因
这个现象和你当前所在的项目文件夹路径没有关联,核心是两个终端的PATH环境变量优先级差异,叠加Windows系统的命令查找规则共同导致的:
- Windows命令行执行任意可执行命令时,会严格按照
PATH环境变量中条目的先后顺序逐目录检索,找到第一个匹配java.exe的目录后,就会直接执行对应程序,不会继续向后遍历其他路径。 - Spring Tool Suite启动自身进程时,会将支撑STS本体运行的内置OpenJDK 14.0.2路径,前置插入到进程私有环境的
PATH变量最前端——对比两段echo %PATH%的输出就能直观看到差异:STS终端的PATH最开头两个条目,是STS安装目录下内置JRE的bin/server、bin路径,这个位置比你全局配置的JDK11路径优先级高得多,因此执行java -version时,最先匹配到的是STS自带JDK14的java.exe,自然输出OpenJDK14的版本信息。 - STS的这套PATH注入逻辑是进程级私有的,不会修改系统全局的环境变量配置:系统命令提示符启动时读取的是全局PATH,最开头就是你手动配置的JDK11路径,因此会正常输出Oracle JDK11的版本信息。
设计背景:STS4采用这种前置注入内置JDK路径的方式,是为了隔离自身运行依赖的JVM版本,避免STS本体和用户全局安装的Java版本不兼容导致启动异常。
内容的提问来源于stack exchange,提问作者jkfe
相关产品推荐
相关产品推荐

