今更だけど、Gradleをちゃんと勉強しよう - Gradleのプロパティいろいろ

以前のエントリーでgradle.propertiesのチートシート(中途半端)を書いたわけですが、Gradleのプロパティを作る方法はgradle.properties以外にもあって、そこらへんをまとめてみました。
gradle.propertiesで設定する
propertyName=some value
と記述するとpropertyNameというプロパティが利用できます。
参考
コマンドラインからプロパティを設定する
gradle taskName -PpropertyName=propertyValueで設定できます。
コマンドラインからパラメーター渡せないの?って考えている人はこれを使えばよいのではないでしょうか。
また、gradle.propertiesに設定したプロパティを上書きしたい場合は-Dorg.gradle.project.propertyName=overrideValueを設定します。
環境変数から設定する
環境変数ORG_GRADLE_PROJECT_propertyNameに値を設定すると、propertyNameのプロパティが利用できます。
開発環境、テスト環境、デプロイ環境などで値を分けたい場合に利用するとよいでしょう。
Javaのパラメーターから設定する
起動パラメーターで-Dorg.gradle.project.propertyName=propertyValueで設定できます。
-Pにくらべて記述量が多いのがアレです。
System.propertiesにプロパティを設定する
gradle.propertiesにsysProp.で始まるプロパティを設定すると、System.properties['propertyName']でプロパティを取得できるようになります。
例
次のようなスクリプトとプロパティファイルを用意します。
gradle.properties
org.gradle.daemon=true fromGradleProp=This is property from gradle.properties systemProp.fromSystemProperties=This property is set to System properties overrideProp=run gradle with parameter -Dorg.gradle.project.overrideProp, then this message will be chande.
build.gradle
task gradlePropertyConvention {
doLast {
println 'property [cmdProp] is from command line argument -PcmdProp'
println (project.properties['cmdProp'] != null ?
cmdProp :
'command line argument -PcmdProp is not given.')
println ''
println 'property [fromGradleProp] is from gradle.properties'
println fromGradleProp
println ''
println 'property [emvProperty] is from environment variable [ORG_GRADLE_PROJECT_emvProperty]'
println (project.properties['emvProperty'] != null ?
emvProperty :
'no emvironment variable[ORG_GRADLE_PROJECT_emvProperty]')
println ''
println 'property [systemProp.fromSystemProperties] in gradle.properties is set to System properties'
println System.properties['fromSystemProperties']
println ''
println 'properties in gradle.properties can be overriden with java parameter -Dorg.gradle.project.<property name>'
println overrideProp
}
}
まず、引数なしでこのタスクを実行してみます。
$ gradle graProCon :gradlePropertyConvention property [cmdProp] is from command line property argument -PcmdProp command line argument -PcmdProp is not given. property [fromGradleProp] is from gradle.properties This is property from gradle.properties property [emvProperty] is from environment[ORG_GRADLE_PROJECT_emvProperty] no emvironment variable[ORG_GRADLE_PROJECT_emvProperty] property [systemProp.fromSystemProperties] in gradle.properties is set to System properties This property is set to System properties properties in gradle.properties can be overriden with java parameter -Dorg.gradle.project.<property name> run gradle with parameter -Dorg.gradle.project.overrideProp, then this message will be changed. BUILD SUCCESSFUL Total time: 0.985 secs
-PcmdProp=yeah!と-Dorg.gradle.project.overrideProp=fooを与えて実行してみます。
$ gradle graProCon -PcmdProp=yeah! -Dorg.gradle.project.overrideProp=foo property [cmdProp] is from command line property argument -PcmdProp yeah! property [fromGradleProp] is from gradle.properties This is property from gradle.properties property [emvProperty] is from environment[ORG_GRADLE_PROJECT_emvProperty] wlyeeee property [systemProp.fromSystemProperties] in gradle.properties is set to System properties This property is set to System properties properties in gradle.properties can be overriden with java parameter -Dorg.gradle.project.<property name> foo BUILD SUCCESSFUL Total time: 1.02 secs
さらに環境変数ORG_GRADLE_PROJECT_emvPropertyにwlyeeeeと設定して実行してみます。
$ echo $ORG_GRADLE_PROJECT_emvProperty wlyeeee $ gradle graProCon -PcmdProp=yeah! -Dorg.gradle.project.overrideProp=foo property [cmdProp] is from command line property argument -PcmdProp yeah! property [fromGradleProp] is from gradle.properties This is property from gradle.properties property [emvProperty] is from environment[ORG_GRADLE_PROJECT_emvProperty] wlyeeee property [systemProp.fromSystemProperties] in gradle.properties is set to System properties This property is set to System properties properties in gradle.properties can be overriden with java parameter -Dorg.gradle.project.<property name> foo BUILD SUCCESSFUL Total time: 0.76 secs
コマンドライン引数および環境変数からプロパティを設定できることがこれらの例からわかるかと思います。
ちなみに、プロパティのnullチェックを行わずにスクリプトを書く場合、-Pでプロパティを渡さないと設定フェーズでGradleが失敗するので、デフォルト値をgradle.propertiesに設定しておくのがよいです。