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 项目的主要内容,如果未能解决你的问题,请参考以下文章
GitHub Actions:在 Windows 环境中缓存 Maven .m2 存储库 C\:\\Users\runneradmin\\.m2\repository:无法统计:没有这样的文件或目录
创建maven项目pom.xml出现错误(依赖Missing)