简介
本指南向您展示如何创建一个工作流,使用 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 项目。本指南后续部分将举例说明如何自定义此工作流模板。
-
在 GitHub 上,导航到存储库的主页。
-
在您的存储库名称下,单击 Actions.
-
如果您已经在存储库中拥有工作流,请单击“新建工作流”。
-
“选择工作流”页面显示推荐的工作流模板选择。搜索“使用 Maven 的 Java”。
-
在“使用 Maven 的 Java”工作流上,单击“配置”。
-
根据需要编辑工作流。例如,更改 Java 版本。
-
单击“提交更改”。
maven.yml
工作流文件将添加到存储库的.github/workflows
目录。
指定 Java 版本和架构
工作流模板设置PATH
以包含x64平台的OpenJDK 8。如果要使用其他版本的Java或目标不同的架构(x64
或x86
),可以使用setup-java
操作来选择不同的Java运行时环境。
例如,要使用Adoptium提供的x64平台上的JDK 11版本,可以使用setup-java
操作并将java-version
、distribution
和architecture
参数分别配置为'11'
、'temurin'
和x64
。
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
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
目标。
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
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
操作进行自定义和更高级的配置。
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
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
操作上传该目录的内容。
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
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