GitHub 缓存与子目录中的 Maven 项目

Posted

技术标签:

【中文标题】GitHub 缓存与子目录中的 Maven 项目【英文标题】:GitHub Cache with Maven project in subdirectory 【发布时间】:2021-01-01 08:52:07 【问题描述】:

我对一个简单的 Maven 项目的 GH Action 工作流程进行了以下配置。

name: Java CI

on:
  pull_request:
    branches:
      - master

jobs:
  tests:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v2
      - name: Set up JDK 11
        uses: actions/setup-java@v1
        with:
          java-version: 11
      - name: Cache Maven repository
        uses: actions/cache@v2
        with:
          path: ~/.m2/repository
          key: $ runner.os -maven-$ hashFiles('**/pom.xml') 
          restore-keys: |
            $ runner.os -maven-
      - name: Verify with Maven
        run: mvn -B -e -ff clean verify

以前一切正常,直到我将 Maven 项目移动到 code 子目录中:

name: Java CI

on:
  pull_request:
    paths:
      - code/**
    branches:
      - master

jobs:
  tests:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v2
      - name: Set up JDK 11
        uses: actions/setup-java@v1
        with:
          java-version: 11
      - name: Cache Maven repository
        uses: actions/cache@v2
        with:
          path: ~/.m2/repository
          key: $ runner.os -maven-$ hashFiles('**/pom.xml') 
          restore-keys: |
            $ runner.os -maven-
      - name: Verify with Maven
        run: mvn -B -e -ff clean verify --file code/pom.xml

现在在日志中我看到缓存步骤显示Cache not found for input keys: Linux-maven-xxxxxxx, Linux-maven-

有谁知道为什么缓存不能与子目录中的项目一起使用? 谢谢。

【问题讨论】:

为什么要移动到子目录?通常 pom 文件位于项目的根目录中?...此外,您为什么对 paths: - code/**.. 做出反应? 之所以将其移动到子目录中是因为根目录包含其他资源,例如(AWS)CDK、K8S 等。而且由于该工作只是运行 maven 测试,因此它以更改为条件code 文件夹。 【参考方案1】:

检查以确保您没有在 settings.yaml 文件中覆盖 localRepository。 Maven 将使用默认的本地存储库~/.m2/repository,无论您将项目目录放在哪里。

作为测试,如果您当前没有覆盖默认的本地 maven repo 目录,您可以尝试更改工件的 maven 存储库路径

在作业开始之前将以下环境变量添加到您的工作流程中

  env: 
     MAVEN_OPTS: "-Dmaven.repo.local=$ github.workspace /repository"

然后使用以下调用缓存操作

  - name: Cache Maven repository
    uses: actions/cache@v2
    with:
      path: "$ github.workspace /repository"
      key: $ runner.os -maven-$ hashFiles('**/pom.xml') 
      restore-keys: |
        $ runner.os -maven-

【讨论】:

以上是关于GitHub 缓存与子目录中的 Maven 项目的主要内容,如果未能解决你的问题,请参考以下文章

Maven项目构建基础知识

sts如何添加gradle子工程

GitHub Actions:在 Windows 环境中缓存 Maven .m2 存储库 C\:\\Users\runneradmin\\.m2\repository:无法统计:没有这样的文件或目录

创建maven项目pom.xml出现错误(依赖Missing)

[菜鸟SpringCloud入门]第一章:构建多模块的Maven项目+创建注册中心Eureka子模块

IDEA 导入Java项目,依赖maven依赖命令(解决IDEA导入Github项目目录灰色问题,无法运行)