在Ant目标中,我获得了一个属性,其中包含要包含在进一步操作中的目录列表(复制,过滤等)。它看起来像这样:
directories=dir1, dir2, dir3
我需要一种方法将此列表转换为文件集或模式集,以选择所有这些目录中的文件。
我知道我可以使用脚本生成模式字符串,然后在“include”或“exclude”中使用它,但有没有办法避免脚本?
答案 0 :(得分:2)
请注意,从Ant 1.9.4开始,有一个新的构造<multirootfileset>提供了该功能,即使dirs不是兄弟:
<multirootfileset basedirs="${directories}" includes="**/*">
答案 1 :(得分: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}" />
(fiddly ${wildcard}
是为了确保unix和windows文件系统之间的可移植性,如果你是纯unix,可以使用/**/*
。)
答案 2 :(得分:0)
这样的事情应该有效:
<dirset includes="${directories}"/>
是的,dirset
不是fileset
。但是,它可能就足够了,否则您可以使用ant-contrib中的for
或foreach
来迭代目标中的目录。您也可以基于dirset定义ResourceCollection。可能有助于了解预期“进一步行动”的内容。
然而,这感觉太多了......