You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Azure Pipeline任务间保留.m2目录缓存

Azure Pipeline Maven缓存复用问题

初始问题

尝试让Azure Pipeline中的多个任务复用第一个任务下载的Maven缓存(.m2目录),但发现每个任务执行前文件会被删除。在第二个任务中执行tree $(MAVEN_CACHE_FOLDER)命令时,返回错误:

/home/vsts/work/1/a/.m2/repository [error opening dir]

对应的azure-pipeline.yml配置:

pool:
  vmImage: ubuntu-latest

variables:
  MAVEN_CACHE_FOLDER: $(Build.ArtifactStagingDirectory)/.m2/repository
  MAVEN_OPTS: '-Dmaven.repo.local=$(MAVEN_CACHE_FOLDER)'

stages:
  - stage: validate
    displayName: VALIDATE
    jobs:
      - job: java_validations
        displayName: Java Validations
        workspace:
          clean: outputs
        steps:
          - checkout: self
            clean: false
          - task: Cache@2
            displayName: Cache Maven local repo
            inputs:
              key: 'maven | $(Agent.OS) | **/pom.xml, !**/target/**'
              restoreKeys: |
                maven | $(Agent.OS)
                maven
              path: $(MAVEN_CACHE_FOLDER)
          - script: |
              mvn validate $(MAVEN_OPTS)
            displayName: Maven Validate
          - script: |
              mvn checkstyle:check $(MAVEN_OPTS)
            displayName: Maven Checkstyle
          - script: |
              tree $(MAVEN_CACHE_FOLDER)
            displayName: show MAVEN_CACHE_FOLDER tree
      - job: unit_tests
        displayName: Unit Tests
        dependsOn:
          - java_validations
        workspace:
          clean: outputs
        steps:
          - checkout: none
            clean: false
          - script: |
              tree $(MAVEN_CACHE_FOLDER)
            displayName: show MAVEN_CACHE_FOLDER tree
          - task: Maven@3
            inputs:
              mavenPomFile: 'pom.xml'
              options: 'test-compile failsafe:integration-test -Dcheckstyle.skip -Pun-tests $(MAVEN_OPTS)'
              publishJUnitResults: false
              mavenVersionOption: 'Default'
              mavenAuthenticateFeed: true
              effectivePomSkip: false
              sonarQubeRunAnalysis: true
              sqMavenPluginVersionChoice: 'latest'
            env:
              JAVA_HOME: $(JAVA_HOME_17_X64)
              PATH: $(JAVA_HOME_17_X64)/bin:$(PATH)

更新后的问题

在调整配置后,现在遇到新的Maven缓存问题:即使已成功下载缓存且能看到m2/repository文件夹存在,但调用Maven任务时仍会重新下载依赖,导致缓存完全失效。

更新后的azure-pipeline.yml配置:

pool:
  vmImage: ubuntu-latest

variables:
  MAVEN_CACHE_FOLDER: $(HOME)/.m2/repository
  MAVEN_OPTS: '-Dmaven.repo.local=$(MAVEN_CACHE_FOLDER)'

stages:
  - stage: validate
    displayName: VALIDATE
    jobs:
      - job: java_validations
        displayName: Java Validations
        workspace:
          clean: outputs
        steps:
          - checkout: self
            clean: false
          - task: Cache@2
            displayName: 'Cache Maven local repo'
            inputs:
              key: '"funcs" | maven | "$(Agent.OS)" | pom.xml'
              restoreKeys: |
              path: $(MAVEN_CACHE_FOLDER)
          - script: |
              mvn validate $(MAVEN_OPTS)
            displayName: Maven Validate
          - script: |
              mvn checkstyle:check $(MAVEN_OPTS)
            displayName: Maven Checkstyle
          - script: |
              tree $(MAVEN_CACHE_FOLDER)
            displayName: show MAVEN_CACHE_FOLDER tree
      - job: unit_tests
        displayName: Unit Tests
        dependsOn:
          - java_validations
        workspace:
          clean: outputs
        steps:
          - checkout: self
            clean: false
          - task: Cache@2
            displayName: 'Cache Maven local repo'
            inputs:
              key: '"funcs" | maven | "$(Agent.OS)" '
              restoreKeys: |
              path: $(MAVEN_CACHE_FOLDER)
          - script: |
              tree $(MAVEN_CACHE_FOLDER)
            displayName: show MAVEN_CACHE_FOLDER tree
          - task: Maven@3
            inputs:
              mavenPomFile: 'pom.xml'
              options: 'test-compile failsafe:integration-test -Dcheckstyle.skip -Pun-tests $(MAVEN_OPTS)'
              publishJUnitResults: false
              mavenVersionOption: 'Default'
              mavenAuthenticateFeed: true
              effectivePomSkip: false
              sonarQubeRunAnalysis: true
              sqMavenPluginVersionChoice: 'latest'
            env:
              JAVA_HOME: $(JAVA_HOME_17_X64)
              PATH: $(JAVA_HOME_17_X64)/bin:$(PATH)
          - script: |
              tree $(MAVEN_CACHE_FOLDER)
            displayName: show MAVEN_CACHE_FOLDER tree

内容的提问来源于stack exchange,提问作者Diego Cândido da Silva

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.18 20:35:23