在 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.gradle
、gradle.properties
)的文件夹。让我们通过菜单 View > Command Palette >Java: New Project
创建一个新的 Maven 项目,并选择 Java with Maven
选项。您将看到一个提示,要求您指定要保存项目的目录(例如:concatenate
),然后输入包名。
该扩展将为 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 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 包结构导航。
您可以使用它来清理、编译、测试、调试和执行您的 Maven/Gradle Java 项目。
调试器和启动配置
Oracle Java Platform 扩展启动配置支持使用 JDK11 或更高版本调试和运行 Java 应用程序。当您选择 Run main | Debug main
代码透镜或从 Run and Debug
活动面板中选择时,您可以调用启动配置/调试器。
启动和调试器配置都支持以下操作
- 暂停
- 单步执行
- 步入
- 步出
- 重启
- 停止/断开连接
在 Run and Debug
视图中,您可以通过从下拉列表中选择 Java+
,然后单击运行图标来自定义您的启动配置。
默认启动配置在 launch.json
文件中可用。您可以通过从可用进程中选择或输入要连接到的 JVM 运行的端口来附加调试器操作。在 Windows 操作系统上,您还可以选择 Attach to Shared Memory
。
转到资源管理器视图的 Run Configuration
面板以修改程序参数、VM 选项、环境变量或设置工作目录。例如,您可以通过将 "31,20,15,17" "20,19,17,45"
添加到程序参数来运行带有参数的应用程序。
代码重构
维护 Java 应用程序通常涉及通过进行许多小的更改来改进内部代码,而不会改变其功能需求。例如,如果您使用的是 JDK 21 或更高版本,则可以选择 .get(0)
,右键单击 Change all occurrences
以使用 SequencedCollection
方法 getFirst()
。
类似地,您可以将 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
上下文菜单提供对组织 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 - 导入语句组
(由其包前缀指定)及其排序顺序。组内的导入语句按字母顺序排序。
您可以在保存文档时选择组织导入操作,方法是通过 View > Command Palette > Preferences:Open User Settings > Extensions > Java > On Save: Organize Imports
并选中复选框。
更多重构建议可通过 Show code
灯泡和 Refactor
上下文菜单获得。您可以实现更复杂的重构,例如通过允许您更改、添加、移动、删除方法参数的专用表单来更改方法的参数。
如果您决定将成员从一个类移动到另一个类,您可以从 Refactor > Move
上下文菜单中执行此操作
此外,该扩展还支持以下重构
- 构造函数和方法参数的重构
- 生成
hashCode/equals
和toString()
- 将表达式分配给局部变量
- 将表达式提取到局部变量
- 拆分为声明和赋值
- 向上或向下拉动类成员
- 内联冗余变量
- 将类移动到不同的包
- 提取接口/方法
- 通过转换为静态导入来替换导入常量/方法
for/try-catch/switch()/while()
块的重构
虽然重构是一个旨在提高软件质量而不破坏最终用户功能的过程,但测试可以帮助您更有信心构建无错误的应用程序。
测试代码
您可以通过 Show code
灯泡生成测试,然后选择 Create Test Class
选项。
生成的测试类将包含为空或失败的方法。您的目标是拥有评估类中每个方法操作的测试,因此您可以添加 @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
视图,允许运行项目中的所有测试,检查结果,转到源代码并运行特定测试。
文档代码
Oracle Java Platform 扩展可以通过建议插入预格式化和预填充的 JavaDoc 注释来帮助您编写文档。在方法签名上方键入 /**
,IDE 将提供完成 JavaDoc 的选项。该操作将创建一个 JavaDoc 注释,其中所有参数都已准备就绪。
生成的 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 日
返回教程列表