在 Gradle 有没有列出任务依赖项的方法?

./gradle tasks列出了“一些”任务 Http://gradle.org/docs/current/userguide/java_plugin.html 有隐藏的未列出。另外,其他插件不会有这样一个漂亮的任务之间的依赖关系图。

有没有办法

  1. 用渐变列出所有插件中的所有任务
  2. 列出任务以及它们所依赖的任务(有点像 maven 的 dependency:tree,但是是针对任务的)
103204 次浏览

在Gradle 3.3之前,您可以使用--all标志来获得可用任务和任务相关性的更详细列表:

gradle tasks --all

由于性能原因,从Gradle 3.3开始,从此任务中删除了依赖关系报告。这一变化及其基本原理记录在Gradle 3.3发行说明中。

您可以使用gradle.getTaskGraph()以编程方式访问任务图,以在构建脚本中检查它。

Gradle任务树可以通过_ABC可视化_0尝试以下插件:

图Gradle和Talaiot: 看看这个:https://proandroiddev.com/graphs-gradle-and-talaiot-b0c02c50d2b1博客,因为它列出了图形查看任务和依赖关系。这使用自由的打开Graphviz工具格菲https://gephi.org/features/

等级-任务-树https://github.com/dorongold/gradle-task-tree

格拉德莱-维斯泰格https://github.com/mmalohlava/gradle-visteg

  1. Gradle-Visteg插件:生成的文件可以通过Graphvizdot实用程序进行后期处理。

  2. 例如,生成的PNG图像如下所示:

    cd build/reports/; dot -Tpng ./visteg.dot -o ./visteg.dot.png

有关更多信息,请访问Graphviz主页。

实际用于运行任务的任何任务(例如:build)都可以使用--profile选项在漂亮的HTML页面中查看

Gradle-侧写清洁构建

完成后,转到build/reports/profile文件夹并浏览.HTML文件。随着时间的推移,您将在一个漂亮的HTML页面中看到依赖关系解析和其他信息。

您可以尝试com.dorongold.task-tree插件:

plugins {
id "com.dorongold.task-tree" version "2.1.0"
}

使用简单:

gradle <task 1>...<task N> taskTree

自述文件的结果示例:

gradle build taskTree --no-repeat


:build
+--- :assemble
|    \--- :jar
|         \--- :classes
|              +--- :compileJava
|              \--- :processResources
\--- :check
\--- :test
+--- :classes
|    +--- :compileJava
|    \--- :processResources
\--- :testClasses
+--- :compileTestJava
|    \--- :classes
|         +--- :compileJava
|         \--- :processResources
\--- :processTestResources

随着多项目的增长,我标记为正确的解决方案变得有点笨拙和难以阅读。

gradle tasks --all

相反,我已经转移到看一个具体的项目,使它变得更容易。

gradlew :full-httpproxy:tasks --all

其中“ full-httpproxy ”是我的项目的名称(和典型的目录)。

然而,我很好奇如何在主/根项目上列出任务,这里也有一个突出的问题。

如何在Gradle中只列出主项目的所有任务?

因为现在这样做似乎不可能。

列出任务以及它们所依赖的任务(有点像Maven的 DEPENCENY:树(但用于任务)

为此,您可以使用--dry-run(或-m)选项,该选项列出按特定命令顺序执行的任务,但不执行该命令,例如

gradle assemble --dry-run

您可以在ABC_0中找到更多_。

您可以将其插入build.gradle

gradle.taskGraph.whenReady {taskGraph ->
println "Found task graph: " + taskGraph
println "Found " + taskGraph.allTasks.size() + " tasks."
taskGraph.allTasks.forEach { task ->
println task
task.dependsOn.forEach { dep ->
println "  - " + dep
}
}
}

或将其输入build.gradle.kts

gradle.taskGraph.whenReady(closureOf<TaskExecutionGraph> {
println("Found task graph: $this")
println("Found " + allTasks.size + " tasks.")
allTasks.forEach { task ->
println(task)
task.dependsOn.forEach { dep ->
println("  - $dep")
}
}
})

然后用gradle运行你的任务:

./gradlew build

你应该看到这个:

Found task graph: org.gradle.execution.taskgraph.DefaultTaskGraphExecuter@36eb780c
Found 19 tasks.
task ':compileJava'
- task 'compileJava' input files
task ':compileScala'
- task 'compileScala' input files
- compileJava
task ':processResources'
- task 'processResources' input files
task ':classes'
- org.gradle.api.internal.tasks.DefaultTaskDependency@287a7782
- task 'classes' input files
- compileJava
- dirs
- compileScala
- processResources
task ':jar'
- task 'jar' input files
task ':assemble'
- task 'assemble' input files
- org.gradle.api.internal.artifacts.DefaultPublishArtifactSet$ArtifactsTaskDependency@5bad9616
task ':compileTestJava'
- task 'compileTestJava' input files
task ':compileTestScala'
- task 'compileTestScala' input files
- compileTestJava
task ':processTestResources'
- task 'processTestResources' input files
task ':testClasses'
- processTestResources
- task 'testClasses' input files
- compileTestScala
- org.gradle.api.internal.tasks.DefaultTaskDependency@42c1fa08
- compileTestJava
- dirs
task ':compileIntegrationTestJava'
- task 'compileIntegrationTestJava' input files
task ':compileIntegrationTestScala'
- task 'compileIntegrationTestScala' input files
- compileIntegrationTestJava
task ':processIntegrationTestResources'
- task 'processIntegrationTestResources' input files
task ':integrationTestClasses'
- processIntegrationTestResources
- compileIntegrationTestJava
- org.gradle.api.internal.tasks.DefaultTaskDependency@7c8aa0fe
- compileIntegrationTestScala
- dirs
- task 'integrationTestClasses' input files
task ':composeUp'
- task 'composeUp' input files
task ':integrationTest'
- task ':composeUp'
- task 'integrationTest' input files
task ':test'
- task 'test' input files
task ':check'
- task 'check' input files
- task ':test'
- task ':integrationTest'
task ':build'
- task 'build' input files
- check
- assemble

您还可以为本地环境build.gradle添加以下插件,https://github.com/dorongold/gradle-task-tree

在cstroe的回答之后,下面还会打印每个gradle任务的输入和输出文件。这很有用,因为依赖关系有时是由输入/输出关系定义的。也就是说,如果任务B使用任务A的输出,Cstroe的答案不会显示依赖关系。以下内容非常简单,但确实显示了每个任务的输入和输出文件列表:

gradle.taskGraph.whenReady {taskGraph ->
println "Found task graph: " + taskGraph
println "Found " + taskGraph.allTasks.size() + " tasks."
taskGraph.allTasks.forEach { task ->
println()
println("----- " + task + " -----")
println("depends on tasks: " + task.dependsOn)
println("inputs: ")
task.inputs.getFiles().getFiles().collect { f -> println(" - " + f)}
println("outputs: ")
task.outputs.getFiles().getFiles().collect { f -> println(" + " + f)}
}
}

有一个新的插件:

plugins {
id 'org.barfuin.gradle.taskinfo' version '1.0.1'
}

然后你可以输入:

./gradlew tiTree assemble

然后得到这样的东西:

:assemble                             (org.gradle.api.DefaultTask)
+--- :jar                             (org.gradle.api.tasks.bundling.Jar)
|    `--- :classes                    (org.gradle.api.DefaultTask)
|         +--- :compileJava           (org.gradle.api.tasks.compile.JavaCompile)
|         `--- :processResources      (org.gradle.language.jvm.tasks.ProcessResources)
+--- :javadocJar                      (org.gradle.api.tasks.bundling.Jar)
|    `--- :javadoc                    (org.gradle.api.tasks.javadoc.Javadoc)
|         `--- :classes               (org.gradle.api.DefaultTask)
|              +--- :compileJava      (org.gradle.api.tasks.compile.JavaCompile)
|              `--- :processResources (org.gradle.language.jvm.tasks.ProcessResources)
`--- :sourcesJar                      (org.gradle.api.tasks.bundling.Jar)

该插件还可以显示执行任务的顺序:

In order to execute task ':assemble', the following tasks would be executed in this order:


1. :compileJava      (org.gradle.api.tasks.compile.JavaCompile)
2. :processResources (org.gradle.language.jvm.tasks.ProcessResources)
3. :classes          (org.gradle.api.DefaultTask)
4. :jar              (org.gradle.api.tasks.bundling.Jar)
5. :javadoc          (org.gradle.api.tasks.javadoc.Javadoc)
6. :javadocJar       (org.gradle.api.tasks.bundling.Jar)
7. :sourcesJar       (org.gradle.api.tasks.bundling.Jar)
8. :assemble         (org.gradle.api.DefaultTask)
_ABC_中的

更多信息0。
充分披露:我是Gradle-Taskinfo的作者。

如果插件对你不起作用,你可以在build.gradle中使用这个要点。

https://gist.github.com/jrodbx/046b66618c558ca9002a825629d59cde.