能,但默认只显示有 description 或属于标准生命周期的任务;加 --all 可列出所有已注册任务,包括无描述和内部任务,加 --no-daemon 可避免 daemon 缓存导致的列表滞后。

gradle tasks 能列出所有任务吗
能,但默认只显示“可被调用”的任务(即有 description 或属于标准生命周期任务),不带描述的自定义任务会被隐藏。这是最常让人误以为“任务没注册成功”的原因。
- 运行
./gradlew tasks—— 只显示有描述、且未被禁用的任务 - 加
--all参数:./gradlew tasks --all—— 强制列出所有已注册任务(包括无描述、内部 task) - 加
--no-daemon可排除 daemon 缓存导致的列表滞后(尤其改了build.gradle后立即执行却看不到新任务时)
为什么在子项目里执行 tasks 没反应
因为 Gradle 默认只作用于当前目录对应的 project。多项目结构下,根项目执行 tasks 不会自动递归进子项目,子项目目录下又可能没配置 settings.gradle 或被 include 错误排除。
- 确认子项目是否被正确 include:检查根目录
settings.gradle是否含include ':submodule' - 想一次性看全部项目任务:用
./gradlew :submodule:tasks(冒号开头表示绝对路径) - 或者进子项目目录后,确保该目录下有
build.gradle且不是空文件——空build.gradle会导致 Gradle 忽略该 project
tasks 输出里看到一堆 “generateXxx” 却找不到定义位置
这些通常是插件自动注册的 task,比如 java 插件注册 compileJava,android 插件注册 assembleDebug。它们不在你的 build.gradle 里显式声明,但可通过 project.tasks.findByName() 或 tasks.named() 在脚本中引用。
- 查某个 task 来源:运行
./gradlew help --task assemble(把assemble换成你想查的 task 名) - 注意 task 名大小写敏感,
assemble和assembleDebug是不同 task - 某些 task 只在特定条件下注册(如
android插件需android {}块存在才注册构建相关 task)
自定义 task 在 tasks 列表里始终不出现
最常见原因是没设 description,或用了 task myTask 但没加 group 且没 description —— 这类 task 默认被 tasks 命令过滤掉。
- 修复方式(任选其一):
• 加描述:tasks.register('myTask') { description = 'Do something useful' }
• 加分组:tasks.register('myTask') { group = 'custom' }
• 或直接用tasks.create()(旧 DSL),它默认带 group - 使用 Kotlin DSL 时注意:用
register是延迟创建,必须通过configure或执行时触发才会真正注册;若想立刻可见,临时改用create - 如果 task 是在
afterEvaluate里注册的,tasks命令可能因执行时机问题漏掉它——避免在afterEvaluate中注册核心 task
./gradlew dependencies 或 ./gradlew :myTask --dry-run。别指望 tasks 列表能告诉你哪个 task 会先跑。











