以前のエントリーで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
に設定しておくのがよいです。