# 使用 Gradle 构建和测试 Java

了解如何在 GitHub Actions中创建持续集成 （CI） 工作流，以便使用 Gradle 生成和测试Java项目。

## 简介

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

GitHub 托管的运行器具有预安装了软件的工具缓存，包括 Java 开发工具包 (JDK) 和 Gradle。 有关 JDK 和 Gradle 的软件和预安装版本列表，请参阅“[GitHub 托管的运行程序](/zh/actions/using-github-hosted-runners/about-github-hosted-runners#supported-software)”。

## 先决条件

你应该熟悉 YAML 和 GitHub Actions 的语法。 有关详细信息，请参阅：

* [GitHub Actions 的工作流语法](/zh/actions/using-workflows/workflow-syntax-for-github-actions)
* [撰写工作流程](/zh/actions/learn-github-actions)

建议你基本了解 Java 和 Gradle 框架。 有关详细信息，请参阅 [Gradle 用户手册](https://docs.gradle.org/current/userguide/userguide.html)。

## 使用 Gradle 工作流模板

若要快速开始使用，请将工作流模板添加到存储库的 `.github/workflows` 目录。

GitHub 提供适用于大多数基于 Gradle 的 Java 项目的 Gradle 工作流模板。 本指南的后续部分提供了如何自定义此工作流模板的示例。

1. 在 GitHub 上，导航到存储库的主页面。1. 在仓库名称下，单击“<svg version="1.1" width="16" height="16" viewBox="0 0 16 16" class="octicon octicon-play" aria-label="play" role="img"><path d="M8 0a8 8 0 1 1 0 16A8 8 0 0 1 8 0ZM1.5 8a6.5 6.5 0 1 0 13 0 6.5 6.5 0 0 0-13 0Zm4.879-2.773 4.264 2.559a.25.25 0 0 1 0 .428l-4.264 2.559A.25.25 0 0 1 6 10.559V5.442a.25.25 0 0 1 .379-.215Z"></path></svg> Actions”\*\*\*\*。

   ![“github/docs”存储库的选项卡的屏幕截图。 “操作”选项卡以橙色边框突出显示。](/assets/images/help/repository/actions-tab-global-nav-update.png)1. 如果存储库中已有工作流，请单击“新建工作流”。

2. “选择工作流”页面显示一系列推荐的工作流模板。 搜索“Java 和 Gradle”

3. 在“使用 Gradle 的Java”工作流中，单击**Configure**。此工作流程执行以下步骤：

4. 检出项目仓库的副本。

5. 设置 Java JDK。

6. 设置 Gradle 环境。 [`gradle/actions/setup-gradle`](https://github.com/gradle/actions) 操作负责工作流运行之间的缓存状态，并提供所有 Gradle 执行的详细摘要。

7. “使用 Gradle 进行生成”步骤使用 [Gradle 包装器](https://docs.gradle.org/current/userguide/gradle_wrapper.html)执行 `build` 任务。

8. 根据需要编辑工作流。 例如，更改Java版本。

   > \[!NOTE]
   >
   > * 此工作流模板包含未通过 GitHub 认证的操作。 第三方提供的操作受单独的服务条款、隐私政策和支持文档管辖。
   > * 如果使用来自第三方的操作，则应使用提交 SHA 指定的版本。 如果操作已被修改，并且需要使用较新版本，则需要更新 SHA。 可以通过引用标记或分支来指定版本，但操作可能会在没有事先警告的情况下更改。 有关详细信息，请参阅“[安全使用指南](/zh/actions/security-guides/security-hardening-for-github-actions#using-third-party-actions)”。

9. 单击“提交更改”。

工作流文件 `gradle.yml` 将添加到存储库的 `.github/workflows` 目录中。

### 指定 Java 版本和体系结构

工作流模板将 `PATH` 设置为包含 OpenJDK 8，用于 x64 平台。 如果要使用不同的 Java 版本或面向不同的体系结构（`x64` 或 `x86`），可以使用 `setup-java` 操作选择不同的 Java 运行时环境。

例如，要使用由 Adoptium 提供的 11 版本的 JDK，用于 x64 平台，可以使用 `setup-java` 操作并将 `java-version`、`distribution` 和 `architecture` 参数配置为 `'11'`、`'temurin'` 和 `x64`。

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

有关详细信息，请参阅 [`setup-java`](https://github.com/actions/setup-java) 操作。

## 构建和测试代码

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

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

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

```yaml copy
# 此工作流使用未经 GitHub 认证的操作。
# 它们由第三方提供，并受
# 单独的服务条款、隐私政策和支持
# 文档。
steps:
  - uses: actions/checkout@v6
  - uses: actions/setup-java@v4
    with:
      java-version: '17'
      distribution: 'temurin'

  - name: Setup Gradle
    uses: gradle/actions/setup-gradle@017a9effdb900e5b5b2fddfb590a105619dca3c3 # v4.4.2

  - name: Build with Gradle
    run: ./gradlew -b ci.gradle package
```

## 缓存依赖项

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

使用 `gradle/actions/setup-gradle` 操作时，默认启用缓存。 有关详细信息，请参阅 [`gradle/actions/setup-gradle`](https://github.com/gradle/actions/blob/main/setup-gradle/README.md#caching-build-state-between-jobs)。

## 将工作流数据打包为构件

生成成功且测试通过后，可能需要将生成的Java包作为生成项目上传。 这会将构建的包存储为工作流程运行的一部分，并允许你下载它们。 构件可帮助你在拉取请求合并之前在本地环境中测试并调试它们。 有关详细信息，请参阅“[使用工作流工件存储和共享数据](/zh/actions/using-workflows/storing-workflow-data-as-artifacts)”。

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

```yaml copy
# 此工作流使用未经 GitHub 认证的操作。
# 它们由第三方提供，并受
# 单独的服务条款、隐私政策和支持
# 文档。
steps:
  - uses: actions/checkout@v6
  - uses: actions/setup-java@v4
    with:
      java-version: '17'
      distribution: 'temurin'

  - name: Setup Gradle
    uses: gradle/actions/setup-gradle@017a9effdb900e5b5b2fddfb590a105619dca3c3 # v4.4.2

  - name: Build with Gradle
    run: ./gradlew build

  - name: Upload build artifacts
    uses: actions/upload-artifact@v4
    with:
      name: Package
      path: build/libs
```