如何从Ant中以逗号分隔的目录列表创建文件集?

时间:2010-08-04 04:58:19

标签: ant fileset

在Ant目标中,我获得了一个属性,其中包含要包含在进一步操作中的目录列表(复制,过滤等)。它看起来像这样:

directories=dir1, dir2, dir3

我需要一种方法将此列表转换为文件集或模式集,以选择所有这些目录中的文件。

我知道我可以使用脚本生成模式字符串,然后在“include”或“exclude”中使用它,但有没有办法避免脚本?

3 个答案:

答案 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中的forforeach来迭代目标中的目录。您也可以基于dirset定义ResourceCollection。可能有助于了解预期“进一步行动”的内容。

然而,这感觉太多了......