Think Twice
IT技術メモ | Gradleのメモ
Created: 2021-05-08 / Updated: 2021-05-08

Gradleのタスク内の処理順序


Gradleの処理順序は難しい。

目次


動作環境

WSL上のUbuntu 20.04.1 LTSにて、Gradle 7.0で動作確認しています。

ビルドライフサイクル

Gradleの実行は大きく3つのフェーズに分かれています。 スクリプト中のどこに記述するかによって、どのフェーズで実行されるかが異なるので注意が必要です。

Gradleの実行フェーズ
フェーズ 内容
初期化フェーズ(Initialization) プロジェクトがシングルかマルチかなどを判定し、 Projectオブジェクトを生成します。
設定フェーズ(Configuration) ビルドスクリプトを実行して、Projectオブジェクトを構築していきます。
実行フェーズ(Execution) コマンドラインで指定されたタスクを実際に実行します。

処理順序

ここでは、サンプルのビルドスクリプトで、ビルドライフサイクルで言うところの設定フェーズ実行フェーズの処理順序を見て行きます。

build.gradle
Copy
task helloA {
    println 'Hello 1'

    doLast {
        println 'Hello 2'
    }

    doFirst {
        println 'Hello 3'
    }

    println 'Hello 4'
}

task helloB {
    println 'Hello 5'

    doLast {
        println 'Hello 6'
    }

    println 'Hello 7'
}

以下が、helloAタスクとhelloBタスクを実行した際の結果です。

実行結果
Copy
$ gradle helloA

> Configure project :
Hello 1
Hello 4
Hello 5
Hello 7

> Task :helloA
Hello 3
Hello 2

BUILD SUCCESSFUL in 710ms
1 actionable task: 1 executed

$ gradle helloB

> Configure project :
Hello 1
Hello 4
Hello 5
Hello 7

> Task :helloB
Hello 6

BUILD SUCCESSFUL in 659ms
1 actionable task: 1 executed


参照

参考サイト