有没有办法在Gradle中列出任务依赖项?

Dea*_*ler 116 gradle

./gradle tasks列出"部分"任务.查看 http://gradle.org/docs/current/userguide/java_plugin.html,隐藏的未列出.此外,其他插件将没有这样一个很好的漂亮的任务之间的依赖关系图.

有办法吗?

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

Ren*_*hke 97

您可以使用--all标志来获取可用任务和任务依赖关系的更详细列表

gradle tasks --all
Run Code Online (Sandbox Code Playgroud)

编辑:正如Radim在评论中所指出的,对于gradle 3.3和更新版本,此命令不报告依赖关系.

  • 这不会列出依赖关系,至少使用Gradle 1.5或1.7.难道它曾经这样做,或者这是一个不完整的答案? (48认同)
  • 仅适用于3.3岁以上的gradle.[任务报告](https://docs.gradle.org/3.3/release-notes.html#improved-performance-of-tasks-report)发生了更改,删除了此输出. (8认同)
  • 谁知道谁在gradle 4.x +中显示任务树? (3认同)
  • 下载资源的操作不会绑定到专用任务.gradle中的依赖项将添加到"配置"中.只要您(在您自己的任务实现中)或gradle(在其自己提供的任务中)引用此配置的文件,就会触发解析机制. (2认同)

Mar*_*vic 94

列出任务和他们依赖的任务(有点像maven的依赖:树,但是对于任务)

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

gradle assemble --dry-run
Run Code Online (Sandbox Code Playgroud)

你可以在这里找到更多

  • 这不会列出任务树或任务依赖项,它只是列出了哪些任务将被执行。 (8认同)
  • @kiltek 这个建议只是说了像 `:analytics:preBuild SKIPPED` 这样的事情,但它不会告诉我为什么 Gradle 认为它甚至应该为 `:analytics:preBuild` 烦恼。是什么依赖于 `:analytics:preBuild` 以至于必须考虑执行它? (6认同)
  • @bcampolo 有什么区别? (2认同)

Ole*_*ndr 27

您可以尝试使用简单的com.dorongold.task-tree插件:

gradle <task 1>...<task N> taskTree
Run Code Online (Sandbox Code Playgroud)

  • 为了获得更清晰的输出,请使用“--no-repeat”。来源:https://github.com/dorongold/gradle-task-tree (7认同)
  • 很好的插件,谢谢你的提示 (3认同)
  • 这在 [6.8+](https://github.com/dorongold/gradle-task-tree/issues/40) 中不起作用 (2认同)
  • @elect 该问题已解决。该插件的最新版本适用于 6.8+。 (2认同)

cst*_*roe 25

你可以坚持下去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
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

然后用gradle运行你的任务:

./gradlew build
Run Code Online (Sandbox Code Playgroud)

你应该看到这个:

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
Run Code Online (Sandbox Code Playgroud)


Aru*_*gal 14

gradle --profile clean build

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

  • 该报告不包含任何有关任务之间依赖关系的信息.它只是按顺序列出构建期间执行的所有任务. (10认同)

bar*_*uin 10

为此有一个新插件:

plugins {
    id 'org.barfuin.gradle.taskinfo' version '1.0.1'
}
Run Code Online (Sandbox Code Playgroud)

然后你可以输入:

./gradlew tiTree assemble
Run Code Online (Sandbox Code Playgroud)

得到这样的东西:

: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)
Run Code Online (Sandbox Code Playgroud)

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

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)
Run Code Online (Sandbox Code Playgroud)

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


Dyl*_*gte 7

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

  • gradle.getTaskGraph()仅显示将在当前gradle构建中执行的任务,此taskGraph仅在执行阶段可用. (6认同)