ARTICLE DETAIL

资讯详情

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

VSCode Java开发实战:环境配置、Maven命令与Git分支清理指南

VSCode Java开发实战:环境配置、Maven命令与Git分支清理指南 1. 环境准备从零搭建 VSCode Java 开发环境1.1 JDK 安装与 Java 环境变量配置聊 VSCode 的 Java 开发绕不开第一个坑就是环境变量。很多从 IDEA 转过来的朋友IDEA 自动帮你把 JDK 配置好了换个 VSCode 就懵了。其实 VSCode 本身不负责装 JDK它只是调用你机器上现成的 Java 运行时所以第一步永远是确认 JDK 装没装、能不能被找到。我的建议是把 JDK 装好之后在终端里执行java -version验证一下。之前帮同事排查问题他装的是 JDK 17结果java -version显示的却是 1.8原因就是PATH里系统变量排在用户变量前面旧版本的 JDK 被优先找到了。Windows 上排查这种问题可以在cmd里执行where javaLinux 或 macOS 执行which java看看到底指向哪条路径。配JAVA_HOME的时候有个细节很多人会忽略JAVA_HOME要填到 JDK 的根目录不是bin目录也不是jre目录。比如你的 JDK 装在C:\Program Files\Java\jdk-17那JAVA_HOME就是这个路径然后在PATH里追加%JAVA_HOME%\bin。配完记得开新终端窗口别在不新开窗口里反复试环境变量不会实时刷新。验证环境变量是否生效除了java -version还可以用echo $JAVA_HOMELinux/macOS或echo %JAVA_HOME%Windows看一眼。这两个命令的输出如果对得上基本就稳了。1.2 VSCode 安装与 Java 插件组合推荐VSCode 本身的安装没什么好说的官网下载安装包一路下一步就行。但装完插件才是关键很多新手直接搜 Java 装了一堆插件结果插件之间互相冲突语言服务一直报错。我长期用下来最稳定的一套组合是四个插件Extension Pack for Java微软官方出品的合集、Spring Boot Extension Pack做 Spring Boot 项目必备、Lombok Annotations Support不装这个注解处理器跑不起来、Test Runner for Java跑单测用的。其中Extension Pack for Java已经包含了 Java 语言服务器、调试器、Maven 支持、项目视图等核心部件所以不用再单独装 Red Hat 的 Java 语言服务器避免重复。装插件之后的第一次加载比较慢Language Server 需要扫描整个工作区的 classpath大项目可能要等一两分钟才能出现代码提示。这时候别着急看左下角状态栏如果显示 Starting Java Language Server... 之类的内容说明还在初始化。等它变成打勾的图标或者消失才算真正就绪。1.3 首次打开项目Maven 依赖下载与项目结构识别用 VSCode 打开一个 Maven 项目工程目录下要有pom.xml这一点很多人会忘。VSCode 不会把普通文件夹自动识别成 Java 项目它需要通过pom.xml或者build.gradle来确认项目类型。如果打开一个纯手工堆出来的目录结构没有任何构建文件那 Language Server 只能提供基础的语法高亮代码跳转和编译检查都指望不上。我第一次用 VSCode 打开公司老项目时就是只拉了代码没等 Maven 依赖下载完就开始改代码结果满屏红波浪线还以为是代码写错了。后来查了一下原来 VSCode 的 Java 语言服务器会在后台执行mvn dependency:resolve之类的操作下载依赖需要时间期间会渲染出很多误报的错误。解决这个问题的思路很简单打开终端手动执行一次mvn clean compile先让 Maven 把依赖全部拉下来再切回编辑器看代码红波浪线基本就消停了。这一步其实就是 VSCode Java 开发里最常用的一个命令后面我单独展开讲。2. 高频终端命令编译、测试与打包2.1 Maven 生命周期命令开发者的“第二条肌肉记忆”你可以不用 VSCode 的图形界面但你不能不会 Maven 命令行。VSCode 里的很多 Java 操作底层就是在调 Maven只是把结果隐藏到了图形界面后面。懂命令行的人排查问题会快得多。日常开发里使用频率最高的 Maven 命令我个人排序如下mvn clean删除target目录清理编译产物。改了很多代码之后出现奇怪问题第一反应就是 clean。mvn compile只编译主代码不跑测试。适合快速验证代码能不能编译过。mvn test编译并运行单元测试。注意它会把src/test/java下的测试类全部跑一遍如果项目里有一堆集成测试这个命令可能很慢。mvn package编译 测试 打包输出jar或war到target目录。发布前的必经之路。mvn install打包并安装到本地 Maven 仓库供其他本地项目依赖引用。多模块项目里子模块之间互相依赖时必须先 install。这里有个很多人踩过的坑多模块项目改完 A 模块再去改 B 模块B 模块引用的还是旧版本的 A 模块。原因是 B 模块依赖的 A 模块是从本地仓库拿的没重新 install。这种情况下就算在 VSCode 里 B 模块代码提示没问题运行时也可能会 ClassNotFoundException。我的经验是多模块项目的公共模块改完之后第一时间执行mvn install -pl 模块名 -am其中-pl指定模块-am表示同时构建它依赖的其他模块。2.2 用-DskipTests跳过测试的两种姿势mvn package -DskipTests和mvn package -Dmaven.test.skiptrue是两个看起来差不多、实际完全不同的命令这个必须分清。-DskipTests的意思是“编译测试代码但不运行测试”。也就是说测试类还会被编译只是执行阶段被跳过了。如果你想保证测试代码没有语法错误可以用这个。-Dmaven.test.skiptrue更狠直接连测试代码都不编译了。它的执行速度更快但风险在于如果测试代码本身有编译错误你根本发现不了等到 CI 上跑的时候才炸。所以我的习惯是本地改完代码只是想起个服务做自测用mvn spring-boot:run -DskipTests就够了但如果是要打包交付哪怕时间再紧也不建议用-Dmaven.test.skiptrue跳过编译除非你对测试代码质量非常自信。2.3 Gradle 项目在 VSCode 里的常用命令Gradle 项目在 VSCode 里也不少见尤其是新起的 Android 或 Spring Boot 项目。Gradle 的命令风格和 Maven 有相似之处但细节差别不小。最常用的是./gradlew clean build、./gradlew test --tests com.example.*Test、./gradlew bootRun。注意一定要用项目自带的gradlew脚本而不是系统全局的gradle。原因是gradlew会锁定项目指定的 Gradle 版本避免全局版本不一致引起的问题。我之前吃过亏本地全局 Gradle 是 7.x项目要求 6.8直接用全局gradle打包结果 DSL 语法解析报错排查了半天才反应过来版本不匹配。用./gradlew之后它会自动下载对应版本的 Gradle wrapper从此再没遇到这类问题。VSCode 里也可以直接把 Gradle 任务跑起来打开命令面板输入 “Gradle Tasks”会列出所有可执行的任务点击就能跑。但说实话命令行终端里跑的反馈速度比 UI 快而且日志格式更完整我是倾向直接在集成终端里操作的。2.4 绕过构建工具直接用javac和java快速验证有些场景确实不需要 Maven 或 Gradle比如想快速写一个几十行的算法题验证逻辑或者同事给了一个单文件的 Java 程序让你帮忙看运行结果。这时候用javac和java反而更干净。单文件编译很简单javac Hello.java在同目录下生成Hello.class然后java Hello就能跑。注意类名必须和文件名一致大小写也得一致Hello和hello是完全不同的两个文件。如果主类在包里比如com.example.Main那要保证目录结构和包名一致。执行命令时要从包的上一级目录开始比如你编辑的文件在src/com/example/Main.java那就到src目录下执行javac com/example/Main.java运行java com.example.Main。这里容易犯的错是直接用java com/example/MainJava 的运行命令里点路径用的是点不是斜杠这点和编译命令不一样。还有一种情况是依赖了外部 jar 包需要用到-cp参数javac -cp libs/commons-lang3.jar Main.java运行时也要带上java -cp .:libs/commons-lang3.jar MainWindows 下分隔符用分号。用 VSCode 自带的终端跑这些命令很顺手因为工作目录默认就在项目根目录少一层切换目录的操作。3. 用好 VSCode 内置命令与快捷键3.1 命令面板里的高频 Java 操作VSCode 的命令面板CtrlShiftP/CmdShiftP是整个编辑器的“总控台”Java 相关的很多深层操作都必须从这里面进入没有快捷键直达。我常用的 Java 相关命令列几个Java: Clean Java Language Server Workspace清空语言服务器的缓存数据。出现代码提示错乱、跳转到旧版本类实现这类问题先跑这个。Java: Force Java Compilation强制重新编译整个工作区。比手动执行mvn clean compile轻量一些适合只是改了代码但语言服务器没反应的情况。Java: Add Jar to Classpath手动添加 jar 包到项目的 classpath。某些老项目不用 Maven就用这个方式引入依赖。Java: Show Build Jobs查看后台构建任务的状态能看到语言服务器当前在做什么排查卡顿非常有用。命令面板本质上是一个模糊搜索列表你只需要输入几个字母它就能帮你找到对应的命令。所以记不住全名没关系记住关键词就行比如要清理语言服务器就输clean java。3.2 运行与调试不是只有 F5还有这些调试命令VSCode 里 Java 的调试入口从哪进最直接的是打开一个 Java 文件点编辑器右上角的“运行”三角图标或者按F5。但很多项目不只有一个main方法F5 默认跑的文件可能不是你想启动的服务。这种情况我一般用“运行和调试”侧边栏它会把工作区里所有可运行的 main 方法列出来手动选择目标再启动。如果项目是 Spring Boot启动类只有一个倒是可以直接 F5但这要求你当前焦点得在启动类那个文件上。调试过程中几个常用操作也值得记一下F9打断点/取消断点F5继续执行F10单步跳过F11单步进入ShiftF11单步跳出。这些和 IDEA 完全一致如果你是从 IDEA 转过来的这几把快捷键能立刻上手。还有一个细节.vscode/launch.json里的控制台类型默认console可能让 System.in 无法在 VSCode 内部终端输入。如果你写了一个读取控制台输入的程序记得把console: internalConsole改成console: integratedTerminal否则你会发现程序卡在等待输入的地方但无论怎么按键都没反应。3.3 代码生成与重构命令少敲很多样板代码用 VSCode 写 Java没必要活得像一个打字机。编辑器自带了一批非常高效的代码生成命令只是藏得比较深。在类里面右键 - “Source Actions”或者按Ctrl.触发快速修复能生成构造方法、Getter/Setter、toString()、hashCode()和equals()。选中一个变量名按F2可以全局重命名这对 Java 这种长命名风格的语言特别友好改一次全项目生效不用手动逐个文件替换。Surround With Try-Catch 也是我常用的选中一段可能抛异常的代码右键选择这个动作编辑器会自动生成完整的 try-catch 结构。省下的时间看着不多但积少成多非常可观。生成测试类也有快捷方式在类名上右键 - “Go to Test” / “Generate Tests”。如果你装了 Test Runner for Java还可以直接在测试类旁边看到一个绿色的运行按钮点击就能执行所有测试方法不用手动敲mvn test。4. Git 操作命令VSCode 上的分支清理与协同实战4.1 VSCode 内置 Git 命令能覆盖 80% 场景VSCode 的源代码管理面板CtrlShiftG承载了绝大部分 Git 操作包括暂存更改、提交、推送、拉取、查看 Diff。如果你是新手我建议优先在 VSCode 里面完成这些操作因为可视化界面能直接看到哪些文件改了、改动了几行非常直观。但有几个操作内嵌 UI 做起来反而别扭我反而更推荐用终端合并冲突解决完成后的git add .和git commit -m resolve conflict在 UI 里需要一步步点终端反而一脑门子直达。修改上一次提交信息git commit --amendUI 里没有直接入口终端里输一条命令就完事。把多个提交压缩成一个git rebase -i HEAD~3交互式界面高效得多。我的习惯是日常提交、拉取、推送用界面重写历史、冲突解决、分支操作尽量用命令。这不是说 UI 不好而是终端的表达力更强能精确控制每个动作。4.2 清理远端已删除的分支看这一节就够了“VSCode 清理删除的分支”是特别常见的问题尤其是团队协作中别人在远端把分支删了你本地还在 Git 面板里看到一堆陈旧的 remotes/origin/xxx 分支点开已经拉不到的代码很烦人。最常用的命令是git remote prune origin它的作用是清理本地记录的、远端已经不存在了的分支引用。执行完之后你再打开源代码管理面板的分支视图那些失效的远程分支就消失了。如果想顺带把本地已经合并过的分支也清理掉可以用git branch --merged | grep -v ^* | grep -v master\|main | xargs git branch -d但这条命令有风险因为它会把所有已合并分支都干掉。我的建议是首次使用别直接跑这条先执行git branch --merged | grep -v ^*看看输出确认哪些分支要删再手动逐一git branch -d 分支名。还有一个细节VSCode 源代码管理视图里有一个 “刷新” 按钮点了之后会重新拉取远程分支列表。如果你刚执行过git remote prune origin刷新一下视图效果立竿见影。4.3 常见 Git 场景误提交后的后悔药开发过程中总会遇到“那个文件不该提交”或者“提交信息写错了”的尴尬时刻。这里的常用命令稍微有点操作难度但掌握之后非常实用。误提交了敏感文件还没推送远端可以执行git reset --soft HEAD~1撤销上次提交但保留工作区改动。然后修改.gitignore把这些文件排除掉再重新提交。如果已经推送到了远端就得用git revert HEAD生成一个反向提交直接改历史提交会有风险团队协作中千万别乱来。改提交信息用git commit --amend -m 新的提交信息。这里有个小坑amend 之后提交的哈希值会变如果这个提交已经推送到了远端需要git push --force-with-lease强制推送但务必注意这会覆盖远端历史。我的原则是只在个人分支上面用 force共享分支上坚决不用 force宁可新增提交来弥补。5. 常见的坑与排查套路那些治好了我精神内耗的问题5.1 Language Server 启动失败或代码提示消失VSCode Java 最常见的故障现象就是打开项目代码没有提示跳转不过去错误标记也不刷新。这时候大概率是 Language Server 卡死了。排查步骤我固定按三招走看输出面板CtrlShiftU切换下拉框到 “Java Language Server”里面有详细的日志定位是哪个 jar 包解析失败。执行Java: Clean Java Language Server Workspace清空语言服务器缓存。实在不行就关掉整个 VSCode手动删除工作区下的.vscode目录里的缓存内容然后重新打开。这三招能解决掉 90% 的提示消失问题。剩下 10% 的话看看是不是 JDK 版本和插件要求的版本不匹配。微软官方的 Java 插件要求 JDK 17 以上如果你还在用 Java 8出问题一点都不意外。5.2 编译通过但运行时乱码源头在编码设置Java 开发中乱码问题从来就没消失过。常见的表现是VSCode 编辑器里代码注释中文正常但程序运行输出的中文全变成???。这个问题通常是两个环节源代码文件的编码格式和控制台的编码格式不一致。VSCode 默认推荐的编码是 UTF-8但 Windows 下部分终端默认是 GBK运行System.out.println(中文)就会乱码。解决办法有两层。第一层在.vscode/settings.json里显式设置{ file.encoding: utf8, terminal.integrated.defaultProfile.windows: Command Prompt }第二层是在启动配置里加 JVM 参数vmArgs: -Dfile.encodingUTF-8。如果用了 Maven 插件启动可以在pom.xml里配置project.build.sourceEncoding为 UTF-8。至于 spring-boot-maven-plugin 的启动直接在系统环境变量里加JAVA_TOOL_OPTIONS-Dfile.encodingUTF-8也是一招。5.3 Spring Boot MyBatis 项目在 VSCode 里的日常命令看热词列表里有 “spring boot mybatis 的 java 开源多商户跨境商城源码”这类项目在 VSCode 里跑起来的关键命令其实就几条。启动服务用mvn spring-boot:run端口冲突就用-Dspring-boot.run.arguments--server.port8081指定一个可用端口。打包要跳过测试就用mvn package -DskipTests。如果要看运行日志方便排查问题可以加-Dlogging.level.rootdebug临时开启调试日志。MyBatis 的 XML 文件有个容易踩的坑修改了mapper.xml之后直接重新运行代码发现 SQL 还是旧版本。原因在于项目打包时 XML 没有被复制到target/classes或者 IDE 没有重新加载资源文件。推荐在修改 XML 后先执行mvn clean compile这时候 VSCode 会刷新 target 目录再重启应用就正常了。还有 Lombok 的问题如果代码里用了Slf4j但控制台里却找不到log或者在.java文件里大量标红检查一下是否安装了Lombok Annotations Support插件以及 Maven 依赖里有没有正确引入 Lombok。这个坑在 VSCode 里特别容易踩IDEA 内置了 Lombok 插件支持但 VSCode 必须显式安装。5.4 常见问题速查表整理一份我在实际工作中反复用到的高频排查表按照问题现象来查问题现象大概率原因一句命令/操作代码提示完全不出现Language Server 未启动或崩溃Java: Clean Java Language Server Workspace满屏红色波浪线但能编译通过Maven 依赖未下载完成终端执行mvn clean compile运行时报 ClassNotFoundException多模块项目子模块依赖未更新进入公共模块执行mvn install控制台中文乱码编码格式不一致启动配置加-Dfile.encodingUTF-8Git 面板远程分支残留本地删了但 remote ref 没同步git remote prune originLombok 的 log 对象找不到缺少 VSCode Lombok 插件安装Lombok Annotations SupportSystem.in无法输入启动配置 console 类型错误launch.json设置console: integratedTerminalSpring Boot 端口被占用上一个服务未停止mvn spring-boot:run -Dspring-boot.run.arguments--server.port8081Maven 构建时测试报错但代码没问题测试代码与 JDK 版本不兼容mvn package -DskipTests临时跳过测试注意风险这张表不敢说覆盖了所有问题但确实是我在真实开发里反复用到的策略能解决大部分日常突然宕机的尴尬。6. 一点不成熟的心里话写完这篇总结还是想多说两句实际的感受。VSCode 做 Java 开发体验肯定和 IDEA 不一样IDEA 那种“开箱即智能”的感觉VSCode 需要多花一点心思去配置。但是 VSCode 的优势在于轻量、启动快、跨平台一致性高尤其是开了很多个项目窗口的时候性能差距非常明显。我个人最建议的做法是不要试图把 VSCode 用成 IDEA那是跟自己较劲。你只需要把命令行和快捷键用熟把 Maven、Gradle、Git 这些底层命令理解透VSCode 就是一台非常趁手的“轻量级 IDE”。很多时候图形界面点半天还不如按一下Ctrl 然后在命令行里敲一条mvn test 来得痛快。最后再分享一个小技巧VSCode 里按住Ctrl点击类名可以直接跳转到定义但是如果你点了之后跳不过去大概率是 Language Server 还没加载完。这时候别反复点去右下角看一眼语言服务器状态等它转完圈代码跳转自然就通了。这个细节看起来不值一提但确实是我一开始用 VSCode 写 Java 时最恼火的一个瞬间。
返回列表