有什么方法可以在 Gradle 实际执行任务之前打印任务图?



不完全是新手,但我试图更深入地挖掘并更好地理解......只是认为这样做可能是个好主意。

感谢Opal,我做到了:

gradle.taskGraph.whenReady {taskGraph ->
println "Tasks"
taskGraph.getAllTasks().eachWithIndex{ task, n ->
println "${n + 1} $task"
task.dependsOn.eachWithIndex{ depObj, m ->
println "  ${ m + 1 } $depObj"
}
}
} 

Java 构建的输出:

Tasks
1 task ':compileJava'
2 task ':processResources'
3 task ':classes'
1 compileJava
2 dirs
3 processResources
4 task ':jar'
5 task ':assemble'
1 org.gradle.api.internal.artifacts.DefaultPublishArtifactSet$ArtifactsTaskDependency@48db7705
6 task ':compileTestJava'
7 task ':processTestResources'
8 task ':testClasses'
1 processTestResources
2 dirs
3 compileTestJava
9 task ':test'
10 task ':check'
1 value: task ':test'
11 task ':build'
1 check
2 assemble

对我来说,作为一个 Gradle 新手(一个来自新手(,这很棒!虽然这让我有点困惑:

1("构建"仅依赖于"检查"和"组装",它们各有1个依赖项,每个依赖项都没有依赖项。那么它怎么知道运行所有其他任务(显然它必须这样做(......我一定错过了什么。

2( 什么是依赖"dirs"和"org.gradle.api.internal.artifacts.DefaultPublishArtifactSet$ArtifactsTaskDependency@48db7705"?更重要的是,这些究竟从何而来?getDependsOn()返回一个Set<Object>,因此这些可能是Tasks 以外的其他内容。

有很多要调查的...

gradle-taskinfo 插件可能正是 Opal 在他的回答中描述的.
我写的,所以我可能有偏见,但我经常使用它,它对我来说效果很好。 😊
也许它可以节省您一些编码时间!

> 接口TaskExecutionGraph提供了getAllTasks方法(来自文档(:

返回包含在执行计划中的任务。任务按执行顺序返回。

似乎此方法的输出可用于打印任务图。

最新更新