跳至主要内容

使用 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 上,导航到存储库的主页。

  2. 在您的存储库名称下,单击 Actions.

    Screenshot of the tabs for the "github/docs" repository. The "Actions" tab is highlighted with an orange outline.

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

  4. “选择工作流”页面显示推荐的工作流模板选择。搜索“使用 Maven 的 Java”。

  5. 在“使用 Maven 的 Java”工作流上,单击“配置”。

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

  7. 单击“提交更改”。

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

指定 Java 版本和架构

工作流模板设置PATH以包含x64平台的OpenJDK 8。如果要使用其他版本的Java或目标不同的架构(x64x86),可以使用setup-java操作来选择不同的Java运行时环境。

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

YAML
steps:
  - uses: actions/checkout@v4
  - name: Set up JDK 11 for x64
    uses: actions/setup-java@v4
    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@v4
    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@v4
    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@v4
    with:
      java-version: '17'
      distribution: 'temurin'
  - run: mvn --batch-mode --update-snapshots verify
  - run: mkdir staging && cp target/*.jar staging
  - uses: actions/upload-artifact@v4
    with:
      name: Package
      path: staging