2012-01-27 25 views
21

作爲Gradle中部署任務的一部分,我想更改foo.properties中某個屬性的值,使其指向生產數據庫而不是開發數據庫。如何在Gradle構建期間轉換.properties文件?

我寧願不直接替換整個文件,因爲它相當大,這意味着我們將不得不維護兩個不同的版本,這些版本只在一行上有所不同。

完成此操作的最佳方法是什麼?

回答

28

可以使用ant.propertyfile任務:

ant.propertyfile(
     file: "myfile.properties") { 
     entry(key: "propertyName", value: "propertyValue") 
     entry(key: "anotherProperty", operation: "del") 
    } 
3

一個簡單的解決方案是編寫一個使用java.util.Properties寫入文件的任務。如果你真的想增量更新文件,你必須自己實現。或者你也許會發現一個Ant任務可以完成你想要的任務(所有的Ant任務都可以像Gradle一樣使用)。爲了獲得最佳結果,您還應該聲明任務的輸入和輸出,以便Gradle僅在需要更改屬性文件時執行任務。

+0

你也可以使用Apache commons配置庫,它提供了更方便的API(http://commons.apache.org/configuration/userguide/howto_filebased.html)。當然,你仍然必須自己實現大部分邏輯。 – rodion 2012-01-28 03:39:42

+0

Ant的[PropertyFile任務](http://ant.apache.org/manual/Tasks/propertyfile.html)正是我所需要的。 – 2012-02-06 20:30:52

1

創建一個屬性對象,然後使用目標屬性文件路徑創建文件對象,在加載屬性對象上加載文件,使用setProperty設置所需屬性,然後使用存儲保存更改。

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

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

請添加一些文檔/說明。 – 2017-12-27 12:36:58

相關問題