Gradle のマルチプロジェクト構成におけるプロジェクトの評価順 (設定フェーズにおけるプロジェクト間の依存関係)
Gradle の公式のドキュメントに書いてあるけどどこに書かれてるのか探すのにいつも手間取るのでメモっておく。
前提知識
- Gradle のビルドには、「初期化」 (Initialization) と 「設定」 (Configuration) と 「実行」 (Execution) の 3 つのフェーズがある。 (Chapter 20. The Build Lifecycle)
- マルチプロジェクトの場合、各プロジェクトが評価されていって 「設定」 フェーズが終わり、そのあと 「実行」 フェーズに移る。
- 「実行」 フェーズではタスクの実行が行われるので、タスク間の依存関係により実行順が決まる。
プロジェクトの評価順
- Chapter 24. Multi-project Builds に書かれてる。
- 基本としては、各プロジェクトが名前のアルファベット順に評価される。
- 入れ子になったプロジェクトの場合、上位のプロジェクトから下位のプロジェクトの順でプロジェクトが評価される。
- あるプロジェクト (A とする) の評価時に、別のプロジェクト (B とする) で定義される何かを参照したり変更を加えたりする場合、A より先に B が評価されている必要がある。
- プロジェクトの評価順序に依存関係を持たせるには、
Project#evaluationDependsOn(String)
メソッドが使用できる。 - あるプロジェクトの評価後に処理を実行したい場合は、
Project#afterEvaluate(Cloure)
メソッドなどを使用すると良い。