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

Gradle 4.4:如何让clean任务在依赖加载前执行

Gradle 4.4 解决 clean 与依赖加载顺序/缓存分离问题

方案一:分离build1缓存目录,仅清理专属缓存

这个方案更稳妥,避免影响默认依赖的缓存,核心是让build1的额外库下载到单独的子目录,clean任务根据是否执行build1来调整清理范围。

修改后的build.gradle配置:

ext {
  project.dependencies.add(compile, somelibraries)
}

clean {
    doFirst {
        // 判断是否同时执行clean和build1任务
        def isBuild1Clean = gradle.startParameter.taskNames.containsAll(['clean', 'build1'])
        if (isBuild1Clean) {
            // 仅清理build1专属缓存目录
            delete "${WORKSPACE}/caches/build1"
            println "已清理build1专属缓存"
        } else {
            // 保持原逻辑,清理整个缓存目录
            delete "${WORKSPACE}/caches"
            println "已清理全部缓存"
        }
    }
}

dependencies {
  ecj 'org.eclipse.jdt.core.compiler:ecj:4.6.1'
  compile fileTree(dir: "${WORKSPACE}/lib", include: '*.jar')
}

task build1 {
  // 修改build1的库加载路径,将额外库下载到专属子目录
  def build1CacheDir = "${WORKSPACE}/caches/build1"
  (loads extra libraries into build1CacheDir)
  (some compiling)
}

效果

  • 执行gradle clean build1时,仅删除build1的专属缓存,默认依赖的缓存不受影响,build1执行时会重新下载自己的额外库,不会报错。
  • 单独执行gradle clean时,仍清理整个缓存目录,保留原有逻辑。

方案二:让清理动作提前到配置阶段之前执行

如果无法分离缓存目录,可将清理逻辑移到Gradle的初始化阶段(早于依赖解析的配置阶段),确保删除缓存后,默认依赖能重新下载。

修改后的build.gradle配置:

// 初始化阶段执行,早于配置阶段
def taskNames = gradle.startParameter.taskNames
if (taskNames.contains('clean') && taskNames.contains('build1')) {
    def cacheDir = new File("${WORKSPACE}/caches")
    if (cacheDir.exists()) {
        cacheDir.deleteDir()
        println "已在配置前清理缓存目录"
    }
}

ext {
  project.dependencies.add(compile, somelibraries)
}

clean {
    doFirst {
        // 仅在未同时执行build1时,执行原清理逻辑
        def isBuild1Clean = gradle.startParameter.taskNames.containsAll(['clean', 'build1'])
        if (!isBuild1Clean) {
            delete "${WORKSPACE}/caches"
        }
    }
}

dependencies {
  ecj 'org.eclipse.jdt.core.compiler:ecj:4.6.1'
  compile fileTree(dir: "${WORKSPACE}/lib", include: '*.jar')
}

task build1 {
  (loads extra libraries which I intend to delete using clean)
  (some compiling)
}

效果

  • 执行gradle clean build1时,初始化阶段先删除整个缓存目录,随后配置阶段Gradle会自动重新下载默认依赖到缓存,执行阶段clean任务跳过清理,build1执行时下载自己的额外库,不会报错。
  • 单独执行gradle clean时,仍按原逻辑清理整个缓存目录。

内容的提问来源于stack exchange,提问作者Lunartist

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.07 23:35:36