Skip to main content

使用 Maven 构建和测试 Java

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

简介

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

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

先决条件

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

建议您对 Java 和 Maven 框架有个基本的了解。 有关详细信息,请参阅 Maven 文档中的 Maven 入门指南

使用 Maven 入门工作流

要快速学会使用,请将入门工作流添加到存储库的 .github/workflows 目录。

GitHub 提供有 Maven 入门工作流,该工作流应会适用于大多数基于 Maven 的 Java 项目。 本指南的后续部分提供了如何自定义入门工作流的示例。

  1. 在 GitHub.com 上,导航到存储库的主页。

  2. 在存储库名称下,单击 “操作”。

    “github/docs”存储库的选项卡的屏幕截图。 “操作”选项卡以橙色边框突出显示。

  3. 如果存储库中已有工作流,请单击“新建工作流”。

  4. “选择工作流”页面显示了一系列推荐的入门工作流。 搜索“Java with Maven”。

  5. 在“Java with Maven”工作流上,单击 “配置”****。

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

  7. 单击“提交更改”。

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

指定 Java 版本和体系结构

初学者工作流程将 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 操作。

构建和测试代码

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

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

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

YAML
steps:
  - uses: actions/checkout@v4
  - uses: actions/setup-java@v3
    with:
      java-version: '17'
      distribution: 'temurin'
  - name: Run the Maven verify phase
    run: mvn --batch-mode --update-snapshots verify

缓存依赖项

您可以缓存依赖项来加快工作流程运行。 成功运行后,本地 Maven 存储库将存储在缓存中。 在未来的工作流程运行中,缓存将会恢复,因此不需要从远程 Maven 仓库下载依赖项。 可以简单地使用 setup-java 操作缓存依赖项,也 可以使用 cache 操作进行自定义和更高级的配置。

YAML
steps:
  - uses: actions/checkout@v4
  - name: Set up JDK 11
    uses: actions/setup-java@v3
    with:
      java-version: '17'
      distribution: 'temurin'
      cache: maven
  - name: Build with Maven
    run: mvn --batch-mode --update-snapshots verify

此工作流程将保存本地 Maven 存储库的内容,该存储库位于运行器主目录的 .m2 目录。 缓存密钥将是 pom.xml 的哈希内容,因此更改 pom.xml 会使缓存失效 。

将工作流数据打包为构件

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

Maven 通常会在 target 目录中创建 JAR、EAR 或 WAR 等输出文件。 要将这些项目上传为构件,可以将它们复制到包含要上传的构件的新目录中。 例如,可创建一个名为 staging 的目录。 然后,可以使用 upload-artifact 操作上传该目录的内容。

YAML
steps:
  - uses: actions/checkout@v4
  - uses: actions/setup-java@v3
    with:
      java-version: '17'
      distribution: 'temurin'
  - run: mvn --batch-mode --update-snapshots verify
  - run: mkdir staging && cp target/*.jar staging
  - uses: actions/upload-artifact@v3
    with:
      name: Package
      path: staging