やりたいこと
Copy.expandは環境に応じてプロパティを変えるのに使うことが多いかと思いますが、今回はマルチプロジェクト構成でプロジェクトごとにプロパティを変える必要があったので用意しました。
ディレクトリ構成はこんな感じ。
├── build.gradle
├── proj-a
│ ├── build.gradle
│ └── properties
├── proj-b
│ ├── build.gradle
│ └── properties
├── properties
│ └── fileA
└── settings.gradle
build scripts
build.gradle
subprojects {
task filterProperties (type: Copy) {
afterEvaluate { project ->
from('../properties')
into('properties')
expand(project.props)
}
}
}
rootのbuild.gradleでタスクを定義します。afterEvaluateを使うのが味噌でこれがないと、projectがrootを指します。
proj-a/build.gradle
ext {
props = [
hoge: 'proj-a'
]
}
proj-b/build.gradle
ext {
props = [
hoge: 'proj-b'
]
}
各々のプロジェクトのbuild.gradleでextを定義します。もちろんrootで全部定義することもできます。
build結果
properties/fileA
hoge=${hoge}
proj-a/properties/fileA
hoge=proj-a
proj-b/properties/fileA
hoge=proj-b