本文由 简悦 SimpRead 转码, 原文地址 blog.csdn.net
神器 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 社区版是没有的. 存在的问题就是有些改动到界面上的体现反应有点慢, 而且有些设置和改动变动比较大, 需要重启后才能正确高亮.