2014-07-09 55 views
0

我有一個屬性,它的值爲用逗號分隔的表示數字的字符串列表。例如,存儲在屬性中的逗號分隔列表中的前綴項

test.property =一,二,三 它可以是任何數字列表,但表單將是相同的。

爲了討論起見,我有一個名爲「reals」的目錄。 其中有'number.one','number.two'和'number.three'等名稱的子目錄以及其他我希望忽略的子目錄。

我想獲得那些對應條目test.property子目錄的列表

喜歡的東西

<dirset id="something" includes="${test.property}" dir="reals"/> 

這裏的問題是,在列表中的項目由test.property定義每個人都需要以「數字」作爲前綴。爲此工作。我不知道該怎麼做,這構成了我的問題的第一部分。

有沒有什麼辦法解決這個問題,僅僅使用我描述過的屬性,而不是提供一個已經有正確格式的test.property列表的任務?

回答

1

可以使用ant-contrib任務PropertyRegex任務,像這樣的東西

<propertyregex property="${comma.delimed.nums}" 
    input="package.ABC.name" 
    regexp="\b(\w+)\b" 
    replace="number.\1" 
    global="true" 
    casesensitive="false" /> 
+0

謝謝,這很好。 – daqpan

+0

不客氣。 – aliteralmind

+0

btw。在你的個人資料中年齡= 94似乎是一個錯字! – Rebse

1

爲了讓您的dirset包括對應的子目錄編輯+覆蓋與腳本任務現有test.property和內置的JavaScript引擎:

<project> 

<property name="test.property" value="one,two,three"/> 
<echo>1. $${test.property} => ${test.property}</echo> 

<script language="javascript"> 
<![CDATA[ 
    var items = project.getProperty('test.property').split(','); 
    var s = ""; 

    for (i = 0; i < items.length; i++) { 
    s += '*' + items[i] + ','; 
    } 

    project.setProperty('test.property', s.substring(0, s.length - 1)); 
]]> 
</script> 

<echo>2. $${test.property} => ${test.property}</echo> 

<dirset id="something" includes="${test.property}" dir="C:\some\path"/> 
<echo>Dirset includes => ${toString:something}</echo> 

</project> 

輸出:

[echo] 1. ${test.property} => one,two,three 
[echo] 2. ${test.property} => *one,*two,*three 
[echo] Dirset => number.one;number.three;number.two 

如果你想創建,而不是覆蓋現有test.property使用一個新的屬性:

project.setProperty('whatever', s.substring(0, s.length - 1)); 


project.setNewProperty('whatever', s.substring(0, s.length - 1)); 

,並使用新創建的屬性包括您dirset的屬性。

+0

太棒了。我一直在使用Ant多年,從不知道腳本語言可用。 – aliteralmind

+0

當使用內置javascript引擎的腳本任務時,您可以完全訪問ant api,並且不需要任何額外的jar文件,如f.e. antcontrib。 Groovy也是推薦的 - 你需要一個jar包 - groovy的任務非常棒。 – Rebse

相關問題