./gradle tasks
列出了“一些”任务。查看
http://gradle.org/docs/current/userguide/java_plugin.html,其中未列出隐藏的内容。另外,其他插件将无法很好地展现任务之间的依赖关系。
有没有办法
- 用gradle列出所有插件中的所有任务
- 列出任务以及它们所依赖的任务(类似于maven,
dependency:tree
但用于任务)
./gradle tasks
列出了“一些”任务。查看
http://gradle.org/docs/current/userguide/java_plugin.html,其中未列出隐藏的内容。另外,其他插件将无法很好地展现任务之间的依赖关系。
有没有办法
dependency:tree
但用于任务)Answers:
您可以使用--all标志获取可用任务和任务依赖项的更详细列表
gradle tasks --all
编辑:正如Radim在评论中指出的那样,对于gradle 3.3及更高版本,此命令不报告依赖项(请参阅https://docs.gradle.org/3.3/release-notes.html#improved-performance-of-tasks-报告)。
您可以尝试使用简单用法的com.dorongold.task-tree插件:
gradle <task 1>...<task N> taskTree
自述文件的示例结果:
gradle build taskTree
:build
+--- :assemble
| \--- :jar
| \--- :classes
| +--- :compileJava
| \--- :processResources
\--- :check
\--- :test
+--- :classes
| +--- :compileJava
| \--- :processResources
\--- :testClasses
+--- :compileTestJava
| \--- :classes
| +--- :compileJava
| \--- :processResources
\--- :processTestResources
--no-repeat
。资料来源:github.com/dorongold/gradle-task-tree
您可以将其粘贴到您的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
A <- B <- (C and D)
,这将向您显示B-A, C-B, D-B
。它仍然可以帮助一些!
gradle任务树可以通过以下插件可视化gradle tasks --all
或尝试以下插件:
Graphs Gradle和Talaiot: 对此进行研究:https ://proandroiddev.com/graphs-gradle-and-talaiot-b0c02c50d2b1博客,因为它以图形方式列出了查看任务和依赖项。它使用免费的开放式Graphviz工具Gephi(https://gephi.org/features/)
gradle-task-tree:https : //github.com/dorongold/gradle-task-tree和
gradle-visteg:https://github.com/mmalohlava/gradle-visteg
gradle-visteg插件:可以通过Graphviz dot
实用程序对生成的文件进行后处理。
例如,png图像生成如下:
cd build/reports/; dot -Tpng ./visteg.dot -o ./visteg.dot.png
有关更多信息,请访问Graphviz主页。
build
可以使用--profile
选项在漂亮的HTML页面中查看实际上用于运行任务的任何任务(例如:)
gradle --profile干净的构建
完成此操作后,转到build / reports / profile文件夹并浏览.html文件。您会在一个漂亮的html页面中看到依赖关系解析和其他信息以及所花费的时间。
您可以使用Gradle.getTaskGraph()以编程方式访问任务图以在构建脚本中对其进行检查
随着您的多项目的增长,我标记为正确的解决方案会变得有点笨拙且难以阅读
gradle tasks --all
取而代之的是,我转向了一个特定的项目,这使它变得更加容易
gradlew :full-httpproxy:tasks --all
其中“ full-httpproxy”是我的项目的名称(和典型的目录)。
但是,我很好奇如何在主/根项目上列出任务,并且在这里也有一个悬而未决的问题
因为这样做似乎目前尚不可能。
您还可以为本地环境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)}
}
}