我有一个 ant 任务,它使用应用任务在一组文件上运行脚本。
我有一个这样的目录结构:
mkdir -p a/{b,c,d,e}/f
通常(如果我不传递任何参数),我希望 ant 在所有f
s 上运行。也就是说,如果我调用ant mytask
,它应该处理:a/b/f, a/c/f, a/d/f, a/e/f
。这已经使用应用和模式集工作。
但是,当我向它传递一个名为 的可选参数时foo
,它应该只在a/foo/f
.
所以如果我打电话ant mytask -foo b
,它应该a/b/f
只处理,而不是其他人。
我已经阅读了这篇 SO 帖子,其中解释了传递参数的方式,并且我查看了有关properties和conditionals的 ant 文档。但我仍然无法以一种有效的方式将它们拼凑在一起。
另外,我不想使用上面 SO 中的建议之一,它要求这样的参数:
<arg value="${arg0}"/>
<arg value="${arg1}"/>
我希望能够将其称为ant mytask -foo valueoffoo
任何任意foo
.
谢谢。
我在下面尝试了马丁克莱顿的建议,并有如下代码:
<target name="mytask">
<property name="foo" value="*" />
<apply executable="perl">
<arg value="somescript"/>
<dirset id="them" dir="a">
<include name="${foo}/*/f" />
</dirset>
</apply>
</target>
以上是我想要的。
注意 1:在我的实际代码中,我使用模式集而不是 dirset,但它的工作方式应该相同。
注意 2:在我最初的问题中,我说目录结构是a/{b,c,d,e}/f
. 它实际上有点复杂,因此*
在上面的包含中。我第一次忽略了它,因为它似乎不相关。