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/"
},
],
对应 Workspace 的 settings.json, Workspace 不需要配置 JDK, 用全局的即可
"java.configuration.detectJdksAtStart": false,
设置完之后需要重启 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",
使用自定义 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, 这样会有问题.
这个环境变量可以通过两种方式设置
- workspace settings 中添加如下设置, 建议仅用于 Workspace, 因为不同项目的 JDK 可能不同, 这个设置仅对在terminal 中执行的 maven 命令有效
"maven.terminal.customEnv": [
{
"environmentVariable": "JAVA_HOME",
"value": "/opt/jdk/jdk-21.0.2"
}
],
- workspace settings 中勾选 Maven > Terminal: Use Java Home, 对应的设置如下, 开启后会自动使用 java.home 的值作为 $JAVA_HOME
"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 中添加
"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
{
"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中
{
"type": "java",
//...
"args": "",
"preLaunchTask": "compile[dev]", <--- 增加这行
"envFile": "${workspaceFolder}/.env",
},
之后启动 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",
最终的 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",
}
最后
从实际使用看, VSCode对于中小型Java项目已经可以作为生产力工具使用, 配置稍微有点麻烦, 从开发到debug到打包, 流程都没什么问题. 代码高亮和提示也没什么问题, 本身VSCode也有一些优势, 例如对HTML, js代码的高亮, IDEA社区版是没有的. 存在的问题就是有些改动到界面上的体现反应有点慢, 而且有些设置和改动变动比较大, 需要重启后才能正确高亮.
VSCode 配置 Spring Boot 项目开发环境的更多相关文章
- 在IDEA中配置spring boot项目的热更新
在我使用IDEA的过程中,我发现Spring Boot项目本来自带的一个热部署工具无法使用,这里在参考各家博客后给出解决方案: 修改POM 首先POM文件需要包含spring boot的热部署工具,m ...
- Spring boot项目分环境Maven打包,动态配置文件,动态配置项目
Spring boot Maven 项目打包 使用Maven 实现多环境 test dev prod 打包 项目的结构 在下图中可用看出,我们打包时各个环境需要分开,采用 application-环境 ...
- 基于VS Code创建Spring Boot项目开发REST API(一)
公司从.NET转向Java不仅仅是简单的代码变成Java,趁此机会对原有的架构和代码重构,融入新的概念和技术.目前通过前后端分离,将后端更多的微服务化.从.NET转向Java我们更多的是用Java开发 ...
- spring boot 项目开发常用目录结构
在spring boot开发中一些常用的目录划分 转载自https://blog.csdn.net/Auntvt/article/details/80381756: 一.代码层结构 根目录:net.c ...
- spring boot项目开发中遇到问题,持续更新
1.JPA中EntityManager不能执行建表语句,提示要加事务Error:javax.persistence.TransactionRequiredException: Executing an ...
- spring boot项目多环境配置文件设置
具体做法: 不同环境的配置设置一个配置文件,例如:dev环境下的配置配置在application-dev.properties中:prod环境下的配置配置在application-prod.prope ...
- Spring Boot 项目学习 (二) MySql + MyBatis 注解 + 分页控件 配置
0 引言 本文主要在Spring Boot 基础项目的基础上,添加 Mysql .MyBatis(注解方式)与 分页控件 的配置,用于协助完成数据库操作. 1 创建数据表 这个过程就暂时省略了. 2 ...
- spring boot + vue + element-ui全栈开发入门——spring boot后端开发
前言 本文讲解作为后端的spring boot项目开发流程,如果您还不会配置spring boot环境,就请点击<玩转spring boot——快速开始>,如果您对spring boot还 ...
- Spring Boot 项目学习 (一) 项目搭建
0 引言 本文主要记录借用Idea 开发环境下,搭建 Spring Boot 项目框架的过程. 1 系列文档目录 Spring Boot 项目学习 (一) 项目搭建 Spring Boot 项目学习 ...
- Spring Boot 项目学习 (四) Spring Boot整合Swagger2自动生成API文档
0 引言 在做服务端开发的时候,难免会涉及到API 接口文档的编写,可以经历过手写API 文档的过程,就会发现,一个自动生成API文档可以提高多少的效率. 以下列举几个手写API 文档的痛点: 文档需 ...
随机推荐
- layui之静态表格的分页及搜索功能以及前端使用XLSX导出Excel功能
LayUI官方文档:https://layui.dev/docs/2/#introduce XLSX NPM地址:https://www.npmjs.com/package/xlsx XLSX 使用参 ...
- CMake出错的处理
在windows上使用cmake来c++的程序,遇到一个问题 问题排查 试过在电脑上单独使用gcc是可以编译成功的,那么就可能是IDE集成的问题了 IDE的编译工具链从mingw换成vs,编译通过 让 ...
- 从零开始配置vim(32)——最后再说两句
很抱歉我决定结束这个系列的内容了.原本我打算介绍markdown.orgmode相关的配置,甚至还打算介绍如何在vim 中使用 emacs 的 org-agenda 来进行日常的任务管理.但是出于一些 ...
- ROS节点通信(一)消息发布和订阅
目录 1.说明 2.创建工作空间 3.创建功能包 4.编写自定义传输类型文件 5.编写源代码 5.1.编写发布者代码 5.2.编写订阅者代码 6.编译 7.启动运行 8.查看ROS网络结构图 1.说明 ...
- (python)学习ing||类学习,@property装饰器
class pers(): def __init__(self,hp): self._hp=hp @property def hp(self): return self._hp @hp.setter ...
- idea破解《当脚本破解方式无效或不方便执行时可采用此方法》
idea新版破解有时会各种不成功,很耽误事.所以,再次整理一个相对省事有效的办法.<此方式为修改idea启动脚本破解方式>内容如下: 一:下载此激活工具 二:按下图从下载的文件中找到箭头标 ...
- 高精度模板 大数减大数 可变数组vector实现
vector<int> Sub(vector<int>& A, vector<int>& B)//这里默认长数减去短数 { vector<in ...
- 洛谷P1308统计单词数,strtok函数的使用以及对于单词分割的一些思考
[NOIP2011 普及组] 统计单词数 题目描述 一般的文本编辑器都有查找单词的功能,该功能可以快速定位特定单词在文章中的位置,有的还能统计出特定单词在文章中出现的次数. 现在,请你编程实现这一功能 ...
- 【Unity3D】AudioSource组件
1 简介 1)AudioSource 与 AudioListener 简介 AudioSource(音频源)组件用于控制播放 AudioClip(音频片段),能够控制 2D 和 3D(距离越远 ...
- 【OpenGL ES】立方体贴图(6张图)
1 前言 本文通过一个立方体贴图的例子,讲解三维纹理贴图的应用,案例中使用 6 张不同的图片给立方体贴图,图片如下: 本文涉及到的知识点主要包含:三维绘图.MVP 矩阵变换.纹理贴图,读者如果 ...