173

./gradle tasks列出“一些”任务。查看 http://gradle.org/docs/current/userguide/java_plugin.html有隐藏的未列出。此外,其他插件不会有如此漂亮的任务之间的依赖关系图。

有没有办法

  1. 使用 gradle 列出所有插件中的所有任务
  2. 列出任务以及它们所依赖的任务(有点像 maven,dependency:tree但用于任务)
4

11 回答 11

190

列出任务以及它们所依赖的任务(有点像 maven 的 depenceny:tree 但用于任务)

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

gradle assemble --dry-run

你可以在这里找到更多

于 2017-04-20T07:11:16.680 回答
105

在 Gradle 3.3 之前,您可以使用该--all标志来获取可用任务和任务依赖项的更详细列表:

gradle tasks --all

出于性能原因,从 Gradle 3.3 开始,从该任务中删除了依赖项报告。Gradle 3.3 发行说明中记录了此更改及其基本原理。

于 2012-05-02T21:59:57.730 回答
64

你可以试试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
于 2016-01-19T15:08:30.683 回答
44

您可以将其粘贴到您的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
于 2017-10-25T11:47:16.593 回答
16

gradle 任务树可以通过以下插件进行可视化gradle tasks --all 或尝试:

Graphs Gradle 和 Talaiot: 查看以下内容:https ://proandroiddev.com/graphs-gradle-and-talaiot-b0c02c50d2b1博客,因为它以图形方式列出了查看任务和依赖项。这使用免费的开放式 Graphviz 工具Gephi ( https://gephi.org/features/ )

gradle-task-treehttps ://github.com/dorongold/gradle-task-tree和

gradle-visteghttps ://github.com/mmalohlava/gradle-visteg

  1. gradle-visteg插件:生成的文件可以通过Graphviz dot实用程序进行后处理。

  2. 例如,生成 png 图像如下:

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

欲了解更多信息,请访问Graphviz主页。

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

gradle --profile清理构建

完成后,转到 build/reports/profile 文件夹并浏览 .html 文件。您将在一个漂亮的 html 页面中看到依赖项解析和其他信息。

于 2013-10-22T18:00:10.460 回答
13

为此有一个新插件:

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)

插件文档中的更多信息。
完全披露:我是 gradle-taskinfo 的作者。

于 2020-10-03T18:58:55.100 回答
8

您可以使用 Gradle.getTaskGraph() 以编程方式访问任务图以在构建脚本中对其进行检查

于 2012-05-03T03:35:10.193 回答
3

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

gradle tasks --all

相反,我已经转向查看一个特定的项目,使其更容易

gradlew :full-httpproxy:tasks --all

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

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

如何仅在 gradle 中列出主项目的所有任务?

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

于 2016-07-07T13:26:30.810 回答
3

根据 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)}
    }
}
于 2020-02-10T14:38:30.313 回答
0

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

于 2019-12-03T19:07:54.133 回答
0

如果插件不适合你,你可以在你的 build.gradle 中使用这个要点

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

于 2021-02-17T10:50:42.103 回答