技術と日常。

日々の気が付いたこと・気になったことを残しておきます。

[Gradle]タスクの依存関係を表示する

きっかけ

Mavenではビルドライフサイクルの中で、決められた一連のタスクが頭から流れるため、なんとなく覚えていれば「この操作の前に処理を挟みたければあのタスクだな。」等がぱっとわかると思います。
Gradleだと、タスクの自由度の高さがある一方「このタスクってどういう順で実行されるんだけ?そもそもなんでこの順になるんだっけ?」となることがあります(筆者はなりました)。
そこで、Gradleでタスクの依存関係を確認する方法を調査しました。

タスクが実行される順序を確認する

gradle <タスク名> --dry-runを使用することで、どの順で何のタスクが実行されるかを表示することができます。

>./gradlew build --dry-run  
:compileJava SKIPPED
:processResources SKIPPED
:classes SKIPPED
:jar SKIPPED
:startScripts SKIPPED
:distTar SKIPPED
:distZip SKIPPED
:assemble SKIPPED
:compileTestJava SKIPPED
:processTestResources SKIPPED
:testClasses SKIPPED
:test SKIPPED
:check SKIPPED
:build SKIPPED

BUILD SUCCESSFUL in 1s

タスクの依存関係を確認する

gradle-taskinfoプラグインを使用します

gitlab.com

build.gradleに、以下のように追加します

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

gradle tiTree <タスク名>にて、treeが表示されます。

>./gradlew tiTree assemble

> Task :tiTree
:assemble                                  (org.gradle.api.DefaultTask)
+--- :distTar                              (org.gradle.api.tasks.bundling.Tar)
|    +--- :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)
|    `--- :startScripts                    (org.gradle.api.tasks.application.CreateStartScripts)
|         `--- :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)
+--- :distZip                              (org.gradle.api.tasks.bundling.Zip)
|    +--- :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)
|    `--- :startScripts                    (org.gradle.api.tasks.application.CreateStartScripts)
|         `--- :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)
`--- :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)


BUILD SUCCESSFUL in 1s
1 actionable task: 1 executed

gradle tiOrder <タスク名>にて、タスクの順番も表示可能です。

>./gradlew tiOrder assemble   

> Task :tiOrder

In order to execute [: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. :startScripts     (org.gradle.api.tasks.application.CreateStartScripts)
  6. :distTar          (org.gradle.api.tasks.bundling.Tar)
  7. :distZip          (org.gradle.api.tasks.bundling.Zip)
  8. :assemble         (org.gradle.api.DefaultTask)


BUILD SUCCESSFUL in 1s
1 actionable task: 1 executed

詳しくはリンクより、ドキュメントをご確認ください。

出典

Is there a way to list task dependencies in Gradle? - Stack Overflow