Skip to main content

为 GitHub Codespaces 设置 Java 项目

通过创建自定义开发容器,在 GitHub Codespaces 中开始使用 Java 项目。

简介

本指南介绍如何设置 Java 项目 在 Codespaces 中,使用 Visual Studio Code 桌面应用程序,或 VS Code Web 客户端。 这样会向你演示在 codespace 中打开项目,以及添加和修改预定义开发容器配置的示例。

先决条件

步骤 1:在代码空间中打开项目

  1. 在存储库名称下,使用“ 代码”下拉菜单,然后在“Codespaces”选项卡中,单击加号 () 。

    新建代码空间按钮

创建代码空间时,您的项目是在专用于您的远程 VM 上创建的。 默认情况下,代码空间的容器有许多语言和运行时,包括 Java、nvm、npm 和 Yarn。 它还包括一套常见的工具,例如 git、wget、rsync、openssh 和 nano。

You can customize your codespace by adjusting the amount of vCPUs and RAM, adding dotfiles to personalize your environment, or by modifying the tools and scripts installed. For more information, see "Customizing your codespace."

GitHub Codespaces uses a file called devcontainer.json to configure the development container that you use when you work in a codespace. Each repository can contain one or more devcontainer.json files, to give you exactly the development environment you need to work on your code in a codespace.

On launch, GitHub Codespaces uses a devcontainer.json file, and any dependent files that make up the dev container configuration, to install tools and runtimes, and perform other setup tasks that the project requires. For more information, see "Introduction to dev containers."

步骤 2:从模板将开发容器配置添加到存储库

GitHub Codespaces 的默认开发容器或“开发容器”预先安装了最新的 Java 版本、包管理器(Maven、Gradle)和其他常用工具。 但是,我们建议配置自己的开发容器,以包含项目所需的所有工具和脚本。 这将确保存储库中的所有 GitHub Codespaces 用户都拥有完全可复制的环境。

若要将存储库设置为使用自定义开发容器,需要创建一个或多个 devcontainer.json 文件。 可以在 Visual Studio Code 中从预定义配置模板中添加这些文件,也可以自行编写。 有关开发容器配置的详细信息,请参阅“开发容器简介”。

  1. 访问 Visual Studio Code Command Palette (Shift+Command+P (Mac) / Ctrl+Shift+P (Windows/Linux)),然后开始键入“开发容器”。 选择“代码空间: 添加开发容器配置文件...”。

    Visual Studio Code Command Palette 中的“代码空间: 添加开发容器配置文件...”

  2. 对于本示例,请单击“Java”。 实际上,您可以选择任何特定于 Java 的容器或 Java 和 Azure 函数等工具的组合。 从列表中选择 Java 选项

  3. 单击推荐的 Java 版本。 Java 版本选择 1. 访问 VS Code Command Palette (Shift+Command+P (Mac)/Ctrl+Shift+P (Windows/Linux)),然后开始键入“重新生成”。 选择“代码空间: 重生成容器”。

    命令面板中“Rebuild Container”命令的屏幕截图

    提示:有时可能需要完全重新生成容器以清除缓存并使用新映像重新生成容器。 有关详细信息,请参阅“完全重新生成容器”。

开发容器的剖析

添加 Java 开发容器模板会将 .devcontainer 目录添加到项目存储库的根目录中,其中包含以下文件:

  • devcontainer.json
  • Dockerfile

新添加的 devcontainer.json 文件定义了在示例之后描述的几个属性。

devcontainer.json

// For format details, see https://aka.ms/vscode-remote/devcontainer.json or this file's README at:
// https://github.com/microsoft/vscode-dev-containers/tree/v0.159.0/containers/java
{
    "name": "Java",
    "build": {
        "dockerfile": "Dockerfile",
        "args": {
            // Update the VARIANT arg to pick a Java version: 11, 14
            "VARIANT": "11",
            // Options
            "INSTALL_MAVEN": "true",
            "INSTALL_GRADLE": "false",
            "INSTALL_NODE": "false",
            "NODE_VERSION": "lts/*"
        }
    },

    // Set *default* container specific settings.json values on container create.
    "settings": {
        "terminal.integrated.shell.linux": "/bin/bash",
        "java.home": "/docker-java-home",
        "maven.executable.path": "/usr/local/sdkman/candidates/maven/current/bin/mvn"
    },

    // Add the IDs of extensions you want installed when the container is created.
    "extensions": [
        "vscjava.vscode-java-pack"
    ],

    // 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",

    // Uncomment to connect as a non-root user. See https://aka.ms/vscode-remote/containers/non-root.
    "remoteUser": "vscode"
}
  • name - 可以将开发容器命名为任何名称,这只是默认名称。
  • build - 生成属性。
    • dockerfile - 在 build 对象中,dockerfile 包含 Dockerfile 的路径,该文件也是从模板中添加的。
    • args
      • variant:此文件仅包含一个生成参数,即传递到 Dockerfile 的 Java 版本。
  • settings - 这些是你可以设置的 Visual Studio Code 设置。
    • terminal.integrated.shell.linux - 虽然 bash 是此处的默认设置,但你可以通过修改它来使用其他终端 shell。
  • extensions - 这些是默认包含的扩展。
    • vscjava.vscode-java-pack - Java 扩展包为 Java 开发提供了常用的扩展,以帮助你入门。
  • forwardPorts - 此处列出的任何端口都将自动转发。 有关详细信息,请参阅“在 codespace 中转发端口。”
  • postCreateCommand - 使用此方法在创建 codespace 后,运行未在 Dockerfile 中定义的命令。
  • remoteUser - 默认情况下以 vscode 用户身份运行,但可以选择将其设置为 root

Dockerfile

# See here for image contents: https://github.com/microsoft/vscode-dev-containers/tree/v0.159.0/containers/java/.devcontainer/base.Dockerfile
ARG VARIANT="14"
FROM mcr.microsoft.com/vscode/devcontainers/java:0-${VARIANT}

# [Optional] Install Maven or Gradle
ARG INSTALL_MAVEN="false"
ARG MAVEN_VERSION=3.6.3
ARG INSTALL_GRADLE="false"
ARG GRADLE_VERSION=5.4.1
RUN if [ "${INSTALL_MAVEN}" = "true" ]; then su vscode -c "source /usr/local/sdkman/bin/sdkman-init.sh && sdk install maven \"${MAVEN_VERSION}\""; fi \
    && if [ "${INSTALL_GRADLE}" = "true" ]; then su vscode -c "source /usr/local/sdkman/bin/sdkman-init.sh && sdk install gradle \"${GRADLE_VERSION}\""; fi

# [Optional] Install a version of Node.js using nvm for front end dev
ARG INSTALL_NODE="true"
ARG NODE_VERSION="lts/*"
RUN if [ "${INSTALL_NODE}" = "true" ]; then su vscode -c "source /usr/local/share/nvm/nvm.sh && nvm install ${NODE_VERSION} 2>&1"; fi

# [Optional] Uncomment this section to install additional OS packages.
# RUN apt-get update && export DEBIAN_FRONTEND=noninteractive \
#     && apt-get -y install --no-install-recommends <your-package-list-here>

# [Optional] Uncomment this line to install global node packages.
# RUN su vscode -c "source /usr/local/share/nvm/nvm.sh && npm install -g <your-package-here>" 2>&1

你可以使用 Dockerfile 添加其他容器层,以指定要包含在容器中的操作系统包、Java 版本或全局包。

步骤 3:修改 devcontainer.json 文件

添加了开发容器配置并基本了解所有功能之后,现在可以进行更改以进一步自定义你的环境。 在此示例中,您将在代码空间启动时添加属性以安装扩展和项目依赖项。

  1. 在资源管理器中,从树中选择 devcontainer.json 文件以将其打开。 可能需要展开 .devcontainer 文件夹才能看到它。

    Explorer 中的 devcontainer.json 文件

  2. 将以下行添加到 devcontainer.json 文件的 extensions 之后:

    JSON
    "postCreateCommand": "npm install",
    "forwardPorts": [4000],

    有关可以在 devcontainer.json 文件中设置的设置和属性的信息,请参阅 Development Containers 网站上的规范

  3. 访问 VS Code Command Palette (Shift+Command+P (Mac)/Ctrl+Shift+P (Windows/Linux)),然后开始键入“重新生成”。 选择“代码空间: 重生成容器”。

    命令面板中“Rebuild Container”命令的屏幕截图

    提示:有时可能需要完全重新生成容器以清除缓存并使用新映像重新生成容器。 有关详细信息,请参阅“完全重新生成容器”。

    在代码空间内进行重建可确保在将更改提交到仓库之前,更改能够按预期工作。 如果某些问题导致了故障,您将进入带有恢复容器的代码空间中,您可以从该容器进行重建以继续调整容器。

步骤 4:运行应用程序

在上一部分中,你使用 postCreateCommand 通过 npm 安装了一组包。 您现在可以使用它来通过 npm 运行应用程序。

  1. F5 运行应用程序。

  2. 项目启动时,应会在 VS Code 的右下角看到一条“toast”通知消息,其中包含连接到项目使用的端口的提示。

    端口转发“toast”通知

步骤 5:提交更改

在对代码空间进行更改(无论是添加新代码还是更改配置)之后,您需要提交更改。 将更改提交到仓库可确保从此仓库创建代码空间的其他任何人都具有相同的配置。 这也意味着你所做的任何自定义,例如添加 VS Code 扩展,都会显示给所有用户。

有关详细信息,请参阅“在 codespace 中使用源代码管理”。

后续步骤

现在,你应该准备好了在 GitHub Codespaces 中开始开发 Java 项目。 以下是用于更高级场景的一些额外资源。