Gradleタスクを順番に実行する

エキサイト株式会社メディア事業部エンジニアの佐々木です。Gradleでタスクを順番に実行する書き方をメモしておきます。

はじめに

環境は下記になります。

------------------------------------------------------------
Gradle 7.3.3
------------------------------------------------------------

Build time:   2021-12-22 12:37:54 UTC
Revision:     6f556c80f945dc54b50e0be633da6c62dbe8dc71

Kotlin:       1.5.31
Groovy:       3.0.9
Ant:          Apache Ant(TM) version 1.10.11 compiled on July 10 2021
JVM:          17.0.1 (Amazon.com Inc. 17.0.1+12-LTS)
OS:           Mac OS X 11.5.2 x86_64

Gradleタスクを順番に実行する

Gradleは、拡張等も簡単にできる結構便利なビルドツールなのですが、中身は結構複雑なビルドツールです。タスクを順番に実行したいとしても、通常のプログラミングのように上から順番に書いても実行してくれません。

順番が保証されない書き方

task内で他のタスクをまとめて実行する方法は、dependsOn 'タスク名' の記法がありますが、これは実行順序を保証してくれませんので、注意が必要です。

task sample1 {
    doLast {
        println 'sample1'
    }
}

task sample2 {
    doLast {
        println 'sample2'
    }
}

task sample3 {
    doLast {
        println 'sample3'
    }
}

task sampleAll {
    dependsOn sample3
    dependsOn sample2
    dependsOn sample1
}


実行結果:

> Task sample1
sample1

> Task sample2
sample2

> Task sample3
sample3

記述どおりの順番では実行してくれませんでした。

実行順が保証される書き方

実行順序を保証するのに、 tasks.task名.mustAfterRun task名 の記法を使う必要があります。

task sampleAll {
    dependsOn sample3
    dependsOn sample2
    dependsOn sample1

    tasks.sample1.mustRunAfter sample2
    tasks.sample2.mustRunAfter sample3
}

実行結果
> sample3
sample3

> sample2
sample2

> sample1
sample1

指定した順番どおり実行されました。

まとめ

Gradleは便利なんですが、実行順とかがややこしい感じです。

最後に

エキサイトではフロントエンジニア、バックエンドエンジニア、アプリエンジニアを随時募集しております。募集にはありませんが、長期インターンも歓迎していますので、興味があれば連絡いただければと思います。

カジュアル面談はこちらになります! meety.net

募集職種一覧はこちらになります!(カジュアルからもOK) www.wantedly.com