作爲Gradle中部署任務的一部分,我想更改foo.properties
中某個屬性的值,使其指向生產數據庫而不是開發數據庫。如何在Gradle構建期間轉換.properties文件?
我寧願不直接替換整個文件,因爲它相當大,這意味着我們將不得不維護兩個不同的版本,這些版本只在一行上有所不同。
完成此操作的最佳方法是什麼?
作爲Gradle中部署任務的一部分,我想更改foo.properties
中某個屬性的值,使其指向生產數據庫而不是開發數據庫。如何在Gradle構建期間轉換.properties文件?
我寧願不直接替換整個文件,因爲它相當大,這意味着我們將不得不維護兩個不同的版本,這些版本只在一行上有所不同。
完成此操作的最佳方法是什麼?
可以使用ant.propertyfile任務:
ant.propertyfile(
file: "myfile.properties") {
entry(key: "propertyName", value: "propertyValue")
entry(key: "anotherProperty", operation: "del")
}
一個簡單的解決方案是編寫一個使用java.util.Properties
寫入文件的任務。如果你真的想增量更新文件,你必須自己實現。或者你也許會發現一個Ant任務可以完成你想要的任務(所有的Ant任務都可以像Gradle一樣使用)。爲了獲得最佳結果,您還應該聲明任務的輸入和輸出,以便Gradle僅在需要更改屬性文件時執行任務。
你應該能夠火過一隻螞蟻「替換」的任務,你想要做什麼:http://ant.apache.org/manual/Tasks/replace.html
ant.replace(file: "blah", token: "wibble", value: "flibble")
創建一個屬性對象,然後使用目標屬性文件路徑創建文件對象,在加載屬性對象上加載文件,使用setProperty設置所需屬性,然後使用存儲保存更改。
def var = new Properties()
File myfile = file("foo.properties");
var.load(myfile.newDataInputStream())
var.setProperty("db", "prod")
var.store(myfile.newWriter(), null)
請添加一些文檔/說明。 – 2017-12-27 12:36:58
你也可以使用Apache commons配置庫,它提供了更方便的API(http://commons.apache.org/configuration/userguide/howto_filebased.html)。當然,你仍然必須自己實現大部分邏輯。 – rodion 2012-01-28 03:39:42
Ant的[PropertyFile任務](http://ant.apache.org/manual/Tasks/propertyfile.html)正是我所需要的。 – 2012-02-06 20:30:52