在Ant目標中,我得到一個屬性,其中包含要包含在進一步操作(複製,過濾等)中的目錄列表。它看起來像這樣:如何從Ant中的逗號分隔列表中創建文件集?
directories=dir1, dir2, dir3
我需要一種方法來此列表轉換爲選擇所有在這些目錄中的文件集或patternset。
我知道我可以使用腳本來生成模式字符串,然後在「include」或「exclude」中使用它,但是有沒有辦法避免腳本?
在Ant目標中,我得到一個屬性,其中包含要包含在進一步操作(複製,過濾等)中的目錄列表。它看起來像這樣:如何從Ant中的逗號分隔列表中創建文件集?
directories=dir1, dir2, dir3
我需要一種方法來此列表轉換爲選擇所有在這些目錄中的文件集或patternset。
我知道我可以使用腳本來生成模式字符串,然後在「include」或「exclude」中使用它,但是有沒有辦法避免腳本?
像這樣的東西應該工作:
<dirset includes="${directories}"/>
是,dirset
不fileset
。然而,它可能已經足夠了,否則你可以使用來自ant-contrib的for
或foreach
迭代目標中的目錄。你也可以定義一個基於dirset的ResourceCollection。這可能有助於瞭解預計「進一步行動」是什麼。
但是,這感覺就像是太辛苦了......
但是,非常感謝您的回答,因爲您注意到這是太多的工作。使用腳本將列表轉換爲模式更加簡潔。 我可以切換到以分號分隔的列表,但爲什麼這應該有所作爲? – 2010-08-05 03:29:21
嗯,我想這沒有太大的區別。似乎應該可以使用
如何使用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系統,你可以使用/**/*
。)
感謝一個答案 – 2010-10-05 09:27:08
注意螞蟻1.9.4的,還有一個新的結構<multirootfileset>提供該功能,即使迪爾斯沒有兄弟姐妹:
<multirootfileset basedirs="${directories}" includes="**/*">
謝謝,馬丁! – 2010-12-17 04:39:25