Hatena::ブログ(Diary)

bluepapa32’s Java Blog このページをアンテナに追加 RSSフィード Twitter

2011-03-15

Gradle で環境ごとに構成を変更する その3

前回前々回 と既に2回も書いておきながらなんですが、 設定ファイルを読み込んで 標準出力するだけのサンプルなんて何の役にも立たない...
と言うことで、今回は 読み込んだ設定を アプリケーションのプロパティファイルに 展開してみることに...


結局 build.gradle はこんな感じになりました...

defaultTasks 'clean', 'build'

apply plugin: 'java'

if (!hasProperty('env')) {
    env = System.env['GRADLE_ENV'] ?: 'development'
}   
    
{ ->
    def slurper = new ConfigSlurper()
    slurper.binding = project.properties
                  
    def files = files("environment/default.gradle",
                  "environment/${env}.gradle", 
                  "${System.properties['user.home']}/.gradle/environment.gradle")
    
    def config = files.inject(new ConfigObject()) { config, file ->
        file.exists() ? config.merge(slurper.parse(file.toURL())) : config
    }
   
    // Project#properties にセット
    config.each { k, v -> setProperty k, v }
}()

// Project#properties を リソースに展開
processResources {
    expand (properties)
}

// プロパティ 出力
build << {
    println file("${sourceSets.main.classesDir}/Application.properties").text
}


前回との違いは

  • 読み込んだ設定ファイルの内容を Project#properties に設定するようにした
  • processResources タスクで Application.properties をコピーする際に Project#properties を展開するようにした
  • build タスク で Application.properties の内容を標準出力するようにした
ところです。


読み込んだ設定ファイルの内容を Project#properties に設定すると

println config.server.url
ではなく
println server.url
のようにアクセスできるようになって 、ちょっとだけいい感じになります。


Application.properties に Project#properties を展開するには build.gradle に

processResources {
    expand(project.properties)
}
を追加して (もちろん "<<" はいりません) Application.properties に
server.url = ${server.url}

database.driverClassName = ${database.driverClassName}
database.url             = ${database.url}
database.username        = ${database.username}
database.password        = ${database.password}
のように記述するだけです。
プロパティファイルの書き方は Ant でプロパティ展開する場合とほとんど同じです。


実際に実行してみると

$ ./gradlew -p
server.url: http://app:8080/setting

database.driverClassName: org.hsqldb.jdbcDriver
database.url: jdbc:hsqldb:mem:devDB
database.username: bluepapa32
database.password: 
のように ちゃんと Application.properties にプロパティ展開されて標準出力されます。


もし、興味のある方は

https://github.com/bluepapa32/gradle-environment-sample/tree/20110315
にサンプルがありますので試してみてください。

literaliceliteralice 2011/03/15 13:36 こんにちは。literaliceです。すばらしい記事、ありがとうございます。
Grailsのビルドを設定するとき、BuildConfig.groovyを読み込んだりするのにも活用させていただこうと思っています。

触発されて、私も設定情報について書いてみました。よければ参考にしてください。
http://literal-ice.blogspot.com/2011/03/gradle.html

スパム対策のためのダミーです。もし見えても何も入力しないでください
ゲスト


画像認証