2012-01-27 5 views
21

Gradleのデプロイメントタスクの一部として、foo.propertiesのプロパティの値を開発データベースではなく本番データベースに変更したいとします。Gradleビルド時に.propertiesファイルをどのように変換できますか?

私はむしろファイル全体を置き換えるのではなく、かなり大きいので、1行で異なる2つの異なるバージョンを維持する必要があることを意味します。

これを達成する最も良い方法は何ですか?

答えて

28

あなたはant.propertyfileタスクを使用することができますオブジェクトを作成し、ターゲットのプロパティファイルパスを使用してファイルオブジェクトを作成し、loadを使用してプロパティオブジェクトにファイルをロードし、setPropertyを使用して目的のプロパティを設定し、ストアに変更を保存します。

def var = new Properties() 
File myfile = file("foo.properties"); 

var.load(myfile.newDataInputStream()) 
var.setProperty("db", "prod") 
var.store(myfile.newWriter(), null) 
3

単純な解決策は、java.util.Propertiesを使用してファイルを書き込むタスクをコーディングすることです。インクリメンタルにファイルを更新したい場合は、これを自分で実装する必要があります。あるいは、あなたが望むことをするAntタスクが見つかるかもしれません(AntタスクはそのままGradleから使用できます)。最良の結果を得るには、タスクの入力と出力も宣言して、プロパティファイルを変更する必要があるときにGradleがタスクを実行するようにする必要があります。

+0

さらに便利なAPI(http://commons.apache.org/configuration/userguide/howto_filebased.html)を提供するApacheコモンズ構成ライブラリを使用することもできます。もちろん、ほとんどのロジックを自分で実装する必要があります。 – rodion

+0

Antの[PropertyFile task](http://ant.apache.org/manual/Tasks/propertyfile.html)は、私が必要としていたことを正確に行いました。 –

6

あなたは「置き換え」アリをオフに解雇することができるはず何をしたいんタスク:プロパティを作成します

ant.propertyfile(
     file: "myfile.properties") { 
     entry(key: "propertyName", value: "propertyValue") 
     entry(key: "anotherProperty", operation: "del") 
    } 
関連する問題