2012年11月1日木曜日

Gradleで環境ごとに異なる設定を使用する

Gradleでタスクを実行する際に、環境ごと異なる設定を使用したい場合がある。その際、個人的には以下の要件を満たしたい。

  • 使用する環境はコマンドラインから指定したい
  • 各環境に共通の設定は、ひとつのファイルで管理したい
  • 環境によって異なる設定は、環境ごとに別ファイルで管理したい
  • パスワードなどバージョン管理対象外としたい設定は、プロジェクト外のファイルで管理したい

これら要件を満たしたbuild.gradleの記述は、『 Gradle で環境ごとに構成を変更する その2 - bluepapa32’s Java Blog』に詳しい。これを参考に、ディレクトリ構成やファイル名などを自分の好みに変更したbuild.gradleは以下の通り。

defaultTasks 'dbsetting'
def envList = ['dev', 'qa', 'prod']
if (!hasProperty('env')) {
ext.env = System.env['GRADLE_ENV'] ?: envList[0]
}
if(!envList.find{it == ext.env}){
throw new Exception("There is no environment named '$ext.env'")
}
ext.setting = {
def slurper = new ConfigSlurper()
def files = files("env/default.gradle",
"env/${env}.gradle",
"${System.properties['user.home']}/.gradle/${env}.gradle")
files.inject(new ConfigObject()) { config, file ->
file.exists() ? config.merge(slurper.parse(file.toURL())) : config
}
}()
task dbsetting << {
println "dbname: $setting.database.dbname"
println "user: $setting.database.username"
println "password: $setting.database.password"
}
view raw build.gradle hosted with ❤ by GitHub
基本的には上記リンクのままだが、-Pオプションに存在しない環境を指定した場合、例外を投げてタスクを終了する処理を追加してある。また、“Dynamic properties are deprecated”という警告を消すため、extプロパティを使用している。

 

関連リンク

0 件のコメント:

コメントを投稿