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

Gradle自定义任务中clean未生效,如何确保其在assemble前执行?

问题解决思路

首先,你重复写了两次:clean在dependsOn里,这完全没用——Gradle会自动去重重复的依赖任务,直接删掉多余的即可。

核心问题:任务执行顺序未明确

你当前的写法只是声明了buildAllForAppRelease依赖这些任务,但Gradle默认只会保证所有依赖任务都执行,不会强制它们的先后顺序(尤其是开启并行构建时)。这就导致:clean可能和assembleDebug/assembleRelease等任务同时运行,你看到的“clean出现在输出但没删文件”,大概率是clean刚删完文件,构建任务又立刻生成了新文件,或者构建任务先开始生成,clean后执行但没影响到已生成的文件。

解决办法:强制构建任务在clean之后执行

给所有构建任务加上mustRunAfter ':clean',明确它们必须等clean完成后再执行。修改后的任务代码如下:

task buildAllForAppRelease {
    dependsOn ':clean', 'app:assembleDebug', 'app:assembleRelease', 'app:bundleRelease'
    // 强制所有构建任务在clean完成后再执行
    'app:assembleDebug'.mustRunAfter ':clean'
    'app:assembleRelease'.mustRunAfter ':clean'
    'app:bundleRelease'.mustRunAfter ':clean'
}

这样Gradle会先执行:clean,再去执行后面的构建任务(如果开启了并行,后面的构建任务之间可以并行执行,但都会等clean结束后才启动)。

关于org.gradle.parallel=true的影响

确实有影响!并行模式下,Gradle会尽可能同时执行没有依赖关系的任务。你之前没明确顺序,clean和构建任务就可能被同时调度,导致文件删除和生成操作冲突。加上mustRunAfter之后,就给它们加上了强制顺序约束,并行只会在允许的任务间进行(比如assembleDebug和assembleRelease可以同时运行),不会再和clean并行。

如果你想更灵活,也可以用shouldRunAfter,但mustRunAfter是强约束,更适合你的场景——必须等clean完成才能开始构建。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.05 14:45:31