Gradle のマルチプロジェクトで、ビルドスクリプトの評価順序を定義するには evaluationDependsOn
を使う。
ビルド成果物の依存は dependencies
settings.gradle で以下のようにマルチモジュールプロジェクトを定義していたとする。
include 'war', 'app'
ビルド成果物の依存は、ルートプロジェクトの build.gradle で以下のように定義できる。
project(':war') { dependencies { } } project(':app') { dependencies { compile project(':war') } }
この場合、ビルド処理の順番は war → app となる。
タスク間の実行時依存関係は dependsOn
app プロジェクトのタスクの前に、war プロジェクトの action タスクを実行する必要がある場合は、以下のように dependsOn
で実行時依存を定義する。
task action(dependsOn: ':war:action') << { }
評価時の依存は evaluationDependsOn
war プロジェクトで archiveName
を以下のように定義し、
war { archiveName 'app.war' }
app プロジェクトで project(':war').war.archivePath.path
のように参照しても、war プロジェクトで定義する前のデフォルト値しか参照できない。
apply plugin: 'java' apply plugin: 'application' mainClassName = "app.Main" run { args project(':war').war.archivePath.path }
ビルドスクリプトの評価の順番はプロジェクト名のアルファベット順になるためである。
評価時の順序を定義するには、以下のように evaluationDependsOn
を指定する。
apply plugin: 'java' apply plugin: 'application' evaluationDependsOn(':war') mainClassName = "app.Main" run { args project(':war').war.archivePath.path }
こうすることで、先に war プロジェクトの評価後の値が、app プロジェクトで参照できる。