在 <macrodef> <pathelement> <path> Ant 中为每个调用 a



我有一个path如下:

<path refid="myjarlocation"/>

现在我想遍历这个路径,对于路径中出现的每个值,我想调用一个macrodef,并将该值作为在marcodef中使用的属性之一。

在目标的情况下,我们可以很容易地这样做:

<foreach target="mytarget" param="jarloc">
    <path refid="myjarlocation"/>
</foreach>

我不能使用for each,因为我需要传递多个参数,所以我使用macrodef。因此,问题是如何遍历路径并调用macrodef而不是目标。

我已经做了一些类似的工作,通过使用ant-contrib的for任务来迭代路径并将path元素传递给macrodef。

首先在项目中获取ant-contrib -参见http://ant-contrib.sourceforge.net/

接下来,在ant构建中定义您的macrodef,包括一些将采用path元素的属性。如:

<macrodef name="awesome-macro">
    <attribute name="path-to-deal-with"/>
    <attribute name="unrelated-attribute"/>
    <sequential>
        ...
    </sequential>
</macrodef>

然后,使用for任务将路径迭代到pathelements并调用宏:

<for param="path.element">
    <fileset dir="${jars.dir}">
        <include name="*.jar"/>
    </fileset>
    <sequential>
        <awesome-macro path-to-deal-with="@{path.element}" unrelated-attribute="whatever"/>
    </sequential>
</for>

注意,在for循环中使用@{path.element}而不是${path.element}来引用循环参数!

相关内容

  • 没有找到相关文章