Skip to main content

使用 Gradle 构建和测试 Java

您可以在 GitHub Actions 中创建持续集成 (CI) 工作流程,以使用 Gradle 构建和测试 Java 项目。

简介

本指南介绍如何使用 Gradle 构建系统为 Java 项目创建执行持续集成 (CI) 的工作流程。 您创建的工作流程将允许您查看拉取请求提交何时会在默认分支上导致构建或测试失败; 这个方法可帮助确保您的代码始终是健康的。 你可以将 CI 工作流扩展到缓存文件并从工作流运行上传项目。

GitHub 托管的运行器有一个带有预装软件的工具缓存,其中包括 Java 开发工具包 (JDK) 和 Gradle。 有关 JDK 和 Gradle 的软件和预安装版本列表,请参阅“Using GitHub-hosted runners”。

先决条件

您应该熟悉 YAML 和 GitHub Actions 的语法。 有关详细信息,请参阅:

建议您对 Java 和 Gradle 框架有个基本的了解。 有关详细信息,请参阅 Gradle 用户手册

使用 Gradle 入门工作流程

GitHub 提供有 Gradle 入门工作流程,适用于大多数基于 Gradle 的 Java 项目。 有关详细信息,请参阅 Gradle 入门工作流。 在创建构建和测试工作流程时,默认入门工作流程是很好的起点,然后您可以自定义入门工作流程以满足项目的需求。

要快速开始,您可以在创建新工作流程时选择预配置的 Gradle 入门工作流程。 有关详细信息,请参阅“GitHub Actions 快速入门”。

也可以通过在存储库的 .github/workflows 目录中创建新文件来手动添加此工作流。

注意:

  • 此工作流使用未通过 GitHub 认证的操作。 这些操作由第三方提供,并受单独的服务条款、隐私政策和支持文档的管辖。
  • GitHub 建议将操作固定到提交 SHA。 若要获取较新版本,需要更新 SHA。 还可以引用标记或分支,但该操作可能会更改而不发出警告。
YAML
name: Java CI

工作流的名称。 GitHub 在存储库的“操作”选项卡下显示工作流的名称。如果省略 name,GitHub 会显示相对于存储库根目录的工作流文件路径。

on: [push]
jobs:
  build:
    runs-on: ubuntu-latest

可以使用其他操作系统运行该工作流。

入门工作流使用 GitHub 托管的 ubuntu-latest 运行器将作业配置为在 Linux 上运行。 可以更改 runs-on 键以在不同的操作系统上运行作业。

例如,你可以通过指定 runs-on: windows-latest 使用 GitHub 托管的 Windows 运行器。 或者,你可以使用 runs-on: macos-latest 在 GitHub 托管的 macOS 运行器上运行。

您还可以在 Docker 容器中运行作业,或者提供在自己的基础架构上运行的自托管运行器。 有关详细信息,请参阅“GitHub Actions 的工作流语法”。

    steps:
      - uses: actions/checkout@v4

该步骤使用 actions/checkout 操作在运行器上下载存储库的副本。

      - name: Set up JDK 17
        uses: actions/setup-java@v3
        with:
          java-version: '17'
          distribution: 'temurin'

该步骤通过 Eclipse Adoptium 使用 actions/setup-java 操作配置 Eclipse Temurin (Java) 17 JDK。

      - name: Validate Gradle wrapper
        uses: gradle/wrapper-validation-action@ccb4328a959376b642e027874838f60f8e596de3

The "Validate Gradle wrapper" step validates the checksums of Gradle Wrapper JAR files present in the source tree.

      - name: Build with Gradle
        uses: gradle/gradle-build-action@749f47bda3e44aa060e82d7b3ef7e40d953bd629
        with:
          arguments: build

The "Build with Gradle" step does a build using the gradle/gradle-build-action action provided by the Gradle organization on GitHub. The action takes care of invoking Gradle, collecting results, and caching state between jobs. For more information see gradle/gradle-build-action.

# 工作流的名称。 GitHub 在存储库的“操作”选项卡下显示工作流的名称。如果省略 `name`,GitHub 会显示相对于存储库根目录的工作流文件路径。
name: Java CI

#
on: [push]
#
jobs:
  build:

    # <!-- This is a YAML comment for use in annotated code examples. -->
    # 可以使用其他操作系统运行该工作流。
    #
    # 入门工作流使用 GitHub 托管的 `ubuntu-latest` 运行器将作业配置为在 Linux 上运行。 可以更改 `runs-on` 键以在不同的操作系统上运行作业。
    #
    # 例如,你可以通过指定 `runs-on: windows-latest` 使用 GitHub 托管的 Windows 运行器。 或者,你可以使用 `runs-on: macos-latest` 在 GitHub 托管的 macOS 运行器上运行。
    #
    # 您还可以在 Docker 容器中运行作业,或者提供在自己的基础架构上运行的自托管运行器。 有关详细信息,请参阅“[AUTOTITLE](/actions/using-workflows/workflow-syntax-for-github-actions#jobsjob_idruns-on)”。
    runs-on: ubuntu-latest
#
    steps:
      # 该步骤使用 `actions/checkout` 操作在运行器上下载存储库的副本。
      - uses: actions/checkout@v4
      # 该步骤通过 Eclipse Adoptium 使用 `actions/setup-java` 操作配置 Eclipse Temurin (Java) 17 JDK。
      - name: Set up JDK 17
        uses: actions/setup-java@v3
        with:
          java-version: '17'
          distribution: 'temurin'
      # The "Validate Gradle wrapper" step validates the checksums of Gradle Wrapper JAR files present in the source tree.
      - name: Validate Gradle wrapper
        uses: gradle/wrapper-validation-action@ccb4328a959376b642e027874838f60f8e596de3
      # The "Build with Gradle" step does a build using the `gradle/gradle-build-action` action provided by the Gradle organization on GitHub. The action takes care of invoking Gradle, collecting results, and caching state between jobs. For more information see [`gradle/gradle-build-action`](https://github.com/gradle/gradle-build-action).
      - name: Build with Gradle
        uses: gradle/gradle-build-action@749f47bda3e44aa060e82d7b3ef7e40d953bd629
        with:
          arguments: build

指定 JVM 版本和架构

初学者工作流程将 PATH 设置为包含 OpenJDK 8,用于 x64 平台。 如果要使用不同的 Java 版本或面向不同的体系结构(x64x86),可以使用 setup-java 操作选择不同的 Java 运行时环境。

例如,要使用由 Adoptium 提供的 11 版本的 JDK,用于 x64 平台,可以使用 setup-java 操作并将 java-versiondistributionarchitecture 参数配置为 '11''temurin'x64

YAML
steps:
  - uses: actions/checkout@v4
  - name: Set up JDK 11 for x64
    uses: actions/setup-java@v3
    with:
      java-version: '11'
      distribution: 'temurin'
      architecture: x64

有关详细信息,请参阅 setup-java 操作。

构建和测试代码

您可以使用与本地相同的命令来构建和测试代码。

默认情况下,入门工作流将运行 build 任务。 在默认的 Gradle 配置中,此命令将下载依赖项、构建类别、运行测试并将类别打包为可分发格式,如 JAR 文件。

如果使用不同的命令来构建项目,或者想要使用不同的任务,则可以指定这些命令。 例如,你可能想要运行在 ci.gradle 文件中配置的 package 任务。

YAML
steps:
  - uses: actions/checkout@v4
  - uses: actions/setup-java@v3
    with:
      java-version: '17'
      distribution: 'temurin'
  - name: Validate Gradle wrapper
    uses: gradle/wrapper-validation-action@ccb4328a959376b642e027874838f60f8e596de3
  - name: Run the Gradle package task
    uses: gradle/gradle-build-action@749f47bda3e44aa060e82d7b3ef7e40d953bd629
    with:
      arguments: -b ci.gradle package

缓存依赖项

可以缓存生成依赖项以加快工作流运行。 成功运行后,gradle/gradle-build-action 会缓存 Gradle 用户主目录的重要部分。 在将来的作业中,将还原缓存,这样就不需要重新编译构建脚本,也不需要从远程包存储库下载依赖项。

使用 gradle/gradle-build-action 操作时,默认启用缓存。 有关详细信息,请参阅 gradle/gradle-build-action

将工作流数据打包为构件

构建成功且测试通过后,您可能想要上传生成的 Java 包作为构件。 这会将构建的包存储为工作流程运行的一部分,并允许您下载它们。 构件可帮助您在拉取请求合并之前在本地环境中测试并调试它们。 有关详细信息,请参阅“将工作流程数据存储为构件”。

Gradle 通常会在 build/libs 目录中创建 JAR、EAR 或 WAR 等输出文件。 可以使用 upload-artifact 操作上传该目录的内容。

YAML
steps:
  - uses: actions/checkout@v4
  - uses: actions/setup-java@v3
    with:
      java-version: '17'
      distribution: 'temurin'
  - name: Validate Gradle wrapper
    uses: gradle/wrapper-validation-action@ccb4328a959376b642e027874838f60f8e596de3
  - name: Build with Gradle
    uses: gradle/gradle-build-action@749f47bda3e44aa060e82d7b3ef7e40d953bd629
    with:
      arguments: build
  - uses: actions/upload-artifact@v3
    with:
      name: Package
      path: build/libs