Gradle で外部設定ファイルを使ってデフォルト設定を上書きする

build.gradle 内でデフォルト値を設定しておき、 gradle.properties の設定値があればそちらで上書きする。

build.gradle の頭のあたりにデフォルト値と gradle.properties からの読み取りコードを以下のように書いておく。
configDir は def なり ext { } なり適宜環境に合わせて。

configDir = 'conf'      // ← デフォルト値
if (project.hasProperty('config.Dir')) {
    configDir = getProperty('config.Dir')
}

そして設定ファイルの gradle.properties に以下の通り書けば、そちらが優先される。

config.Dir = conf_dev

ファイルやプロパティ設定がなければデフォルト値が使われる。

後は、以降のタスク設定などで configDir を参照すればヨシ。



注意点として

  • hasProperty は project を付けないと gradle.properties のプロパティを参照してくれない
  • gradle.properties 内のプロパティ名は build.gradle 内の既存プロパティと被らないようにしないと既存プロパティの値が読まれてしまう
configDir = getProperty('configDir')

とかにすると、 getProperty は既存プロパティである configDir の内を返してしまい、 gradle.properties に書いた設定は無視されてしまう。辛い。