Replace2是我寫的一個ant 任務,ant內置的有一個replace任務,用於替換指定文件裡的某些內容,如log4j.propertIEs裡:
log4j.appender.Y.File =@@Log.FilePath@@
replace任務可以讀取一個屬性配置文件,如下內容
Log.FilePath = E:\temp\info.log
WebService = http://10.1.120.133:7001/XXX/BookService
這個Replace 任務有一個用法就是解決多環境部署,也就是說,如果你現在有一個測試系統,又有一個開發系統,它們連著不同的地址的數據庫,不同地址的 WebService,以及不同地址的FTP服務,那麼,你在部署的時候必須將這些內容寫到配置文件裡,手工寫比較繁瑣,而且容易出錯,一個好的辦法就是采用replace任務,只需要寫一個testenv.properties,再寫一個devlopenv.properties,裡面各包含了目標環境的配置信息,然後運行此,去替換可能的配置文件,如log4j.propertIEs,hibernate.cfg.XML 等等。如果還是很不好理解的話,可以參考http://ant.apache.org/manual/CoreTasks/replace.Html,了解它的用法後再看下文,否則更不好理解
Replace應用於多環境部署固然可以,不過卻忽略了開發的需要,想想看,如果log4j.appender.Y.File =@@Log.FilePath@@那麼你在調試程序的時候必然出錯。再比如,數據源的配置
那這也沒有辦法讓程序運行。
Replace2 是我寫的一個ant task,其目的正是兼顧多環境部署以及開發需要。用法同Replace,不同的地方是在於配置文件跟正常文件一樣,並且在上方多了一行注釋如下;# log4j.appender.Y.File = @@Log.FilePath@@ log4j.appender.Y.File = E:\temp\info.log
Replace2任務將根據注釋裡的內容替換緊接下一行的內容,如果env.propertIEs 裡的內容有Log.FilePath=/opt/xxx/data/logs/info.log 那麼替換後的文件內容就是
# log4j.appender.Y.File = @@Log.FilePath@@ log4j.appender.Y.File = /opt/xxx/data/logs/info.log.
這樣,即不影響正常開發,又會在部署,特別是多環境部署的時候起動作用。
下面是使用方法:
代碼在google上http://code.google.com/p/replace2/
預覽代碼http://code.google.com/p/replace2/source/browse/