在 Visual Studio Code 中构建 Java 应用程序

IDE(集成开发环境)通过提供用于代码开发、测试、调试功能等的多种实用程序,使您能够快速编程应用程序。鉴于 Visual Studio Code 作为通用 IDE 的普及程度不断提高,您可以通过安装 Oracle Java Platform 扩展轻松开发您的第一个 Java 项目。  

设置

Oracle Java Platform 扩展在 Visual Studio Code Marketplace 上提供。您可以通过 Code 菜单直接从 Visual Studio Code 安装它:Code > Settings > Extensions

利用命令面板创建新项目 View > Command Palette > Java: New Project 或打开包含现有 Maven(pom.xml)或 Gradle 项目文件(build.gradlegradle.properties)的文件夹。让我们通过菜单 View > Command Palette >Java: New Project 创建一个新的 Maven 项目,并选择 Java with Maven 选项。您将看到一个提示,要求您指定要保存项目的目录(例如:concatenate),然后输入包名。

Package name

该扩展将为 Maven 项目创建一个基本的 pom.xml 和一个默认的目录结构,其中定义了源文件夹。pom.xml 文件是一个单一的配置文件,包含构建项目所需的大部分信息。

如果您的系统中没有 JDK,则该扩展可以帮助您获取一个。在 Visual Studio Code 菜单中选择 View > Command Palette > Download, install, and Use JDK,然后选择安装其中列出的 JDK 之一,或将扩展指向您操作系统上现有 JDK 的二进制文件。此操作将更新您的用户设置。当您想使用不同的 JDK 时,访问 View > Command Palette > Preferences:Open User Settings (JSON) 并手动更新 jdk.jdkhome 设置。

JDK downloader


注意

该扩展需要至少 JDK 11。


您可以使用运行 Oracle Java Platform 扩展的相同 JDK 构建、运行和调试您的项目。该扩展在以下位置搜索 JDK

  • jdk.jdkhome
  • java.home
  • JDK_HOME 环境变量
  • JAVA_HOME 环境变量
  • 当前系统路径

接下来,让我们探索生成的项目。

 

项目资源管理器

您可以在 Visual Studio Code 的资源管理器中可视化您的项目。concatenate 项目的目标是提供 2 个列表的交集。您的程序应该接收列表作为参数并计算它们的交集。让我们将以下代码添加到 Concatenate.java 类中以实现这一点

public class Concatenate {

    public static void main(String[] args) {

        if (args.length < 2) {
            System.out.println("You need to provide 2 lists as arguments. You provided " + args.length);
            throw new UnsupportedOperationException("You need to provide 2 lists as arguments");
        }

        List<Integer> firstSeries = List.of(args[0].split(",")).stream()
                .map(Integer::valueOf).collect(Collectors.toList());

        List<Integer> secondSeries = List.of(args[1].split(",")).stream()
                .map(Integer::valueOf).collect(Collectors.toList());


        List<Integer> elements = extractCommonElements(firstSeries, secondSeries);
        System.out.println(elements);

    }

    public static List<Integer> extractCommonElements(List<Integer> list1, List<Integer> list2) {
        Set<Integer> intersection = new HashSet<>(list1);

        intersection.retainAll(list2);
        if (list1.get(0).equals(list2.get(0))) {
            intersection.add(list1.get(0));
        }
        if (list1.get(list1.size() - 1).equals(list2.get(list2.size() - 1))) {
            intersection.add(list1.get(list1.size() - 1));
        }

        return intersection.stream().toList();
    }
}

除了 Visual Studio Code 的资源管理器之外,Oracle Java Platform 扩展还提供 Project Explorer,其中包含项目结构的概述。此功能旨在简化 Java 包结构导航。

Project Explorer

您可以使用它来清理、编译、测试、调试和执行您的 Maven/Gradle Java 项目。

 

调试器和启动配置

Oracle Java Platform 扩展启动配置支持使用 JDK11 或更高版本调试和运行 Java 应用程序。当您选择 Run main | Debug main 代码透镜或从 Run and Debug 活动面板中选择时,您可以调用启动配置/调试器。

Run main

启动和调试器配置都支持以下操作

  • 暂停
  • 单步执行
  • 步入
  • 步出
  • 重启
  • 停止/断开连接

Run and Debug 视图中,您可以通过从下拉列表中选择 Java+,然后单击运行图标来自定义您的启动配置。

Launch configurations

默认启动配置在 launch.json 文件中可用。您可以通过从可用进程中选择或输入要连接到的 JVM 运行的端口来附加调试器操作。在 Windows 操作系统上,您还可以选择 Attach to Shared Memory

Attach to port & attach to process

转到资源管理器视图的 Run Configuration 面板以修改程序参数、VM 选项、环境变量或设置工作目录。例如,您可以通过将 "31,20,15,17" "20,19,17,45" 添加到程序参数来运行带有参数的应用程序。

Run configuration

 

代码重构

维护 Java 应用程序通常涉及通过进行许多小的更改来改进内部代码,而不会改变其功能需求。例如,如果您使用的是 JDK 21 或更高版本,则可以选择 .get(0),右键单击 Change all occurrences 以使用 SequencedCollection 方法 getFirst()

Change all occurences

类似地,您可以将 get(list1.size() - 1) 的所有出现重构为 SequencedCollection 方法 getLast()extractCommonElements 方法的代码变为

// works with JDK >= 21
public static List<Integer> extractCommonElementsAlternative(List<Integer> list1, List<Integer> list2) {
        Set<Integer> intersection = new HashSet<>(list1);

        intersection.retainAll(list2);

        if (list1.getFirst().equals(list2.getFirst())) {
            intersection.add(list1.getFirst());
        }
        if (list1.getLast().equals(list2.getLast())) {
            intersection.add(list1.getLast());
        }

        return intersection.stream().toList();
}

为了加快开发速度,您可以通过 Source Action 上下文菜单为您的类生成方法。

Source action menu

Source Action 上下文菜单提供对组织 Java 源代码中的导入的支持。此外,您可以通过转到 VSCode View > Command Palette > Preferences:Open User Settings > Extensions > Java 并搜索 jdk 来设置 Jdk > Java > Imports 选项来增强导入优化策略

  • Count For Using Star Import - 使用星号导入的类计数,默认值为 999。
  • Count For Using Static Star Import - 使用静态星号导入的成员计数,默认值为 999。
  • Groups - 导入语句组(由其包前缀指定)及其排序顺序。组内的导入语句按字母顺序排序。

Organize imports

您可以在保存文档时选择组织导入操作,方法是通过 View > Command Palette > Preferences:Open User Settings > Extensions > Java > On Save: Organize Imports 并选中复选框。

更多重构建议可通过 Show code 灯泡和 Refactor 上下文菜单获得。您可以实现更复杂的重构,例如通过允许您更改、添加、移动、删除方法参数的专用表单来更改方法的参数。

Change method parameters

如果您决定将成员从一个类移动到另一个类,您可以从 Refactor > Move 上下文菜单中执行此操作

Move members

此外,该扩展还支持以下重构

  • 构造函数和方法参数的重构
  • 生成 hashCode/equalstoString()
  • 将表达式分配给局部变量
  • 将表达式提取到局部变量
  • 拆分为声明和赋值
  • 向上或向下拉动类成员
  • 内联冗余变量
  • 将类移动到不同的包
  • 提取接口/方法
  • 通过转换为静态导入来替换导入常量/方法
  • for/try-catch/switch()/while() 块的重构

虽然重构是一个旨在提高软件质量而不破坏最终用户功能的过程,但测试可以帮助您更有信心构建无错误的应用程序。

 

测试代码

您可以通过 Show code 灯泡生成测试,然后选择 Create Test Class 选项。

Test

生成的测试类将包含为空或失败的方法。您的目标是拥有评估类中每个方法操作的测试,因此您可以添加 @Disabled 注释来排除/跳过执行其中一些生成的方法。让我们修改其中一个生成的测试来验证 extractCommonElements 方法

import java.util.Arrays;
import java.util.List;

import static org.junit.jupiter.api.Assertions.assertEquals;

public class ConcatenateTest {

    /**
     * Test of extractCommonElements method, of class Concatenate.
     */
    @org.junit.jupiter.api.Test
    public void testExtractCommonElements() {
        System.out.println("extractCommonElements");
        List<Integer> list1 = Arrays.asList(31,20,15,17);
        List<Integer> list2 = Arrays.asList(20,19,17,45);
        List<Integer> expResult = Arrays.asList(17, 20);
        List<Integer> result = Concatenate.extractCommonElements(list1, list2);
        assertEquals(expResult, result);
    }
}

该扩展提供 Test Explorer 视图,允许运行项目中的所有测试,检查结果,转到源代码并运行特定测试。

Test Explorer

 

文档代码

Oracle Java Platform 扩展可以通过建议插入预格式化和预填充的 JavaDoc 注释来帮助您编写文档。在方法签名上方键入 /**,IDE 将提供完成 JavaDoc 的选项。该操作将创建一个 JavaDoc 注释,其中所有参数都已准备就绪。

Javadoc assistant

生成的 javadoc 将类似于以下内容

    /**
     *
     * @param list1
     * @param list2
     * @return
     */
    public static List<Integer> extractCommonElements(List<Integer> list1, List<Integer> list2) {}

 

发展项目

如果您有一个在不同 Java 版本上运行的项目,则可以为使用的每个运行时版本关联一个配置文件。创建配置文件后,您可以自定义其 settings.json 并定义 jdk.jdkhome 值。

与您自己的项目一样,Oracle Java Platform 扩展将继续改进和发展。由于这是一个开源项目,欢迎社区贡献和反馈。查看 贡献指南 并加入我们的努力,为 Java 提供流畅的开发体验。

上次更新: 2024 年 4 月 22 日


返回教程列表