• 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 是系统给定的值

        "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/"
            },
        ],
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15

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

        "java.configuration.detectJdksAtStart": false,
    
    • 1

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

    使用 Maven

    使用自定义版本的 Maven

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

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

    "maven.executable.path": "/opt/maven/apache-maven-3.8.6/bin/mvn",
    
    • 1

    使用自定义 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"
    
    • 1

    加入此项后, 在界面上展开项目的 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 命令有效
        "maven.terminal.customEnv": [
            {
                "environmentVariable": "JAVA_HOME",
                "value": "/opt/jdk/jdk-21.0.2"
            }
        ],
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    1. workspace settings 中勾选 Maven > Terminal: Use Java Home, 对应的设置如下, 开启后会自动使用 java.home 的值作为 $JAVA_HOME
    "maven.terminal.useJavaHome": true,
    
    • 1

    执行maven命令

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

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

    如果要快捷执行

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

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

        "maven.terminal.favorites": [
            {
                "command": "clean package -DskipTests"
            }
        ],
    
    • 1
    • 2
    • 3
    • 4
    • 5

    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

    {
        "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"
    },
    
    • 1
    • 2
    • 3
    • 4
    • 5

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

    {
        "type": "java",
        //...
        "args": "",
        "preLaunchTask": "compile[dev]",       <--- 增加这行
        "envFile": "${workspaceFolder}/.env",
    },
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7

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

    示例

    最终的 User settings.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",
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16

    最终的 Workspace settings.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",
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13

    最后

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

  • 相关阅读:
    设计模式——单例模式详解
    (web前端网页制作课作业)使用HTML+CSS制作非物质文化遗产专题网页设计与实现
    在线人才测评,招聘技术研发类岗位的人才测评方案
    全员“拉踩”苹果,入局一年多的苹果芯片已成“行业标杆”?
    Linux18 ---进程和线程、线程实现方法、线程的使用接口、多线程代码实现、线程并发运行
    nginx反向代理
    代码随想录第57天
    关于web自动化元素定位,你想知道的都在这里
    傅里叶级数与傅里叶变换_Part6_离散傅里叶变换推导
    郑州团购分销小程序开发如何运营?
  • 原文地址:https://blog.csdn.net/michaelchain/article/details/136606437