ARTICLE DETAIL

资讯详情

深耕郑州网站建设与运营推广的一线实战洞察。

VSCode配置Java开发与运行环境完整指南:多JDK、插件与调试排坑

VSCode配置Java开发与运行环境完整指南:多JDK、插件与调试排坑 折腾 VSCode 跑 Java 这套环境我前前后后重装过七八次。最早那次踩的坑现在想起来还挺好笑机器上装了三个 JDKPATH 里塞了四条路径命令行敲java -version输出的是 8VSCode 里编译却按 17 的语法来报错写着无效的目标发行版我盯着屏幕看了半小时才反应过来是环境变量在打架。所以这篇不打算写成官网文档的复读而是把我这几年在 Windows、macOS、Linux 上配 Java 开发环境与运行环境的实际流程、参数取值、踩坑记录完整摊开重点讲清楚每一步为什么要这么设。如果你是从 IDEA 换过来的老手或者刚开始学 Java 基础、还没绑定编辑器的同学又或者需要在轻量机器、远程服务器上跑 Java 的人这篇基本能覆盖你九成以上的场景。核心无非是 VSCode、Java、开发环境、运行环境、配置这几件事但每个词背后都藏着细节JDK 版本怎么挑、语言服务器跑在哪个 JDK 上、编码在哪几个地方必须对齐、Maven 拉依赖慢怎么办、断点为什么打不中。下面按我实际的配置顺序一步步来能直接抄的地方我会把完整配置贴出来。1. 动手之前先想清楚为什么要用 VSCode 跑 Java1.1 两个工具的真实定位差异很多人默认写 Java 就必须上 IDEA其实这是个历史惯性。IDEA 强在开箱即用的深度索引、重构能力和对 Spring 生态的贴身支持代价是启动慢、内存吃得凶一台 8G 内存的办公本开着它再开浏览器风扇基本就起飞了。VSCode 走的是另一条路本体是个轻量编辑器Java 能力全靠扩展和背后的语言服务器Eclipse JDT Language Server提供内存占用通常只有 IDEA 的三到五成冷启动几秒就能开始敲代码。这个架构差异决定了两者的适用边界。VSCode 的 Java 支持是插件拼装出来的所以每个环节都需要你亲手确认参数IDEA 是整体方案帮你把大部分决定都做完了。换句话说用 VSCode 配 Java 环境你必然会比用 IDEA 多懂一点环境变量的知识——这既是成本也是收益。我自己现在的分工是写大型 Spring Boot 业务系统还是开 IDEA写算法题、刷 Java 基础、写小工具、改开源项目里的单个文件、在服务器上临时调代码一律用 VSCode。理由很简单这些场景不需要复杂重构启动快比功能全更重要。1.2 哪些人适合哪些人建议继续用 IDEA先说适合的几类人。第一类是学生和刚入门的同学机器配置一般学 Java 基础阶段主要写单文件、写算法题VSCode 完全够用而且启动快。第二类是需要频繁在多种语言之间切换的人比如同时写 Java 后端、Python 脚本、前端 Vue一个编辑器全搞定不用开三个 IDE。第三类是远程开发场景代码跑在服务器或者 WSL 里本地只是显示和编辑VSCode 的远程体验目前是同类工具里最顺的。再说劝退的几类。如果你的日常工作就是维护几十个模块的 Maven 多模块工程天天做跨模块重命名、抽取接口、批量重构那 IDEA 的索引和重构能力短期内没法替代。如果你重度依赖 Spring 的配置提示、Bean 依赖图可视化这些功能IDEA 的 Ultimate 版本确实更省心。提示不要抱着用一个编辑器解决所有问题的心态去配环境。工具是拿来解决问题的不是拿来做信仰的。混着用完全没问题我自己就是混着用的。2. 环境准备JDK 和 VSCode 的正确安装姿势2.1 JDK 版本怎么选别只盯着最新Java 的版本节奏是每半年一个特性版本每两年左右出一个长期支持版本LTS。目前实际项目里最常见的几个 LTS 是 8、11、17、21。我的建议很直接新项目用 17 或 21维护老项目才装 811 属于过渡版本除非公司强制要求否则没必要专门为它准备环境。这里有个很多人忽略的点语言服务器自己也需要一个 JDK 来运行而且它对版本的要求往往比你的项目更高。较新版本的 Java 扩展需要 JDK 21 才能启动语言服务器但你完全可以让它去编译一个 target 为 8 的老项目。这两个概念是分开的后文会专门讲怎么配。安装方式上我强烈建议下载压缩包版本Windows 的 zip、macOS/Linux 的 tar.gz而不是可执行安装器原因有三一是压缩包不写注册表、不改系统 PATH删掉就是彻底卸载二是多版本共存时只要解压到不同目录就行不用折腾安装器的卸载流程三是路径可控不会莫名其妙跑到C:\Program Files下面去。解压位置尽量选一个没有空格、没有中文的短路径比如D:\dev\jdk21避免后面命令行和配置文件里因为空格要加引号多出一堆麻烦。2.2 安装路径与 JAVA_HOME 的三个经典坑环境变量这一块是新手翻车最集中的地方我列三个最常见的。第一个坑JAVA_HOME 指向了bin目录。JAVA_HOME 要指向 JDK 的根目录比如D:\dev\jdk21不是D:\dev\jdk21\bin。很多工具Maven、Gradle、各种构建脚本都会拿 JAVA_HOME 去拼接bin/java你多写一层bin它们就找不到可执行文件。第二个坑PATH 里塞了 javapath 转发器。Windows 上用官方安装器装 JDK 时它会往 PATH 最前面插一条C:\Program Files\Common Files\Oracle\Java\javapath里面只有几个转发用的 exe。结果就是你改了 JAVA_HOME但命令行敲java -version还是老版本因为 PATH 顺序上它排在前面。排查方法很简单Windows 下执行where javamacOS/Linux 下执行which -a java把列出来的所有路径挨个看一遍多余的删掉。第三个坑JAVA_HOME 的末尾带分号或反斜杠。Windows 环境变量编辑器里手滑加个分号某些脚本拼接后就会变成D:\dev\jdk21;\bin\java报的错还特别隐晦。改完记得用echo %JAVA_HOME%Windows或echo $JAVA_HOME确认一下实际值。配置顺序我一般是这样先设 JAVA_HOME 指向当前主用版本再在 PATH 里加一条%JAVA_HOME%\binmacOS/Linux 是$JAVA_HOME/bin然后把 PATH 里其它零散的 Java 路径全部删掉。改完之后关掉所有终端窗口重新打开环境变量才会生效——这一点很多人会忘改完在旧终端里测试结论永远是错的。2.3 VSCode 安装与中文界面设置VSCode 安装本身没什么难度但有一个选项值得注意Windows 上建议选用户安装而不是系统安装。用户安装不需要管理员权限装在自己目录下后续自动更新也更少出问题系统安装遇到权限策略比较严的机器更新时经常弹窗失败。装完之后第一件事是设中文界面。打开扩展面板搜索Chinese (Simplified)认准发布者是 Microsoft 的那个官方语言包安装后右下角会弹出重启提示重启后界面就是中文了。如果没生效用CtrlShiftP打开命令面板执行Configure Display Language选择zh-cn再重启一次。紧接着建议装几个与 Java 无关但通用的扩展GitLens看代码提交历史很方便、EditorConfig统一团队缩进风格、Error Lens把错误提示直接显示在行尾省得老去看问题面板。这几个装完后面的开发体感会顺很多。2.4 工作区目录规划这一步听着像废话但实际影响挺大。我的习惯是建一个统一的开发根目录比如D:\workspace下面按项目名分文件夹每个项目文件夹自己是一个独立的 VSCode 工作区。这样做的好处是.vscode/settings.json可以跟着项目走不同项目用不同 JDK 版本时互不干扰。注意不要把所有项目放在同一个父目录然后直接打开父目录当工作区。Java 语言服务器会去扫描工作区下的所有子目录项目一多索引时间能涨到几分钟内存也会被吃满。一个工作区对应一个项目这个原则能省掉后面很多性能问题。3. 插件安装与 settings.json 逐项拆解3.1 Extension Pack for Java 里面到底装了什么搜索Extension Pack for Java发布者是 Microsoft装上它就行。这个包本身是一堆扩展的集合展开看一下会更有底扩展名称作用实际使用频率Language Support for Java提供语法分析、补全、跳转、重构底层是 Eclipse JDT 语言服务器必装核心Debugger for Java断点调试、变量查看、表达式求值必装核心Test Runner for Java在侧边栏跑 JUnit 测试看测试报告高频Maven for Java侧边栏展示 Maven 生命周期和依赖树直接点按钮执行 goal高频Project Manager for Java管理项目、源码根目录、依赖引用中频IntelliCode基于上下文的智能补全排序中频可选装完之后侧边栏会多出一个 Java 项目视图下方出现 Maven 面板和测试面板。第一次打开 Java 文件时右下角会提示正在初始化语言服务器等它跑完代码高亮和补全才会正常。这个过程视机器性能大概几十秒到一两分钟别急着以为装坏了。另外按需再装两个写 Spring Boot 的话装Spring Boot Extension Pack它会带来配置文件补全和 Actuator 端点提示用 Lombok 的话装Lombok Annotations Support for VS Code这个后面单独讲。3.2 语言服务器跑在哪个 JDK 上最容易搞混的一个参数这是全篇我认为最值得记住的一个知识点。VSCode 的 Java 扩展里有两个长得像、作用完全不同的配置java.jdt.ls.java.home指定语言服务器自己运行在哪个 JDK 上。这个 JDK 版本要够新扩展版本越新要求的 JDK 越高。java.configuration.runtimes告诉语言服务器你的项目可以用哪些 JDK 来编译和运行。很多人的困惑是我项目要用 JDK 8但扩展提示 JDK 版本太低本质就是把这两个搞混了。正确做法是用一个较新的 JDK 21 作为语言服务器的运行环境同时把 JDK 8 注册到 runtimes 里供老项目使用两边互不影响。3.3 我常用的 settings.json 完整配置与逐行说明打开命令面板执行Preferences: Open User Settings (JSON)把我这套配置贴进去改成自己的路径。这是用户级配置对所有项目生效如果某个项目要特殊对待就在项目根目录建.vscode/settings.json工作区配置优先级更高。{ java.jdt.ls.java.home: D:\\dev\\jdk21, java.configuration.runtimes: [ { name: JavaSE-1.8, path: D:\\dev\\jdk8 }, { name: JavaSE-17, path: D:\\dev\\jdk17 }, { name: JavaSE-21, path: D:\\dev\\jdk21, default: true } ], java.configuration.maven.userSettings: D:\\dev\\maven\\conf\\settings.xml, maven.executable.path: D:\\dev\\maven\\bin\\mvn.cmd, java.jdt.ls.vmargs: -Xmx2G -Xms256m -XX:UseParallelGC -Dsun.zip.disableMemoryMappingtrue, java.compile.nullAnalysis.mode: automatic, java.saveActions.organizeImports: true, java.debug.settings.hotCodeReplace: auto, java.debug.settings.console: integratedTerminal, editor.formatOnSave: true, files.encoding: utf8, files.autoGuessEncoding: true, files.watcherExclude: { **/target/**: true, **/node_modules/**: true, **/.git/objects/**: true } }逐条说一下理由。java.jdt.ls.java.home指向语言服务器用的 JDK注意 JSON 里 Windows 路径的反斜杠要写成双写。java.configuration.runtimes里的name字段必须按固定格式写JDK 8 要写成JavaSE-1.8不能写1.8或JDK8写错了这个运行时就不会被识别。default: true表示默认用哪个版本同一个配置里只能有一个默认。java.jdt.ls.vmargs控制语言服务器的 JVM 参数默认给的内存偏小中大型项目跑一会儿就卡。给到-Xmx2G是比较稳的取值16G 内存的机器可以直接拉到 3G8G 内存的机器建议维持在 1.5G 以内不然系统整体会开始换页。java.debug.settings.console设成integratedTerminal很重要因为默认的内部控制台不支持键盘输入写Scanner读输入的程序时用默认控制台会直接卡死在那一步这个坑我第一次遇到时排查了很久。files.watcherExclude是性能优化项把target、node_modules这些生成目录排除掉。文件监听器盯着几万个编译产物是纯浪费项目越大越明显。3.4 多 JDK 并存时怎么按项目切换配好 runtimes 之后切换就有两种方式。一种是在命令面板执行Java: Configure Java Runtime界面里能看到已注册的 JDK 列表和当前项目正在用的版本点一下就能改。另一种是直接改项目里的.vscode/settings.json加上一行{ java.configuration.runtimes: [ { name: JavaSE-1.8, path: D:\\dev\\jdk8, default: true } ] }改完之后需要重启语言服务器执行命令面板里的Java: Clean Java Language Server Workspace选重启并清理Restart and delete。这个操作等于把语言服务器的索引缓存清空重建是解决配置改了但没生效的万能手法。提示Maven 项目还有一个隐式规则——如果pom.xml里写了maven.compiler.source它可能覆盖你在 VSCode 里设置的运行时。遇到版本对不上先去 pom 里确认这两个属性再回头看编辑器设置。4. 从零跑通第一个项目裸项目、Maven 项目与调试配置4.1 不用构建工具的裸项目怎么跑起来先建一个最简单的目的是隔离问题。如果裸项目都跑不起来说明是环境层面的问题加 Maven 只会让排查更复杂。新建目录D:\workspace\hello用 VSCode 打开这个文件夹然后新建Hello.javapublic class Hello { public static void main(String[] args) { String name VSCode; System.out.println(Hello, name); for (int i 0; i 3; i) { System.out.println(count i); } } }注意一个新手常犯的错文件名必须和 public 类的类名完全一致包括大小写。写成hello.java或者HELLO.java编译阶段就会直接报错。写完保存类名上方会出现Run | Debug两个小字点 Run 就能在终端看到输出。如果没出现这两个按钮通常是三种情况语言服务器还在初始化等一会儿、文件没被识别成 Java 源码右下角状态栏会显示当前语言模式点一下可以手动切到 Java、或者工作区没有被识别为 Java 项目命令面板执行Java: Clean Java Language Server Workspace重启。裸项目的编译产物默认输出到工作区下的bin目录这个可以在设置里改但对练习来说没必要动。4.2 Maven 项目创建与镜像仓库配置裸项目验证完接下来上 Maven。创建方式有三种命令面板执行Java: Create Java Project然后按提示选 Maven 模板用 Maven 命令mvn archetype:generate或者直接从别处复制一个 pom.xml 过来。Maven 的配置文件在~/.m2/settings.xmlWindows 下是C:\Users\你的用户名\.m2\settings.xml。默认从中央仓库拉依赖国内网络下拉一个稍大的项目能等十几分钟。换成国内镜像源是最有效的优化改完之后再拉依赖速度差别是数量级的。settings mirrors mirror idaliyun-public/id namealiyun public/name urlhttps://maven.aliyun.com/repository/public/url mirrorOfcentral/mirrorOf /mirror /mirrors /settings改完后需要让 VSCode 重新加载 Maven 配置命令面板执行Java: Reload Projects。如果依赖还是拉不动检查两件事java.configuration.maven.userSettings是否指到了这份 settings.xml多模块项目里子模块自己的 pom 有没有额外声明仓库地址把镜像覆盖掉。pom 文件里记得把编码和编译版本写清楚这两个是后面乱码和版本错误的源头properties project.build.sourceEncodingUTF-8/project.build.sourceEncoding maven.compiler.source21/maven.compiler.source maven.compiler.target21/maven.compiler.target /properties用maven.compiler.source/target还是用maven.compiler.release有个小区别release 参数会让编译器同时校验 API 的可用性比如你 target 设 8 却用了 Java 11 才有的方法release 能直接报错拦住你source/target 组合则可能编译通过但运行时报NoSuchMethodError。新项目我一律用 release。4.3 launch.json 调试配置详解第一次点 Debug 时VSCode 会问要不要生成launch.json选是就自动生成在.vscode目录下。自动生成的内容通常够用但有几项值得手动补全{ version: 0.2.0, configurations: [ { type: java, name: 调试主程序, request: launch, mainClass: com.example.demo.DemoApplication, projectName: demo, cwd: ${workspaceFolder}, console: integratedTerminal, vmArgs: -Xmx512m -Dfile.encodingUTF-8, args: --server.port8081, env: { APP_ENV: dev } } ] }字段含义逐个说。mainClass是入口类的全限定名写错了启动会报找不到类。projectName在多模块项目里必须写对否则它会去别的模块找入口。cwd是工作目录涉及到读相对路径文件比如读config/app.yml时这项决定了从哪一层开始找默认是工作区根目录。args是传给 main 方法的命令行参数会在args数组里原样收到。env是进程级环境变量用来区分开发、测试环境的配置开关比在代码里硬编码要干净。vmArgs是虚拟机参数调堆内存、设编码、开远程调试端口都在这里。-Dfile.encodingUTF-8这一项在 Windows 上建议常备能省掉不少控制台输出乱码的问题。4.4 断点、条件断点与热替换的实用技巧断点是最基础的点行号左边空白处出现红点就表示打断点成功。但有几个进阶玩法效率提升很大。条件断点在断点上右键选编辑断点在条件框里写表达式比如i 500或者user.getId() 1001L。循环五千次只想看第五百次的状态时这个功能能省掉无数次手动继续。表达式里可以直接调对象的方法只要它没有副作用就行。日志点同样在编辑断点界面把类型切成日志点填一段带花括号占位符的文本比如当前索引 {i}值 {list.get(i)}。它不会中断程序只在调试控制台打印适合那种不想停下但要看看值的场景尤其适合分析偶发问题。异常断点在侧边栏的断点面板里可以勾选要捕获的异常类型。默认情况下未捕获异常才会停勾上 Caught 之后被 try-catch 吞掉的异常也会停排查异常被吞导致状态不对这类问题时非常有效。热替换修改方法体内部逻辑后保存VSCode 会尝试把改动推送到正在运行的 JVM不用重启就能生效。注意它只能改方法体内的代码增加方法、改方法签名、改类结构这些都不行遇到不支持的改动会提示你重启。写业务逻辑调参时这个功能很顺手尤其是 Spring Boot 项目启动要十几秒的那种。5. 常见问题与排查技巧实录5.1 代码全红但命令能跑语言服务器的索引问题这个现象很典型mvn compile明明成功了编辑器里 import 全是红波浪线String都提示找不到。原因八成是语言服务器没正确绑定 JDK或者索引缓存坏了。排查顺序是这样。先看状态栏右下角显示的 Java 版本如果不是你期望的那个就是java.jdt.ls.java.home没生效。再执行命令面板的Java: Clean Java Language Server Workspace清理重建这一步能解决七成以上的诡异问题。还不行就去看输出面板在下拉框里选Language Support for Java日志里通常会写清楚是哪个 JDK 路径有问题。注意清理工作区这个操作会删掉语言服务器的缓存目录重建需要一两分钟期间补全功能不可用。别误以为是自己把环境搞坏了耐心等它跑完。5.2 中文乱码三个地方的编码必须对齐乱码是 Java 开发里的经典问题根源在于文件编码、编译器编码、运行终端编码这三处不一致。JDK 8 到 17 在 Windows 中文环境下javac默认用平台编码GBK读源码而 VSCode 默认把文件存成 UTF-8两边一冲突源码里的中文就变成了编码 GBK 的不可映射字符报错。对齐方案分三步。文件层面files.encoding设成utf8让 VSCode 统一用 UTF-8 存。编译层面Maven 项目在 pom 里加project.build.sourceEncoding为 UTF-8纯 javac 命令加-encoding UTF-8。运行层面vmArgs里加-Dfile.encodingUTF-8同时把java.debug.settings.console设成integratedTerminal因为外部的集成终端渲染中文比内部控制台稳得多。JDK 18 之后默认编码改成了 UTF-8JEP 400理论上这类问题会少很多但如果你的项目还在用 JDK 8 或 11上面这三步一个都不能省。5.3 Lombok 与注解处理器用 Lombok 的项目在 VSCode 里经常会遇到找不到 getter 方法的报错Data注解明明加上了调用getXxx()还是标红。原因是 Language Support for Java 默认不开注解处理Lombok 生成的代码它看不到。解决办法是装Lombok Annotations Support for VS Code扩展然后在设置里确认java.jdt.ls.lombokSupport.enabled为 true大部分版本默认就是开的最后清理重启语言服务器。如果还是不行去检查 pom 里 Lombok 的scope是不是被写成了provided却在编译阶段没被识别正常应该是 scope 为 provided 或直接不写。还有一个容易忽视的点Lombok 版本要和 JDK 版本匹配。用 JDK 21 配一个 2019 年的 Lombok 版本注解处理器几乎必然报错。升级之前先看一眼项目现在用的版本1.18.30 以上对新 JDK 支持才算比较完整。5.4 卡顿、内存占满与工作区排除VSCode 跑 Java 卡顿通常有三个来源。第一是语言服务器堆内存不够表现为操作一会儿开始卡重启就好过一会儿又卡。把java.jdt.ls.vmargs的-Xmx调到 2G 或 3G这个最直接。第二是工作区太大把不该扫的目录也扫进去了用files.watcherExclude和java.import.exclusions排除target、node_modules、build这些目录。第三是文件监听器句柄不够Linux 下报ENOSPC错误需要调整系统的 inotify 上限。内存分配的取值我给个参考8G 内存的机器语言服务器给 1.5G 比较稳妥同时别开太多扩展16G 的机器给 2G 到 3G 都没问题32G 的机器可以放心给 4G配大项目时体感提升明显。分配过大的副作用是 JVM 启动时要预留和回收这些内存反而可能在某些操作上变慢所以不是越大越好。5.5 WSL 与远程场景下的配置要点在 WSL 里开发 Java 是很多人的选择理论上代码在 Linux 环境下跑更接近生产环境。要点有两个第一扩展要装在WSL 那一侧而不是本地打开 WSL 窗口后看扩展面板那些显示在 WSL 中安装的才需要在远端装一遍Java 扩展包和 Maven 都需要。第二JDK 要装在 WSL 里本地 Windows 的 JDK 路径在 WSL 里是访问不到的java.jdt.ls.java.home要写 Linux 风格的路径比如/usr/lib/jvm/java-21-openjdk-amd64。有个常见的性能坑项目文件放在 Windows 盘/mnt/c/...下面从 WSL 里访问会有明显的 IO 开销索引速度能慢好几倍。项目文件放在 WSL 自己的文件系统里比如~/workspace体验会好很多。这一点在做大型 Maven 项目时差别尤其明显。问题排查速查表整理如下现象大概率原因处理方式代码全红但能编译语言服务器未绑定 JDK 或缓存损坏检查 java.jdt.ls.java.home清理工作区命令行 java 版本和配置不一致PATH 里有其它 Java 路径抢占where java 逐个检查删掉多余项编译报无效的目标发行版运行时 JDK 低于 pom 里声明的版本降 pom 版本或切换到对应 JDK中文注释编译报错源码编码与编译器编码不一致pom 加 UTF-8 编码属性控制台输出乱码终端编码与 JVM 输出编码不一致加 -Dfile.encodingUTF-8用集成终端Scanner 读输入卡住用了默认内部控制台改 java.debug.settings.console断点打了不生效代码和运行的类不一致重新编译确认运行的是当前类依赖拉取极慢或卡住仓库地址不通配置国内镜像源并重载项目Lombok 方法标红注解处理器未开启装 Lombok 扩展并重启语言服务器操作一段时间后卡顿语言服务器内存不足调整 java.jdt.ls.vmargs 的 Xmx6. 长期使用积累下来的一些提效习惯6.1 快捷键与代码模板快捷键不用记太多记住六个就够用CtrlShiftP打开命令面板几乎所有功能都能从这进F5启动调试ShiftF5停止F9切换断点CtrlShiftF全局搜索AltShiftO一键整理 import。这几个熟练之后日常操作基本不用碰鼠标。代码模板Snippet是另一个提效点。命令面板执行Preferences: Configure User Snippets选java.json可以自定义补全片段。我常用的是psvm生成主方法、sout生成打印语句、soutv生成带变量名的打印。后两个在做算法题时特别好用soutv会自动把当前光标所在的变量名和值一起打印出来比手写拼接字符串快很多。还有一个不太有人提但很好用的功能Java: Organize Imports可以设成保存时自动执行配合editor.formatOnSave每次保存代码自动整理格式和导入提交代码时 diff 干净很多团队同事会感谢你。6.2 配置备份与版本升级前的准备VSCode 自带设置同步功能用账号登录之后可以把设置、快捷键、扩展列表全同步到其它机器。但我自己还会额外在 Git 仓库里放一份settings.json和keybindings.json的副本原因是账号同步偶尔会出现冲突合并失败的情况本地留一份纯文本备份出问题时直接覆盖两分钟恢复原状。升级扩展前有个习惯值得养成看一眼扩展的更新日志。Java 扩展包里各个组件是联动升级的有时候新版本的语言服务器会要求更高的 JDK升级完打开项目直接报JDK 版本过低就是因为这个。所以我一般会保留一个较新的 JDK比如 21专门给语言服务器用项目用哪个版本另说这样升级扩展不会打乱项目本身的环境。我个人的体会是VSCode 配 Java 这件事的难点从来不在怎么点按钮而在于理解每个配置项到底在管哪一层。JDK 有两个身份跑服务器和跑项目编码有三个位置文件、编译器、终端内存有两个边界语言服务器和你的项目本身把这些分清楚了剩下的就是照着本文的配置抄一遍改路径的事。真要说最容易翻车的一步还是环境变量里那些看不见的 PATH 顺序改完记得重开终端再验证别在旧窗口里下结论。
返回列表