如何列出触发指定Gradle任务的所有任务?是否有反向依赖插件?
如何列出会触发指定Gradle任务的所有任务
Gradle原生没有直接提供反向任务依赖查询的命令,但可以通过插件或自定义任务实现这个需求:
1. 使用现成插件:net.ltgt.gradle.taskinfo
这个插件提供了taskIncoming任务,专门用于查看指定任务的上游依赖(即哪些任务会触发它执行)。
使用步骤:
- 在项目根目录的
build.gradle中添加插件依赖:plugins { id "net.ltgt.gradle.taskinfo" version "1.1.0" } - 执行命令查询指定任务的上游任务,比如要找触发
compileJava的所有任务:
输出会列出所有直接或间接依赖./gradlew taskIncoming --task compileJavacompileJava的任务,以及完整的依赖链。
2. 自定义Gradle任务实现反向查询
如果不想引入第三方插件,可以在build.gradle中添加一个自定义任务,遍历所有任务并检查它们是否依赖目标任务:
task findTriggeringTasks { doLast { def targetTaskName = "compileJava" // 替换为你要查询的任务名 def targetTask = project.tasks.findByName(targetTaskName) if (!targetTask) { println "任务 $targetTaskName 不存在" return } println "所有会触发 $targetTaskName 的任务:" project.tasks.each { task -> // 检查任务是否直接或间接依赖目标任务 if (task != targetTask && task.dependsOn.any { dep -> dep instanceof Task && (dep == targetTask || dep.dependsOn.contains(targetTask)) }) { println "- ${task.path}" } } } }
使用方法:
- 修改
targetTaskName为你要查询的任务名 - 执行自定义任务:
注:上述代码仅检查直接依赖和一级间接依赖,若需递归遍历所有层级的间接依赖,可以扩展逻辑,遍历任务的完整依赖树。./gradlew findTriggeringTasks
3. 另一个可选插件:com.dorongold.task-tree
这个插件主打正向任务依赖树展示,但也支持反向查询:
./gradlew taskTree --reverse --task compileJava
该命令会以反向树结构展示所有依赖compileJava的任务。
内容的提问来源于stack exchange,提问作者ChaimKut
相关产品推荐
相关产品推荐

