gradle便利ですね。でもgradle界隈の人が言うほど簡単じゃない・・・。
gradleは柔軟な代わりにいろいろ設定の書き方があって混乱するので整理してみました。
基本的な構成
myproject/
├── build.gradle
├── gradle.properties
└── settings.gradle
build.gradleも設定ファイルといえば設定ファイルなのですが、ここではbuild.gradleの外のものを設定ファイルとして書き連ねることにします。
init.gradle
初期化スクリプトで、Gradleオブジェクトに対するなにがしかを行うものだそうです。
今のところそんなに興味がないのでリンクを貼るだけで終わります。
settings.gradle
設定スクリプトでSettingsオブジェクトに対するなにがしかを行うものだそうです。
ほとんどマルチプロジェクト用の設定ファイルと考えて良さそうです。
ルートプロジェクトの直下に置きましょう。
gradle.properties
これが一番使えるやつかと。
設定が効く強さはユーザーホームディレクトリのファイル>プロジェクト直下のファイル
という順序です。
いわゆるpropertiesファイル形式で、こんなかんじです。
hoge.fuga=hogehogefugafuga
piyo=piyopiyo
ただ若干クセがあります。
下記は正常に処理されますが、
task hoge << {
println "value:${piyo}"
}
下記はNGです。
task hoge << {
println "value:${hoge.fuga}"
}
このように書く必要があります
task hoge << {
println "value:" + getProperty("hoge.fuga")
}
なんでだろ・・・
apply from で好きなファイルを取り込める
myProject
├── build.gradle
└── settings
└── confA.gradle
apply from: "settings/confA.gradle"
task hoge << {
println "value:${nanika}"
}
ext {
nanika="なにか?"
}
- groovyスクリプトで記述できるのでIF文を入れたり柔軟にできます。
- ext {...} ブロックを使用する必要があります。
設定ファイルじゃないけど・・・
-Pオプション
コマンドラインから前述のgradle.properties
ファイルと同じことができます。
$ ./gradlew hoge -Phoge.fuga=commandline
gradle.properties
と被った場合にはこちらのほうが強いです。
-Dオプション
$ ./gradlew hoge -Dhoge.fuga=commandline
-Pオプションと違ってJVMのプロパティになります。
build.gradle内で参照するためのものではなく、その目的は-Pを使ってくれと。
(System.getProperty("hoge.fuga")で参照はできるんだろうけど・・・素直に-Pがいいと思われ)
環境変数
ORG_GRADLE_PROJECT_piyo=envpiyo
は -Ppiyo=envpiyo
と同じ意味です。
環境変数名に.(ドット)は使えないので ORG_GRADLE_PROJECT_hoge.fuga=envvv
というのはできないっぽいです。
ext{...}ブロック
apply from
のところでも登場していますが、これはbuild.gradleの中に書いてもいいです。
その実態はExtraPropertiesExtensionオブジェクトです。
これも癖があって、
ext {
hoge.fuga="extで設定したよ"
}
これはエラーになります。
ext {
set("hoge.fuga","extで設定したよ")
}
これなら出来るんだけどタスクの中で ext.get("hoge.fuga")で取り出せるのかと思ったら怒られた・・・
ということで、
- gradle.properties
- apply from で取り込む
- -Pで指定
- 環境変数で指定
この辺りじゃないかなと思います。