简介
本指南演示了如何使用 Visual Studio Code 网页客户端在 GitHub Codespaces 中设置示例 Java 项目。它将逐步引导你完成在 codespace 中打开项目以及添加和修改预定义开发容器配置的过程。
完成本教程后,你将能够使用 VS Code 网页客户端或 VS Code 桌面应用程序将开发容器配置添加到自己的存储库中。
有关开发容器的更多信息,请参阅“开发容器简介”。
步骤 1:在 codespace 中打开项目
-
登录 GitHub.com(如果尚未登录)。
-
单击“使用此模板”,然后单击“在 codespace 中打开”。
创建 codespace 时,你的项目将在专用于你的远程虚拟机上创建。默认情况下,codespace 的容器包含许多语言和运行时,包括 Java。它还包含一组常用的工具,例如 Gradle、Maven、git、wget、rsync、openssh 和 nano。
你可以通过调整 vCPU 和 RAM 的数量、添加点文件以个性化你的环境或修改已安装的工具和脚本来自定义你的 codespace。有关更多信息,请参阅“自定义你的 codespace”。
GitHub Codespaces 使用名为 devcontainer.json
的文件来配置你在 codespace 中工作时使用的开发容器。每个存储库都可以包含一个或多个 devcontainer.json
文件,以提供你在 codespace 中处理代码所需的开发环境。
启动时,GitHub Codespaces 使用 devcontainer.json
文件以及构成开发容器配置的任何依赖文件来安装工具和运行时,并执行项目所需的其它设置任务。有关更多信息,请参阅“开发容器简介”。
步骤 2:添加开发容器配置
GitHub Codespaces 的默认开发容器(或“开发容器”)将允许您成功地处理像 vscode-remote-try-java 这样的 Java 项目。但是,我们建议您配置自己的开发容器,以包含项目所需的所有工具和脚本。这将确保为存储库中的所有 GitHub Codespaces 用户提供完全可重复的环境。
要将您的存储库设置为使用自定义开发容器,您需要创建一个或多个 devcontainer.json
文件。您可以从预定义的配置模板(在 Visual Studio Code 中)添加这些文件,也可以自己编写。有关开发容器配置的更多信息,请参阅“开发容器简介”。
-
访问 Visual Studio Code 命令面板(Shift+Command+P / Ctrl+Shift+P),然后开始键入“add dev”。单击 **Codespaces: 添加开发容器配置文件**。
-
单击 **创建新配置**。
-
在本例中,您从中创建代码空间的模板存储库已经包含开发容器配置,因此会显示一条消息,告诉您配置文件已存在。我们将覆盖现有的配置文件,因此请单击 **继续**。
-
单击 **显示所有定义**。
-
键入
java
并单击 **Java** 选项。如果您的项目使用特定工具,则可以使用其他选项。例如,Java & PostgreSQL。 -
选择要用于项目的 Java 版本。在本例中,选择标记为“(默认)”的版本。
-
选择 **安装 Maven** 选项,然后单击 **确定**。
-
将显示您可以安装的其他功能列表。我们将安装 Ant,这是一个用于构建应用程序的 Java 库和命令行工具。要安装此功能,请键入
ant
,选择Ant (via SDKMAN)
,然后单击 **确定**。 -
将显示一条消息,告诉您开发容器配置文件已存在。单击 **覆盖**。
将创建一个
devcontainer.json
文件,并在编辑器中打开它。
自定义开发容器配置的详细信息
如果您查看 Visual Studio Code 资源管理器,您会看到一个 .devcontainer
目录已添加到项目的存储库根目录中,其中包含 devcontainer.json
文件。这是从该存储库创建的代码空间的主要配置文件。
devcontainer.json
您添加的 devcontainer.json
文件将包含 name
、image
和 features
属性的值。一些您可能觉得有用的附加属性已包含在内,但已注释掉。
该文件将类似于以下内容,具体取决于您选择的映像
// For format details, see https://aka.ms/devcontainer.json. For config options, see the
// README at: https://github.com/devcontainers/templates/tree/main/src/java
{
"name": "Java",
// Or use a Dockerfile or Docker Compose file. More info: https://containers.dev/guide/dockerfile
"image": "mcr.microsoft.com/devcontainers/java:0-17",
"features": {
"ghcr.io/devcontainers/features/java:1": {
"version": "none",
"installMaven": "true",
"installGradle": "false"
},
"ghcr.io/devcontainers-contrib/features/ant-sdkman:2": {}
}
// Use 'forwardPorts' to make a list of ports inside the container available locally.
// "forwardPorts": [],
// Use 'postCreateCommand' to run commands after the container is created.
// "postCreateCommand": "java -version",
// Configure tool-specific properties.
// "customizations": {},
// Uncomment to connect as root instead. More info: https://aka.ms/dev-containers-non-root.
// "remoteUser": "root"
}
- name:您可以将开发容器命名为任何您想要的名字。将提供一个默认值。
- image: 容器注册表(DockerHub、GitHub 容器注册表 或 Azure 容器注册表)中用于创建 codespace 开发容器的镜像名称。
- features: 一个或多个对象的列表,每个对象都引用一个可用的开发容器功能。功能是自包含的、可共享的安装代码和开发容器配置单元。它们提供了一种简单的方法,可以将更多工具、运行时或库功能添加到您的开发容器中。您可以在 VS Code 中或在 GitHub.com 上的
devcontainer.json
编辑器中添加功能。有关更多信息,请单击“将功能添加到 devcontainer.json 文件”中的“Visual Studio Code”或“Web 浏览器”选项卡。 - forwardPorts: 此处列出的任何端口都将自动转发。有关更多信息,请参阅“在 codespace 中转发端口”。
- postCreateCommand: 使用此属性在 codespace 创建后运行命令。这可以格式化为字符串(如上所示)、数组或对象。有关更多信息,请参阅 Development Containers 网站上的 开发容器规范。
- customizations: 此属性允许您在使用特定工具或服务在 codespace 中工作时对其进行自定义。例如,您可以为 VS Code 配置特定设置和扩展。有关更多信息,请参阅 Development Containers 网站上的“支持工具和服务”。
- remoteUser: 默认情况下,您以 vscode 用户身份运行,但您可以选择将其设置为 root。
有关可用属性的完整列表,请参阅 Development Containers 网站上的 开发容器规范。
其他开发容器配置文件
如果您熟悉 Docker,除了 devcontainer.json
文件之外,您可能还想使用 Dockerfile 或 Docker Compose 来配置 codespace 环境。您可以通过在 devcontainer.json
文件旁边添加 Dockerfile
或 docker-compose.yml
文件来实现。有关更多信息,请参阅 Development Containers 网站上的“使用镜像、Dockerfile 和 Docker Compose”。
步骤 3:修改您的 devcontainer.json 文件
在您添加了开发容器配置并对所有内容的基本理解之后,您现在可以进行更改以进一步自定义您的环境。在本例中,您将添加以下属性:
- 在创建开发容器后运行命令以创建新文件。
- 在此代码空间中自动安装两个 VS Code 扩展。
-
在
devcontainer.json
文件中,在features
属性后添加逗号。JSON "features": { "ghcr.io/devcontainers/features/java:1": { "version": "none", "installMaven": "true", "installGradle": "false" }, "ghcr.io/devcontainers-contrib/features/ant-sdkman:2": {} },
"features": { "ghcr.io/devcontainers/features/java:1": { "version": "none", "installMaven": "true", "installGradle": "false" }, "ghcr.io/devcontainers-contrib/features/ant-sdkman:2": {} },
-
取消
postCreateCommand
属性的注释,并将它的值更改为echo \"This file was added by the postCreateCommand.\" > TEMP.md
。JSONC // Use 'postCreateCommand' to run commands after the container is created. "postCreateCommand": "echo \"This file was added by the postCreateCommand.\" > TEMP.md",
// Use 'postCreateCommand' to run commands after the container is created. "postCreateCommand": "echo \"This file was added by the postCreateCommand.\" > TEMP.md",
-
取消
customizations
属性的注释,并按以下方式编辑它以安装“代码拼写检查器”扩展和“Java 扩展包”。JSONC // Configure tool-specific properties. "customizations": { // Configure properties specific to VS Code. "vscode": { // Add the IDs of extensions you want installed when the container is created. "extensions": [ "streetsidesoftware.code-spell-checker", "vscjava.vscode-java-pack" ] } }
// Configure tool-specific properties. "customizations": { // Configure properties specific to VS Code. "vscode": { // Add the IDs of extensions you want installed when the container is created. "extensions": [ "streetsidesoftware.code-spell-checker", "vscjava.vscode-java-pack" ] } }
根据您选择的镜像,devcontainer.json
文件现在应该类似于以下内容:
// For format details, see https://aka.ms/devcontainer.json. For config options, see the
// README at: https://github.com/devcontainers/templates/tree/main/src/java
{
"name": "Java",
// Or use a Dockerfile or Docker Compose file. More info: https://containers.dev/guide/dockerfile
"image": "mcr.microsoft.com/devcontainers/java:0-17",
"features": {
"ghcr.io/devcontainers/features/java:1": {
"version": "none",
"installMaven": "true",
"installGradle": "false"
},
"ghcr.io/devcontainers-contrib/features/ant-sdkman:2": {}
},
// Use 'forwardPorts' to make a list of ports inside the container available locally.
// "forwardPorts": [],
// Use 'postCreateCommand' to run commands after the container is created.
"postCreateCommand": "echo \"This file was added by the postCreateCommand.\" > TEMP.md",
// Configure tool-specific properties.
"customizations": {
// Configure properties specific to VS Code.
"vscode": {
// Add the IDs of extensions you want installed when the container is created.
"extensions": [
"streetsidesoftware.code-spell-checker",
"vscjava.vscode-java-pack"
]
}
}
// Uncomment to connect as root instead. More info: https://aka.ms/dev-containers-non-root.
// "remoteUser": "root"
}
-
保存您的更改。
-
访问 VS Code 命令面板(Shift+Command+P / Ctrl+Shift+P),然后开始键入“重建”。点击 **代码空间:重建容器**。
提示: 您可能偶尔需要执行完整重建以清除缓存并使用新的镜像重建容器。有关更多信息,请参阅 "在代码空间中重建容器"。
在开发容器重建后,您的代码空间再次可用,
postCreateCommand
将被运行,创建一个TEMP.md
文件,并且两个扩展将可供使用。
步骤 4:运行您的应用程序
-
按
F5
运行应用程序。 -
如果在 VS Code 的右下角显示一个“提示”通知消息,询问您是否要切换到标准模式,请点击 **是**。
-
当项目文件导入后,点击 **调试控制台** 选项卡以查看程序输出。
步骤 5:提交更改
当你对你的代码空间进行了更改,无论是新的代码还是配置更改,你都需要提交你的更改。将配置更改提交到你的仓库可以确保任何从该仓库创建代码空间的人都有相同的配置。你所做的任何自定义,例如添加 VS Code 扩展,都将对所有用户可用。
在本教程中,你从模板仓库创建了一个代码空间,因此你的代码空间中的代码尚未存储在仓库中。你可以通过将当前分支发布到 GitHub.com 来创建一个仓库。
有关信息,请参阅“在代码空间中使用源代码控制”。
下一步
你现在应该能够将自定义开发容器配置添加到你自己的 Java 项目中。
以下是一些针对更高级场景的额外资源。