2010-07-29 68 views
3

我在寫出一個將目錄路徑的值保存到屬性文件中的屬性時遇到問題。在ant中寫出文件路徑屬性問題

我的腳本最初在使用<property file="source.props"/>的道具文件中讀取這個特定的屬性,稱之爲'appserver.home'。我已經迴應了價值,它正確地讀取爲C:\\ somedir \\ jboss_4_2_3。

我的腳本接下來要做的是將此值提供給另一個屬性文件(由另一個ant腳本使用 - 儘管這不重要)。要創建我使用的是佔位符由$包圍的那種關模板文件.... $在正確的位置插入正確的價值觀這個其他文件,並使用下列內容: -

<copy file="template_file.props" tofile="target.props"> 
    <filterset begintoken="$" endtoken="$"> 
     <filter token="appServerDir" value="${appserver.home}"/> 
     <filter token="dbusername" value="${database.name}"/> 
     .... 
    </filterset> 
</copy>     

的問題是現在在target.props中的值是C:\ somedir \ jboss_4_2_3即它失去了轉義字符。當下一個ant腳本使用該文件時,它將該屬性值解釋爲C:somedirjboss_4_2_3

所以這個問題如何告訴螞蟻,我正在寫的值是一個文件路徑? 注意我曾嘗試以下,這實際上工作: -

<propertyfile file="target.props"> 
    <entry key="appServerDir" value="${appserver.home}"/> 
</propertyfile> 

..也就是說,它輸出的名稱Ç\:\\ \\ somedir jboss4_2_3,但我寧可不使用這種技術,而使用模板文件的技術,因爲它包含了一些性能,這是總是靜態的,以及評論等

在此先感謝

回答

3

在這裏進行的逃生處理方面,任務之間可能存在一些混淆的區別。

當你說'appserver.home'正確回聲時,我想你正在使用'echoproperties'任務,它顯示存儲的值沒有內插轉義。並且顯示了與'source.props'文件中相同數量的轉義。

問題是,一般來說,當Ant將此值插入到字符串中時,它將消耗轉義,因此它們消失。這是一個例外,在'propertyfile'任務中,您通常希望將轉義保留在輸出屬性文件中 - 正如您所觀察到的 - 爲了能夠在以後正確讀取文件。

那麼,該怎麼辦?

也許最簡單的事情是確保從'source.props'中讀取的屬性保留它們的轉義以用於以後的過濾器。因此,而不是使用

<property file="source.props"/> 

加載,使用

<loadproperties srcfile="source.props"> 
    <filterchain> 
     <replacestring from="\" to="\\" /> 
    </filterchain> 
</loadproperties> 

這應該確保你的轉義序列傳播。

0

我剛剛測試了以下使用Eclipse集成螞蟻支持:

<copy file="test.props" tofile="target.props"> 
    <filterset begintoken="$" endtoken="$"> 
    <filter token="appServerDir" value="C\:\\somedir\\jboss_4_2_3"/> 
    </filterset> 
</copy> 

,並生成以下文件:

C\:\\\somedir\\\jboss_4_2_3 

螞蟻什麼版本您使用的?

+0

我正在使用ant 1.7.1。但是你的例子與我的代碼略有不同,因爲你直接傳遞值,即硬編碼.-你嘗試過設置一些屬性,並傳遞值嗎? – Neil 2010-07-29 08:32:16

+0

@Neil是的我試過了,輸出結果是一樣的:C:\\ somedir \\ jboss_4_2_3 – 2010-07-29 08:52:13

+0

@Manuel - 你用什麼版本的ant? – Neil 2010-07-29 08:58:17

0

作爲解決方法,您還可以使用正斜槓編寫您的初始屬性,如C:/somedir/jboss_4_2_3,它不應該使用轉義字符。

+0

這會工作,但不幸的是我沒有控制創建初始屬性文件(!)的過程。謝謝。 – Neil 2010-07-29 08:58:49

1

我剛剛在Ubuntu服務器10.10上使用Apache Ant version 1.7.1 compiled on May 25 2010進行了測試,並使用了2008年6月27日在Windows XP上的Eclipse 3.6中編譯的Apache Ant版本1.7.1。現在的結果(來自相同):

變量source.props:
appserver.home=C\:\\somedir\\jboss_4_2_3

回聲上控制檯:
[echo] C:\somedir\jboss_4_2_3

變量target.properties:
appserver.home=C:\somedir\jboss_4_2_3

編輯 - 下面的解決方案; -D

在我看來,你應該使用propertyfile,如果你閱讀這個任務的手冊,你可以看到它能夠MANIPUlATE現有的屬性文件。這一個適用於我,並保留模板中的所有評論和變量。

<copy file="template_file.props" tofile="target.props" /> 
<propertyfile file="target.props"> 
    <entry key="appserver.home" value="${appserver.home}"/> 
</propertyfile>