VSCode 配置 Spring Boot 项目开发环境

神器IDEA在升级到2023之后越发卡顿, EDU邮箱也不能用了, 照现在这个JDK版本的升级速度, 神器不升级也不行, 需要开始物色替代品. 其它IDE我用得少, VSCode还是比较熟悉的, 可以作为备选项.

两三年前曾经试过配置Java环境, 存在不少问题作罢. 最近搜了下相关的文章, 感觉VSCode对Java项目的支持比三年前完善了不少. 今天实际配置了一下环境, 把自己常用的功能过了一遍, 基本能跑通开发流程, 做个笔记.

安装扩展

需要安装的扩展有两组

  • Extension Pack for Java
  • Spring Boot Extension Pack

创建空白 Spring Boot 项目

快捷键 Shift+Ctrl+P呼出命令菜单, 使用 Spring Initializr: Create a Maven Project, 按提示创建

Java环境设置

需要先配置JDK, 否则在编译和运行项目时无法找到 pom.xml 中设置的JDK版本.

打开 settings

  • 首先在 Workspace 关闭 Java> Configuration: Detect Jdks At Start
  • 然后在 User 的 Java> Configuration: Runtimes 中添加 JDK

对应 User 的 settings.json, 这里的 name 是系统给定的值

json 复制代码
    "java.configuration.runtimes": [
    
        {
            "name":"JavaSE-11",
            "path": "/opt/jdk/jdk-11.0.18/"
        },
        {
            "name":"JavaSE-17",
            "path": "/opt/jdk/jdk-17.0.7/"
        },
        {
            "name":"JavaSE-21",
            "path": "/opt/jdk/jdk-21.0.2/"
        },
    ],

对应 Workspace 的 settings.json, Workspace 不需要配置 JDK, 用全局的即可

json 复制代码
    "java.configuration.detectJdksAtStart": false,

设置完之后需要重启 VSCode 才生效.

使用 Maven

使用自定义版本的 Maven

VSCode 中默认使用的是当前项目目录下的 Maven Wrapper, 如果想换成其它版本, 或者不希望在项目目录下增加额外文件, 则需要自行指定 mvn 路径

在 User 的 settings.json 中增加下面的条目, 注意 这个条目在当前的VSCode版本, 只能加到 User, 不能加到 Workspace.

json 复制代码
"maven.executable.path": "/opt/maven/apache-maven-3.8.6/bin/mvn",

使用自定义 settings.xml

首先配置项java.configuration.maven.userSettings在maven扩展中不起作用, 在GitHub issue #140中有解释

For now, this maven extension works independently with the language server, so it never reads any java.* config.

Use extra parameters to specify your own settings file.

In this extension we provide config entry maven.executable.options as a workaround. E.g.

"maven.executable.options": "-s c:\settings.xml"

Make sure the filepath format is compatible with the terminal you use, here we won't format the content for your terminal.

所以需要通过在Workspace的 settings.json 中添加下面的配置, 使得自定义 settings.xml 起作用, 路径要使用绝对路径

复制代码
"maven.executable.options": "-s /path-to/settings.xml"

加入此项后, 在界面上展开项目的 Profiles 就能看到自定义settings.xml中包含的profile.

查看项目全部依赖

在界面左侧导航条, MAVEN模块, 项目上右键 -> Show Dependencies, 会以文本形式展示所有依赖

设置执行 Maven 使用的 JDK

执行 Maven 使用的JDK和项目pom.xml指定的JDK并无关联, 是通过项目中的 mvnw 脚本检查环境 $JAVA_HOME 变量获得. 如果不设置执行maven命令会使用系统自带的java, 这样会有问题.

这个环境变量可以通过两种方式设置

  1. workspace settings 中添加如下设置, 建议仅用于 Workspace, 因为不同项目的 JDK 可能不同, 这个设置仅对在terminal 中执行的 maven 命令有效
json 复制代码
    "maven.terminal.customEnv": [
        {
            "environmentVariable": "JAVA_HOME",
            "value": "/opt/jdk/jdk-21.0.2"
        }
    ],
  1. workspace settings 中勾选 Maven > Terminal: Use Java Home, 对应的设置如下, 开启后会自动使用 java.home 的值作为 $JAVA_HOME
json 复制代码
"maven.terminal.useJavaHome": true,

执行maven命令

可以通过界面左侧导航条, MAVEN模块,

  • 项目上右键 Run Maven Commands 执行. 如果要执行复合命令(如 clean package), 可以点选 Custom
  • 也可以通过下级菜单 Lifecycle 展开后点击对应 Command 执行.

如果要快捷执行

  • 可以用快捷键 Shift+Ctrl+P呼出命令菜单, 用 Maven 过滤, 选择 Maven: History
  • 界面左侧导航条, MAVEN模块, 下级菜单 Favorites, 添加自己常用的复合命令, 例如clean package -DskipTests

Favorites 也可以在当前项目的 settings.json 中添加

json 复制代码
    "maven.terminal.favorites": [
        {
            "command": "clean package -DskipTests"
        }
    ],

Run和Debug

界面方式可以直接通过 SpringBootApplication 类的编辑器右上方, 点击Run或Debug按钮

对于日常快捷操作, 可以通过Shift+Ctrl+P呼出命令菜单, 用 Spring Boot Dashboard: Run, Spring Boot Dashboard: Debug, Spring Boot Dashboard: Stop 这三个命令进行操作.

Debug 也可以用 VSCode 默认的F5直接呼起

Run和Debug时资源文件filtering问题

VSCode 只要检测到文件改动, 就会自动build, 但是此时会忽略指定的 profile, 导致资源文件的 filtering 未执行, @标注的占位符没有替换为正确配置, 从而在执行Spring Boot Dashboard: Run, Spring Boot Dashboard: Debug时, 启动出错. 要手动先调 Maven: Favorite编译再执行Run才能正确运行.

解决方案:

在 task.json 中创建一个task, 用于带 profile 编译, 注意这里要指定JAVA_HOME, 指定 settings.xml, 指定 profile

json 复制代码
{
    "label": "compile[dev]",
    "type": "shell",
    "command": "JAVA_HOME=/opt/jdk/jdk-21.0.2/ /opt/maven/apache-maven-3.8.6/bin/mvn compile -Pdev -DskipTests -f ./pom.xml -s ./settings.xml"
},

在 launch.json 中将上面的 task 设置到 preLaunchTask

json 复制代码
{
    "type": "java",
    //...
    "args": "",
    "preLaunchTask": "compile[dev]",       <--- 增加这行
    "envFile": "${workspaceFolder}/.env",
},

之后启动 Spring Boot Dashboard: Run时就会先执行这个编译对资源文件filtering, 再启动应用就正常了.

示例

最终的 User settings.json 新增项为

json 复制代码
    "java.configuration.runtimes": [

        {
            "name":"JavaSE-11",
            "path": "/opt/jdk/jdk-11.0.18/"
        },
        {
            "name":"JavaSE-17",
            "path": "/opt/jdk/jdk-17.0.7/"
        },
        {
            "name":"JavaSE-21",
            "path": "/opt/jdk/jdk-21.0.2/"
        },
    ],
    "maven.executable.path": "/opt/maven/apache-maven-3.8.6/bin/mvn",

最终的 Workspace settings.json 为

json 复制代码
{
    "java.configuration.detectJdksAtStart": false,
    "maven.terminal.customEnv": [
        {
            "environmentVariable": "JAVA_HOME",
            "value": "/opt/jdk/jdk-21.0.2"
        }
    ],
    "maven.terminal.favorites": [
        {"command": "clean package -Pdev -DskipTests"},
    ],
    "maven.executable.options": "-s /path-to/settings.xml",
}

最后

从实际使用看, VSCode对于中小型Java项目已经可以作为生产力工具使用, 配置稍微有点麻烦, 从开发到debug到打包, 流程都没什么问题. 代码高亮和提示也没什么问题, 本身VSCode也有一些优势, 例如对HTML, js代码的高亮, IDEA社区版是没有的. 存在的问题就是有些改动到界面上的体现反应有点慢, 而且有些设置和改动变动比较大, 需要重启后才能正确高亮.

相关推荐
用户83071968408210 小时前
Spring Boot 集成 RabbitMQ :8 个最佳实践,杜绝消息丢失与队列阻塞
spring boot·后端·rabbitmq
Java水解11 小时前
Spring Boot 视图层与模板引擎
spring boot·后端
Java水解11 小时前
一文搞懂 Spring Boot 默认数据库连接池 HikariCP
spring boot·后端
洋洋技术笔记15 小时前
Spring Boot Web MVC配置详解
spring boot·后端
初次攀爬者1 天前
Kafka 基础介绍
spring boot·kafka·消息队列
用户8307196840821 天前
spring ai alibaba + nacos +mcp 实现mcp服务负载均衡调用实战
spring boot·spring·mcp
Java水解1 天前
SpringBoot3全栈开发实战:从入门到精通的完整指南
spring boot·后端
初次攀爬者2 天前
RocketMQ在Spring Boot上的基础使用
java·spring boot·rocketmq
花花无缺2 天前
搞懂@Autowired 与@Resuorce
java·spring boot·后端
Derek_Smart2 天前
从一次 OOM 事故说起:打造生产级的 JVM 健康检查组件
java·jvm·spring boot