Gradleでタスクの依存関係を一覧表示する方法はありますか?


139

./gradle tasksタスクの「一部」をリストします。http://gradle.org/docs/current/userguide/java_plugin.htmlを見ると、 リストされていない非表示のものがあります。また、他のプラグインは、タスク間の依存関係のこのような素晴らしいグラフがありません。

する方法はありますか

  1. Gradleを使用してすべてのプラグインのすべてのタスクを一覧表示する
  2. タスクとそれらが依存するタスクのリスト(Mavenのようなdependency:treeタスクですが)

回答:


99

--allフラグを使用して、使用可能なタスクとタスクの依存関係のより詳細なリストを取得できます

gradle tasks --all

編集:コメントのRadimで指摘されているように、このコマンドはgradle 3.3以降の依存関係を報告しません(https://docs.gradle.org/3.3/release-notes.html#improved-performance-of-tasks-を参照してください)レポート)。


Webから依存関係をダウンロードするためのタスクをどこにもリストしていないようです??? タスク日食を実行すると、明確にダウンロードされますが、その依存関係がどこにあるのかわかりません...それをオーバーロードする方法はありませんか?
ディーン・ヒラー

2
リソースをダウンロードするアクションは、専用のタスクにバインドされていません。Gradleの依存関係が構成に追加されます。ユーザー(独自のタスク実装)またはGradle(独自に提供されたタスク)がこの構成のファイルを参照するとすぐに、解決メカニズムがトリガーされます。
Rene Groeschke 2012年

54
これには、少なくともGradle 1.5または1.7では、依存関係はリストされていません。それは一度やったことですか、それとも不完全な答えですか?
トムアンダーソン

10
3.3より古いGradleでのみ機能します。この出力を削除するタスクレポートに変更がありました。
Radim

135

タスクとそれらが依存するタスクのリスト(mavenのdepenceny:treeのようなものですが、タスク用です)

このために、特定のコマンドのために実行されるが、コマンドを実行しないタスクをリストする--dry-run(または-m)オプションを使用できます。例:

gradle assemble --dry-run

あなたはここでもっと見つけることができます


2
これは、タスクツリーやタスクの依存関係をリストするのではなく、実行されるタスクをリストするだけです。
bcampolo

@bcampolo違いは何ですか?
kiltek

39

単純な使用法でcom.dorongold.task-treeプラグインを試すことができます。

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

readmeの結果の例:

gradle build taskTree

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

5
よりクリーンな出力を得るには、を使用します--no-repeat。出典:github.com/dorongold/gradle-task-tree
AlikElzin-kilaka

30

あなたはこれをあなたに貼り付けることができます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。それはまだいくつかを助けます!
Noumenon

1
それはグラフであるべきですが、グラフのレンダリングは重要です。上記のコードの出力は、タスクの直接の依存関係をリストするだけです。
cstroe

15

Gradleタスクツリーは、次のプラグインによって視覚化するgradle tasks --all か、試すことができます。

GradleとTalaiotのグラフ: このに見て:https://proandroiddev.com/graphs-gradle-and-talaiot-b0c02c50d2b1それがグラフィカルに表示するタスクとの依存関係をリストとしてブログ。これは無料のオープンGraphvizツールGephihttps://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ページで表示できます

グラドル --profileクリーンビルド

これが完了したら、build / reports / profileフォルダーに移動し、.htmlファイルを参照します。依存関係の解決やその他の情報が、時間の経過とともに素敵なHTMLページに表示されます。


11
レポートには、タスク間の依存関係に関する情報は含まれていません。ビルド中に実行されたすべてのタスクを順番にリストするだけです。
rwitzel 2015年

7

プログラムでタスクグラフにアクセスし、Gradle.getTaskGraph()を使用してビルドスクリプト内で検査することができます。


6
gradle.getTaskGraph()は、現在のGradleビルドで実行されるタスクのみを表示し、このtaskGraphは実行フェーズでのみ使用できます。
Rene Groeschke 2012年

3

あなたのマルチプロジェクトが成長するにつれて、私が正しいとマークしたソリューションは少し不可解になり、読みにくくなります

gradle tasks --all

代わりに、私は特定のプロジェクトを見ることに移り、それをはるかに簡単にしました

gradlew :full-httpproxy:tasks --all

ここで、 'full-httpproxy'は私のプロジェクト(および通常のディレクトリ)の名前です。

ただし、マスター/ルートプロジェクトのタスクを一覧表示する方法に興味があり、ここでも未解決の質問があります

マスタープロジェクトのすべてのタスクをGradleでのみリストする方法は?

現時点ではそれができないようです。



0

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)}
    }
}
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.