15

每次触发我的构建工作流程时都会下载 Maven 依赖项。

Travis CI 提供了一种缓存 maven 存储库的方法。Github 操作是否提供了允许缓存 Maven 存储库的类似功能?

4

7 回答 7

29

为了完整起见,这是一个如何在后续构建中缓存本地 Maven 存储库的示例:

steps:
  # Typical Java workflow steps
  - uses: actions/checkout@v1
  - name: Set up JDK 11
    uses: actions/setup-java@v1
    with:
      java-version: 11
  # Step that does that actual cache save and restore
  - uses: actions/cache@v1
    with:
      path: ~/.m2/repository
      key: ${{ runner.os }}-maven-${{ hashFiles('**/pom.xml') }}
      restore-keys: |
        ${{ runner.os }}-maven-
  # Step that runs the tests
  - name: Run tests
    run: mvn test

有关详细信息,请参阅此页面。

于 2020-01-02T23:37:59.933 回答
6

显然,截至 2019 年 9 月 10 日,Github Actions 中不存在构建依赖项的缓存。Github 工作人员已经承认这个功能是必要的,并回答说“我们正在处理工作流执行之间的缓存包和工件,我们将在 11 月中旬 [2019] 之前拥有它。”

来源:https ://github.community/t5/GitHub-Actions/Caching-files-between-GitHub-Action-executions/mp/30974/highlight/true#M630

于 2019-09-10T05:15:43.117 回答
3

依赖缓存现在可用:

https://help.github.com/en/actions/automating-your-workflow-with-github-actions/caching-dependencies-to-speed-up-workflows

于 2019-11-17T04:56:17.727 回答
3

截至 2021 年,最新的官方答案是

- name: Cache local Maven repository
  uses: actions/cache@v2
  with:
    path: ~/.m2/repository
    key: ${{ runner.os }}-maven-${{ hashFiles('**/pom.xml') }}
    restore-keys: |
      ${{ runner.os }}-maven-

取自https://github.com/actions/cache/blob/master/examples.md#java---maven的官方 github 示例

于 2021-06-14T02:01:36.280 回答
2

我开始使用 skjolber 的 Maven Cache Github Action,见https://github.com/marketplace/actions/maven-cache。我的第一次测试非常积极。第一个构建从 Maven Central 下载了依赖项;随后的构建在缓存中找到了依赖项。

于 2021-07-29T12:09:17.903 回答
1

对于 maven,您现在可以使用它setup-java来缓存依赖项。例子:

    - uses: actions/setup-java@v2.3.1
      name: Install Java
      with:
        java-version: 8
        distribution: 'adopt'
        cache: 'maven'

请注意,其他setup-*:node和.pythonruby

于 2021-11-28T17:06:02.153 回答
0

对于多模块项目,可以通过使用https://github.com/avodonosov/hashver-maven-plugin/仅构建受最近更改影响的模块来加速构建

考虑到缓存本地 maven 存储库的可能性,这将起作用,如@Rob van der Leek 的回答中所述。

mvn install每次构建后的项目工件,并且在下一次构建时, hashver-maven-plugin 将找到未受影响模块的工件并跳过它们。

于 2020-08-05T05:26:13.783 回答