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

为何Gradle中删除rootProject.buildDir的clean任务会移除模块build目录?

为什么执行gradlew clean会同时删除根项目和模块的build目录?

这问题我刚接触Gradle的时候也踩过坑,乍一看确实不符合直觉,咱们来唠唠背后的原因:

首先,你在根项目的build.gradle里定义的这个clean任务:

task clean(type: Delete) { delete rootProject.buildDir }

它本身确实只会删除根项目根目录下的build文件夹,不会主动去删模块的build目录。那模块的build为啥没了?

核心原因是:当你在根项目执行gradlew clean命令时,Gradle会自动触发所有项目(包括根项目和所有子模块)中名为clean的任务。

每个Android模块(子项目)在应用Android Gradle插件后,都会自动生成一个属于自己的clean任务,这个任务的作用就是删除当前模块下的build目录。当你在根项目运行clean命令时,Gradle会遍历整个项目结构,执行所有匹配的clean任务——根项目的clean删根目录build,每个模块的clean删自己的build,所以最终你看到所有build目录都没了。

可能你会疑惑:我明明在根项目重新定义了clean任务,为啥子模块的还会执行?这是因为Gradle的任务是按名称匹配的,clean是一个约定俗成的任务名,不管是根项目还是子项目的,只要叫这个名字,执行根命令时都会被触发。而且Android插件会自动为每个子模块配置这个任务,不需要你手动写。

如果只想单独清理根项目的build目录,你可以给根项目的任务改个名字,比如叫cleanRootBuild,然后执行gradlew cleanRootBuild,这样就只会删除根目录的build,不会影响模块的了。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.28 10:04:23