2011-02-23 64 views
6

我在屬性文件中有成千上萬的屬性,我只想更改下面的一個屬性。如何不逃脫:Ant屬性文件任務中的字符

<propertyfile file="${mypropetyfile}"> 
    <entry key="jndiname" value="java:comp/env/wm/default"/> 
</propertyfile> 

但在財產文件,我一個額外的\獲取屬性值:

jndiname=java\:comp/env/wm/default 

我試圖與<echo>任務,但它刪除其他屬性。我也通過串聯試圖像在這種情況下也是我的:之前獲得額外\

<propertyfile file="${mypropetyfile}"> 
    <entry key="jndiname" default="" operation="+" value="java:comp/env/wm/default"/> 
</propertyfile> 
+0

確定嗎?它在這裏很好。 – adarshr 2011-02-23 10:02:27

+0

是的,它工作正常。謝謝JB – 2011-03-16 15:38:47

回答

5

\是轉義字符。雖然在這裏沒有必要,因爲:不是關鍵的一部分,但是它是價值的一部分,它也不會傷害。使用Properties.load()加載這個屬性文件將會忽略:。你不應該在意逃跑。

+0

看來,Apache log4j並沒有意識到這一點。 \符號不會直接影響您的轉換模式,然後進入日誌文件。 – 2012-08-14 14:27:10

+0

也不是Nuxeo ... – Rhubarb 2014-07-18 16:13:02

+1

爲了公平對待Ant,它可能使用標準的Java屬性編寫器來逃避冒號,因爲它們是替代方案(沒有人使用),等於...請參閱http://docs.oracle的.com/JavaSE的/ 6 /文檔/ API/JAVA/util的/ Properties.html#商店%28java.io.Writer,%20java.lang.String%29。但由於許多屬性文件用戶無法處理它(看起來),它應該是可選的 – Rhubarb 2014-07-18 16:18:49

1

我發現當我使用echo任務時,該條目在文件中出現預期的\期望值。

但是,如果我之後運行propertyfile任務以使用某些值填充相同的文件,它將轉義文件中的所有冒號。

爲了解決這個問題,我簡單地確保我先運行了propertyfile任務,然後是echo。

4

恰好碰到了同樣的問題,改變由WebSphere 6.1 &讀取屬性文件最後不得不做此變通辦法:

<property name="jndi.example" value="java:comp/env/example" /> 

<propertyfile file="jdbc.properties"> 
    <entry key="datasource.example.jndi" operation="=" value="@EXAMPLE"/> 
</propertyfile> 

<!-- set tokens to property values because ant wants to 'escape the colon' --> 
<replace file="jdbc.properties" token="@EXAMPLE" value="${jndi.example}" /> 
3

的「最佳答案」是不是真正解決問題。 Properties.load()不是這種情況下的答案(很有可能),你不會控制將消耗屬性文件的'其他方'。

它沒有出現,你可以設置<propertyfile/>不這樣做。對我來說就像一個錯誤。

<replace>建議似乎是最好的行動方式imo。