问题描述
我对一个简单的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-
。
有人知道为什么缓存不能在子目录中与项目一起工作吗? 谢谢。
解决方法
检查以确保您没有覆盖settings.yaml文件中的localRepository
。无论您将项目目录放在何处,Maven都将使用默认的本地存储库~/.m2/repository
。
作为测试,如果您当前未覆盖默认的本地Maven回购目录,则可以尝试更改工件的Maven存储库路径
在作业开始之前将以下env变量添加到您的工作流中
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-