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

时间:2016-11-02 13:33:34

标签: ant ant-contrib

我有path如下:

<path refid="myjarlocation"/>

现在我想迭代这条路径,并且对于路径中存在的每个值,我想要将该值称为宏定义,作为要在marcodef中使用的属性之一。

如果是目标,我们可以按照以下方式轻松完成:

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

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

1 个答案:

答案 0 :(得分:2)

我通过使用ant-contrib的for任务来迭代路径并将路径元素传递给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}来引用循环参数!