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

发布于 2024-09-12 22:55:58 字数 234 浏览 8 评论 0原文

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

directories=dir1, dir2, dir3

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

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

In an Ant target I get a property, containing the list of directories to be included in further action (copying, filtering, etc.). It looks like this:

directories=dir1, dir2, dir3

I need a way to convert this list to a fileset or patternset that selects all the files in these directories.

I know I can use a script to generate pattern strings and then use it in the "include" or "exclude", but is there are a way to avoid scripts?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(3

太阳哥哥 2024-09-19 22:55:58

请注意,从 Ant 1.9.4 开始,有一个新的构造 提供了该功能,即使目录不是兄弟姐妹:

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

Note that as of Ant 1.9.4, there is a new construct <multirootfileset> that provides that functionality, even if the dirs are not siblings:

<multirootfileset basedirs="${directories}" includes="**/*">
樱桃奶球 2024-09-19 22:55:58

如何使用 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 文件系统之间的可移植性,您可以使用 < code>/**/* 如果你是纯unix。)

How about using the antcontrib propertyregex task to convert the comma-separated list into wildcards suitable for a fileset?

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

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

At this point we now have:

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

That can be used with a further suffixed wildcard to get the full fileset:

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

(The fiddly ${wildcard} is to ensure portability between unix and windows filesystems, you could use /**/* if you're pure unix.)

尝蛊 2024-09-19 22:55:58

像这样的东西应该可以工作:

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

是的,dirset 不是 fileset。但是,这可能就足够了,否则您可以使用 ant-contrib 中的 forforeach 来迭代目标中的目录。您也许还可以基于 dirset 定义一个 ResourceCollection。了解预期的“进一步行动”可能会有所帮助。

不过,感觉这工作量太大了……

Something like this should work:

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

Yes, dirset isn't fileset. However, it may be enough, or else you can probably use a for or foreach from ant-contrib to iterate over the directories in your target. You might also be able to define a ResourceCollection based around the dirset. It might help to know what the "further action" is expected to be.

However, this feels like too much work ...

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文