2010-08-04 48 views
2

在Ant目標中,我得到一個屬性,其中包含要包含在進一步操作(複製,過濾等)中的目錄列表。它看起來像這樣:如何從Ant中的逗號分隔列表中創建文件集?

directories=dir1, dir2, dir3 

我需要一種方法來此列表轉換爲選擇所有在這些目錄中的文件集或patternset。

我知道我可以使用腳本來生成模式字符串,然後在「include」或「exclude」中使用它,但是有沒有辦法避免腳本?

+0

謝謝,馬丁! – 2010-12-17 04:39:25

回答

0

像這樣的東西應該工作:

<dirset includes="${directories}"/> 

是,dirsetfileset。然而,它可能已經足夠了,否則你可以使用來自ant-contrib的forforeach迭代目標中的目錄。你也可以定義一個基於dirset的ResourceCollection。這可能有助於瞭解預計「進一步行動」是什麼。

但是,這感覺就像是太辛苦了......

+0

但是,非常感謝您的回答,因爲您注意到這是太多的工作。使用腳本將列表轉換爲模式更加簡潔。 我可以切換到以分號分隔的列表,但爲什麼這應該有所作爲? – 2010-08-05 03:29:21

+0

嗯,我想這沒有太大的區別。似乎應該可以使用資源收集來完成某些操作,但我無法使其運行:http://ant.apache.org/manual/Types/resources.html#restrict – 2010-08-05 23:45:41

1

如何使用antcontrib propertyregex任務轉換的逗號分隔的列表爲適用於文件集通配符?

<property name="directories" value="dir1, dir2, dir3" /> 

<property name="wildcard" value="${file.separator}**${file.separator}*" /> 
<propertyregex property="my_pattern" 
       input="${directories}" 
       regexp=", " 
       replace="${wildcard}," /> 

在這一點上,我們現在有:

my_pattern=dir1/**/*,dir2/**/*,dir3 

可以與進一步後綴的通配符來得到完整的文件集:

<fileset dir="." id="my_fileset" includes="${my_pattern}${wildcard}" /> 

(更精細的${wildcard}是保證在unix和windows文件系統之間的可移植性,如果你是純UNIX系統,你可以使用/**/*。)

+0

感謝一個答案 – 2010-10-05 09:27:08

1

注意螞蟻1.9.4的,還有一個新的結構<multirootfileset>提供該功能,即使迪爾斯沒有兄弟姐妹:

<multirootfileset basedirs="${directories}" includes="**/*">