./gradlew build 报“Task not found”主因是任务名不准确、作用域错误(如多模块项目漏写:app:前缀)、配置缓存跳过动态任务、或--configure-on-demand导致子项目未加载;应先用tasks --all搜索并确认路径与大小写。

直接用 ./gradlew taskName 就能执行,但实际中常因任务名不准确、作用域不对或缓存干扰而失败。
为什么 ./gradlew build 有时没反应或报错 “Task not found”
Gradle 默认只显示“可操作任务”(actionable tasks),即有 doLast 或 @TaskAction 的任务;很多任务(比如插件自动生成的)属于“生命周期任务”或被分组到 other,默认不列出来。
- 运行
./gradlew tasks只显示当前 project 下已归组的任务,子项目(如:app)里的任务不会出现 - 想看全部任务,必须加
--all:运行./gradlew tasks --all - Android 项目中,
build是根项目任务,但真正打包 APK 的是:app:assembleDebug—— 漏掉:app:前缀就会找不到 - 如果项目启用了配置缓存(
configuration-cache),某些动态注册的任务可能被跳过,导致tasks --all也看不到
./gradlew 执行时任务名大小写和冒号不能错
Gradle 对任务名严格区分大小写,且多模块项目中必须带完整路径前缀。例如:
-
./gradlew assemble→ 在根目录下执行,通常无效(除非根项目自己定义了该任务) -
./gradlew :app:assemble→ 正确,执行app模块的assemble任务 -
./gradlew :app:assembleDebug→ 更精确,只构建 debug 版本 APK -
./gradlew cleanBuildCache→ 不是clean-build-cache,连字符会被当成分隔符解析失败
执行失败时先确认任务是否存在,而不是改脚本
常见错误现象:Task 'xxx' not found in root project 或静默退出无输出。这时别急着写新任务,先做三件事:
- 运行
./gradlew tasks --all | grep -i "xxx"精准搜索(Linux/macOS)或./gradlew tasks --all后手动翻找 - 检查当前终端所在目录是否为项目根目录(
settings.gradle所在位置),否则 Gradle 找不到项目结构 - 临时禁用配置缓存验证:加
--no-configuration-cache参数再试一次,排除缓存导致任务未注册的问题
最易忽略的一点:Gradle 6.0+ 默认启用 --configure-on-demand(按需配置),某些子项目任务在未显式引用时根本不会加载——这意味着即使 tasks --all 显示了 :feature:build,如果你没在 settings.gradle 中 include ':feature',它依然执行不了。


















