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社区版是没有的. 存在的问题就是有些改动到界面上的体现反应有点慢, 而且有些设置和改动变动比较大, 需要重启后才能正确高亮.

相关推荐
cliffordl38 分钟前
vscode 环境搭建
ide·vscode·编辑器
JANGHIGH1 小时前
VSCode引用Eigen库无法识别问题解决
ide·vscode·编辑器
工业甲酰苯胺1 小时前
Spring Boot 整合 MyBatis 的详细步骤(两种方式)
spring boot·后端·mybatis
我就是全世界2 小时前
开源集成开发环境搭建之VSCode启动Jupyter Notebook
ide·vscode·jupyter
bjzhang753 小时前
SpringBoot开发——集成Tess4j实现OCR图像文字识别
spring boot·ocr·tess4j
flying jiang3 小时前
Spring Boot 入门面试五道题
spring boot
小菜yh3 小时前
关于Redis
java·数据库·spring boot·redis·spring·缓存
爱上语文5 小时前
Springboot的三层架构
java·开发语言·spring boot·后端·spring
荆州克莱5 小时前
springcloud整合nacos、sentinal、springcloud-gateway,springboot security、oauth2总结
spring boot·spring·spring cloud·css3·技术
serve the people5 小时前
springboot 单独新建一个文件实时写数据,当文件大于100M时按照日期时间做文件名进行归档
java·spring boot·后端