# 使用 Ant 生成和测试Java

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

> \[!NOTE]
> GitHub Enterprise Server 目前不支持 GitHub 托管的运行器。

## 简介

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

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

## 先决条件

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

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

建议你基本了解 Java 和 Ant 框架。 有关详细信息，请参阅 [Apache Ant 手册](https://ant.apache.org/manual/)。

### 在 GitHub Enterprise Server 上使用自托管的运行器

在包含自承载运行器的 GitHub Enterprise Server 上使用设置操作（例如 `actions/setup-LANGUAGE`）时，可能需要在无法访问 Internet 的运行器上设置工具缓存。 有关详细信息，请参阅“[在未接入互联网的自托管运行器上设置工具缓存](/zh/enterprise-server@3.20/admin/github-actions/managing-access-to-actions-from-githubcom/setting-up-the-tool-cache-on-self-hosted-runners-without-internet-access)”。

## 使用 Ant 工作流模板

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

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

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与Ant”。

3. 在“使用 Ant 的 Java”工作流中，单击 **Configure**。

   如果未找到“使用 Ant 的Java”工作流模板，请将以下工作流代码复制到存储库的 `ant.yml` 目录中名为 `.github/workflows` 的新文件。

   ```yaml copy
   name: Java CI

   on:
     push:
       branches: [ $default-branch ]
     pull_request:
       branches: [ $default-branch ]

   jobs:
     build:
       runs-on: ubuntu-latest

       steps:
       - uses: actions/checkout@v6
       - name: Set up JDK 11
         uses: actions/setup-java@v4
         with:
           java-version: '11'
           distribution: 'temurin'
       - name: Build with Ant
         run: ant -noinput -buildfile build.xml
   ```

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

5. 单击“提交更改”。

### 指定 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.xml` 文件中指定的默认目标。 默认目标通常被设置为构建类、运行测试并将类打包为其可分发格式，例如 JAR 文件。

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

```yaml copy
steps:
  - uses: actions/checkout@v6
  - uses: actions/setup-java@v4
    with:
      java-version: '17'
      distribution: 'temurin'
  - name: Run the Ant jar target
    run: ant -noinput -buildfile build-ci.xml jar
```

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

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

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

```yaml copy
steps:
  - uses: actions/checkout@v6
  - uses: actions/setup-java@v4
    with:
      java-version: '17'
      distribution: 'temurin'

  - run: ant -noinput -buildfile build.xml
  - uses: actions/upload-artifact@v3
    with:
      name: Package
      path: build/jar
```