提示

本文主要介绍如果使用 VSCode 开发 Java 程序。@ermo

本文演示使用的环境:

操作系统:Mac

JDK 版本:1.8.0_301

VSCode 版本:1.70.1 (Universal)

Maven 版本:3.8.1

# 在 VSCode 中使用 Java

VSCode(Visual Studio Code) (opens new window) 是一款由微软开发的免费代码编辑器,目前在前端开发中比较流行。

本文主要学习如何在 VSCode 中开发 Java 项目,包括常用的快捷键,创建并启动 SpringBoot 项目等。

# 下载

可以直接在 VSCode 官网 (opens new window) 下载对应系统的安装包。

国内在官网可能会出现下载慢的问题,可以考虑将下载域名替换为镜像域名。

# 官网下载地址
https://az764295.vo.msecnd.net/stable/e4503b30fc78200f846c62cf8091b76ff5547662/VSCode-darwin-universal.zip

# 国内镜像
https://vscode.cdn.azure.cn/stable/e4503b30fc78200f846c62cf8091b76ff5547662/VSCode-darwin-universal.zip

# 常用快捷键

键入 cmd + T 默认打开搜索框,带一个 # 键,输入下面的符号可以搜索更具体的内容:

  • @/ - 查询所有请求 url,请求方法
  • @+ - 查询所有定义的 bean
  • @> - 查询所有的方法
  • @ - 查询所有注解

下面列出一些其他常用快捷键:

  • cmd + shift + N - 打开新的窗口
  • cmd + shift + F - 搜索替换
  • cmd + shift + P - 查询所有命令,调色板,万能命令
  • cmd + shift + K - 删除一行
  • alt + shift + up/down - 向上/向下复制一行
  • alt + up/down - 向上/向下移动一行
  • shift + opt + F - 格式化
  • cmd + P - 快速选中最近打开的文件
  • opt + 鼠标左键 - 光标多处选中
  • opt + cmd + up/down - 光标多处选中,上下移动
  • opt + shift + O - 优化导入
  • cmd + . - 补全变量/快速 try catch/快速 throw

通过 cmd + P,然后键入 #,可以查询 jar 中类文件。

键入 cmd + shift + P 打开调色板,搜索 Open process explorer,可以看到 VSCode 内存使用情况。

# 配置 maven settings.xml

打开 Code -> Preference -> Configuration,搜索 maven,找到 Maven Global SettingsMaven User Settings,指定对应的 setting.xml 文件目录即可,默认使用的是当前用户目录下的 ~/.m2/settings.xml

# 配置 jdk 环境变量

键入 cmd + P,搜索 settings.json,在 settings.json 文件配置下面内容:

    "java.configuration.runtimes": [
        {
            "name": "JavaSE-1.8",
            "path": "/Library/Java/JavaVirtualMachines/jdk1.8.0_301.jdk/Contents/Home"
        }
    ]

# 创建 SpringBoot 项目

安装 Java 相关的插件:

  • Extension Pack for Java
  • Spring Boot Extension Pack

安装完成后重启 VSCode,可以看到一个菜单栏多了一个 Create Java Project 按钮。

点击 Create Java Project 按钮,然后选择 Spring Boot

选择 Maven Project

选择 SpringBoot 版本,类似于下面的依赖,这里使用 2.7.2 版本进行测试。

    <parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>2.7.2</version>
        <relativePath/> <!-- lookup parent from repository -->
    </parent>

接下来选择项目语言,点击 Java

后面的操作都是通过回车一步一步选择,包括以下几步:

  • 选择 groupId,和 artifactId
  • 选择打包方式,这里使用 jar 形式。
  • 选择 Java 版本,使用 java8
  • 选择依赖,这里选择 Spring Web
  • 选择要放置的文件目录,然后回车等待项目初始化

初始化完成后打开项目,会出现下面的界面。

可以使用 Java Project 菜单栏,项目的展现形式更像 IDEA。

# 启动 SpringBoot 项目

先使用最简单的方式启动项目,找到启动类,然后点击 Run 或者 Debug 进行启动。

新建一个类 HelloController,添加一个简单的方法 say

当项目目录有多个 package 时,这时目录有2种展现形式 Flat View(扁平结构) 和 Hierarchical View(分层结构),读者可以根据自己的开发习惯进行展示。

重启项目,然后在浏览器访问 localhost:8080/say,浏览器会成功展示 Hello VSCode

# 多环境配置

在实际开发项目中会遇到这种场景,项目中一般会有 application-test.ymlapplication-dev.ymlapplication-prod.yml 三个配置文件。

开发过程中一般使用 application-dev.yml 文件中的配置,生产环境使用 application-prod.yml,我们想要在本地开发调试的时候指定特定的 active 指令。

上文中直接找到应用启动类进行启动的方式无法解决这种应用场景,可以留意下启动日志:

No active profile set, falling back to 1 default profile: "default"

这时候就要使用到 VSCode 中的 Run and Debug 功能,可以在左侧菜单栏中找到小虫子一样的按钮。

点击 Run and Debug,然后找到 create a launch.json file,点击后系统会在项目根目录 .vscode 创建一个 launch.json 文件。

launch.json (opens new window) 是当前项目启动需要的一些配置项,支持多种语言。

自动生成的 launch.json 文件内容如下:

{
    // Use IntelliSense to learn about possible attributes.
    // Hover to view descriptions of existing attributes.
    // For more information, visit: https://go.microsoft.com/fwlink/?linkid=830387
    "version": "0.2.0",
    "configurations": [
        {
            "type": "java",
            "name": "Launch Current File",
            "request": "launch",
            "mainClass": "${file}"
        },
        {
            "type": "java",
            "name": "Launch VscodeInJavaApplication",
            "request": "launch",
            "mainClass": "cc.ermo.vscodeinjava.VscodeInJavaApplication",
            "projectName": "vscode-in-java"
        }
    ]
}

configurations 是一个数组,可以配置多个启动配置,数组内的每个 json 对象最终会在 Run and Debug 作为启动列表展示。

当前项目只有一个应用启动类 VscodeInJavaApplication,所以加上默认的启动配置,一共有2个数组元素。

简单说明下 json 内的常用属性:

  • type - 启动类型类型,常用的类型有 nodejavaphppython
  • name - 调试名称
  • request - 调试模式,主要有 launchattachlanuch 用于启动当前应用,后者主要用于链接一个已经启动的应用,也就是远程 debug
  • mainClass - 主应用启动类,在 Java 中可以为启动类的全限定类名,也可以为内置变量,比如 ${file} 就是一个 内置变量 (opens new window),表示将当前打开的文件作为启动类
  • projectName - 项目名称

了解这些配置后,将项目 src/main/resources 目录下的 application.properties 文件后缀修改为 application.yml 然后在当前目录新增一个 application-test.yml 文件,内容如下:

server:
  port: 8890
spring:
  application:
    name: vscode-in-java-test

然后对 HelloController 的内容进行修改:

@RestController
public class HelloController {

    @Value("${spring.application.name}")
    private String applicationName;
    
    @GetMapping("/say")
    public String say() {
        return "Hello VSCode";
    }

    @GetMapping("/name")
    public String currentApplicationName() {
        return applicationName;
    }
}

增加一个 /name 的接口,用于验证当前激活的 profiles.acitve

然后修改 launch.json 文件,添加 env 属性。

{
    // Use IntelliSense to learn about possible attributes.
    // Hover to view descriptions of existing attributes.
    // For more information, visit: https://go.microsoft.com/fwlink/?linkid=830387
    "version": "0.2.0",
    "configurations": [
        {
            "type": "java",
            "name": "Launch Current File",
            "request": "launch",
            "mainClass": "${file}"
        },
        {
            "type": "java",
            "name": "Launch VscodeInJavaApplication",
            "request": "launch",
            "mainClass": "cc.ermo.vscodeinjava.VscodeInJavaApplication",
            "projectName": "vscode-in-java",
            "env": {
                "spring.profiles.active": "test"
            }
        }
    ]
}

也可以使用 args 属性进行配置。

{
    // Use IntelliSense to learn about possible attributes.
    // Hover to view descriptions of existing attributes.
    // For more information, visit: https://go.microsoft.com/fwlink/?linkid=830387
    "version": "0.2.0",
    "configurations": [
        {
            "type": "java",
            "name": "Launch Current File",
            "request": "launch",
            "mainClass": "${file}"
        },
        {
            "type": "java",
            "name": "Launch VscodeInJavaApplication",
            "request": "launch",
            "mainClass": "cc.ermo.vscodeinjava.VscodeInJavaApplication",
            "projectName": "vscode-in-java",
            "args": "--spring.profiles.active=test"
        }
    ]
}

通过 Run and Debug 启动程序。

启动过程的日志可以看出当前激活的 profiletest

The following 1 profile is active: "test"

项目启动完成后访问 localhost:8890/name 可以看到浏览器返回 vscode-in-java-test

# 总结

VSCode 作为一款开源工具并且由微软维护,更新频率高,目前在前端非常流行。

用 VSCode 开发 Java 在效率和流畅度上和 IDEA 还有一定差距,但是使用 VSCode 可以摆脱破解版魔咒。

个人认为已经长期维护的大型项目建议使用 IDEA,保证开发效率。如果是刚成立的项目或者对 JDK 新特性进行学习,这种情况,不妨尝试下 VSCode。