VSCode中配置Java必须要JDK17+吗

结论:NO you don't!

问题引入

产生题目中的这个疑问大概率是因为,在安装有关Java的插件后在VSCode中弹出了下图的提示:

但提示只是说 Java Language Server 需要 JDK 17+ ,从下面段落的描述中,还是可以通过'配置'来使用较老版本的Java。

问题探索

1、报错出自哪里 VSCode建议安装包含多个插件的Extension Pack,从提示中给出的链接...github.com/redhat-developer /vscode-java/wiki...可以看出来,是Language Support for Java™ by Red Hat插件给出的提示(另外几个插件也需要此插件的支持)

访问提示中的链接,可以看到下图的解释:

这里看到第一行说这里的介绍主要适用于Universal Version,就需要了解一下什么是Universal Version。点击蓝色的链接,跳转到了页面上方,可以看到Universal Version是相对于Plantform Versions

2、Universal VersionPlantform Versions

Since vscode-java 1.2.0, it publishes platform specific versions to Microsoft VS Code marketplace. The platform versions have JRE 17 embedded in Java extension for platforms For some other extension marketplaces (e.g. Open VSX), they haven't supported platform specific versions yet and will still use the universal version without embedded JRE.

从上述段落可以总结出,从VSCode插件市场下载的是Plantform Version,它有内嵌的Java 17(用来启动Java Language Server);从其它插件市场下载的是Universal Version,它没有内嵌的JDK 17。

自己配置时是通过VSCode插件市场下载的,所以是Plantform Version,而刚才跳转的链接适用的是Universal Version,并不符合自己的版本。卡在这里不知道接下来再怎么分析,只能再回到本文1、处的介绍

3、Universal Version是如何处理的 从这里的介绍可以了解到m2e team将Java 17作为其2022年9月发布的最低Java版本要求。开发者使用m2e core components来给Java Language Server (Eclipse JDT.LS)提供Maven支持,这就要求language server必须在Java 17及以上的环境。

vscode-java依赖于Eclipse JDT.LS,所以vscode-java也要满足和Eclipse JDT.LS一样的环境条件。但vscode-java使用依赖于更前沿的JDT特性的JDT.LS构建。

简单来说 ,就是Language Support for Java™ by Red Hat插件需要Java Language Server (Eclipse JDT.LS),后者又需要m2e core components提供的Maven支持,而m2e又需要JDK 17+。所以才要求安装JDK 17+。

4、Project JDKs 在About the Java 17 requirement介绍的上方有介绍配置Project JDK

a.在usersetting.json中输入下面的内容,可以配置多个JDK环境,"打开"单个文件时会适用default为true的环境。

json 复制代码
"java.configuration.runtimes": [
  {
    "name": "JavaSE-1.8",
    "path": "/path/to/jdk-8",
  },
  {
    "name": "JavaSE-11",
    "path": "/path/to/jdk-11",
  },
  {
    "name": "JavaSE-17",
    "path": "/path/to/jdk-17",
    "default": true
  },
]

b.对于Universal版本,还需要配置java.jdt.ls.java.home

那应该如何配置较早版本的JDK

通过上面的分析发现,Configure Runtime for Language Server提示的出现,是因为在setting.json中进行了"多余"的配置(最初配置时,糅合了很多博客的配置过程)。

把配置恢复到原点...

其实只要配置好JDK 1.8的环境变量,安装插件包后,无需任何配置就可以正常编译:

在编译时发现,会调用本地的JDK 1.8的java命令去编译,打开-cp后的路径发现与当前项目目录结构一模一样。还有很多内容可以探索...

拓展知识

vscode-java:从Language Support for Java™ by Red Hat插件的Github仓库地址/redhat-developer/vscode-java可以看出,vscode-java就是指的插件。从字面看,为vscode提供java支持,就称为vscode-java。

Eclipse JDT.LS:全称Eclipse Java development tools Language Server

m2e team:软件开发组织

Java Tooling JDK 和 Project JDKs:从插件主页看到这两类JDK,通过上面的介绍发现,Tooling JDK就是插件内置的JDK 17(Universal版本需要自己另外配置),Project JDKs是通过java.configuration.runtimes配置,可以通过配置default:true键值对来选择环境

Language Server:举个例子,比如VSCode IDE的对Java的智能补全,另外的IDE也会有对Java的智能补全,但这两者的效果是大同小异的,就可以将这种对语言的支持抽出来。更多的了解还需要查询一些博客

相关推荐
计算机安禾2 天前
【数据结构与算法】第32篇:交换排序(一):冒泡排序
c语言·数据结构·c++·算法·链表·排序算法·visual studio code
海参崴-4 天前
VS2022下载与全面使用指南
visual studio code
计算机安禾5 天前
【数据结构与算法】第25篇:静态查找(一):顺序查找与折半查找
java·开发语言·数据结构·学习·算法·visual studio code·visual studio
formulahendry5 天前
我开发的 ACP Client,被 LangChain 官方推荐了!轻松连上 Claude、Codex、Copilot、OpenClaw 等任意 Agent
visual studio code·vs code·acp
计算机安禾7 天前
【数据结构与算法】第22篇:线索二叉树(Threaded Binary Tree)
c语言·开发语言·数据结构·学习·算法·链表·visual studio code
计算机安禾7 天前
【数据结构与算法】第21篇:二叉树遍历的经典问题:由遍历序列重构二叉树
c语言·数据结构·学习·算法·重构·visual studio code·visual studio
计算机安禾8 天前
【数据结构与算法】第19篇:树与二叉树的基础概念
c语言·开发语言·数据结构·c++·算法·visual studio code·visual studio
DigitalOcean9 天前
教你用Continue/Kilo插件在VS Code里丝滑切换Qwen3与Opus 4.6
claude·visual studio code·vibecoding
计算机安禾9 天前
【数据结构与算法】第17篇:串(String)的高级模式匹配:KMP算法
c语言·数据结构·学习·算法·visual studio code·visual studio·myeclipse
F1FJJ10 天前
AI 编程实战对比:Claude Code vs Trae
图像处理·人工智能·ai作画·golang·visual studio code