2014-10-28 65 views
1

我試圖使用螞蟻loadpropertiesexpandproperties: 這適用於簡單的文本屬性,但我得到奇怪的結果,當一個屬性包含一個Windows路徑。如何使用窗口pathseparator螞蟻expandproperties

<property name="myAntFile" value="${ant.file}" /> 

<loadproperties srcFile="my.properties"> 
    <filterchain> 
     <expandproperties /> 
    </filterchain> 
</loadproperties> 

<echo message="$${external} = ${external}" /> 

屬性文件看起來像這樣:

external=${myAntFile} 

結果是:

Buildfile: C:\projects\trunk\build.xml 
... 
[echo] ${external} = C:projects\trunkbuild.xml 

我知道,屬性文件有escape rules的反斜槓和特殊的空格字符。但是我沒有看到我可以如何翻譯buildscripts屬性的特殊含義。

任何人都有一個想法如何解決這個問題,或者這是一個螞蟻錯誤(也許expandproperties鏈應該獲得一個額外的屬性在屬性文件上下文中使用時轉義?)?

+0

究竟是什麼問題,你想完成什麼? Windows路徑只有在回顯它們或者在確定文件/目錄/等時不工作時纔會造成麻煩? – bassim 2014-10-30 10:36:49

回答

0

螞蟻,你可以定義路徑時,即使是在Windows上使用作爲路徑分隔符斜槓/:用反斜槓C:/projects/trunk/build.xml

如果${ant.file}返回路徑,轉換加載屬性文件之前,首先這條道路。

不幸的是,我還沒有找到將路徑從C:\a\path轉換爲C:/a/path並返回的最終方法。據說pathconvert可以做的伎倆......

<pathconvert targetos="unix" property="myAntFile.withForwardSlashes"> 
    <path location="${myAntFile}"/> 
</pathconvert> 

...但它混淆了相對和絕對路徑,我不能讓在測試這是我的OS X的機器上工作。

+0

感謝您的回答。我知道正斜槓也在Windows上工作,但我正在尋找一個通用的解決方案。 $ {ant.file}屬性僅僅是一個例子。 在我的構建過程中,有幾十個文件基本屬性,我的構建腳本甚至不知道其中的一些內容,所以試圖將它們轉換以防萬一用戶維護屬性文件使用它們是徒勞的。即使我嘗試屬性文件編輯器必須知道有關特殊處理... – dag 2014-10-30 09:30:44

+0

我明白了。儘管如此,一般的解決方案必須是自動轉換Windows路徑,因爲通常在反斜槓導致麻煩的情況下使用它們之前轉換它們比在這些情況下嘗試抑制反斜槓轉義更容易。 – bassim 2014-10-30 10:34:23

+0

是的,畢竟這不僅僅與windwos路徑有關,它是關於所有字符串包含需要在屬性文件中轉義的字符序列。在這種情況下展開屬性決不是文本替換,因爲人們期望... – dag 2014-10-30 16:37:21