【问题标题】:Github-actions: cache repo to speed up maven buildsGithub-actions:缓存 repo 以加速 maven 构建
【发布时间】:2020-01-01 20:32:34
【问题描述】:

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

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

【问题讨论】:

    标签: maven-3 github-actions


    【解决方案1】:

    为了完整起见,这是一个如何在后续构建中缓存本地 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
    

    更多详情请见this page

    【讨论】:

    • 谢谢,我正在寻找确切的解决方案。
    【解决方案2】:

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

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

    【讨论】:

      【解决方案3】:
      【解决方案4】:

      截至 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 示例

      【讨论】:

        【解决方案5】:

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

        【讨论】:

          【解决方案6】:

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

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

          注意其他setup-*也一样:nodepythonruby

          【讨论】:

            【解决方案7】:

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

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

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

            【讨论】:

              猜你喜欢
              • 2021-12-09
              • 1970-01-01
              • 2021-04-29
              • 2021-07-12
              • 1970-01-01
              • 2023-01-27
              • 2021-06-10
              • 2020-12-10
              • 2015-01-22
              相关资源
              最近更新 更多