如何为foreach调用多个ant目标

时间:2013-02-14 11:00:12

标签: ant for-loop build ant-contrib

这是我想要做的,我想在构建期间从我的大量属性文件中替换名称和地址,但不幸的是我无法做到这一点,有没有更好的方法来做到这一点,而无需复制粘贴foreach两次。有人可以帮忙吗?

<target name="replace" >
<foreach target="replace.name,replace.address" param="foreach.file" inheritall="true">
    <path>
                <fileset dir="${build.tmp.dir}/resource">
                <!-- some complicated conditions go here -->
    </path>
</foreach>
</target>

<target name="replace.address">
    <echo>replacing #Address# for ${foreach.file}</echo>
    <replace file="${foreach.file}" token="#Address#" value="${address}" />
</target>

<target name="replace.name">
    <echo>replacing #Name# for ${foreach.file}</echo>
    <replace file="${foreach.file}" token="#Name#" value="${Name}" />
</target>

.properties文件看起来像

name=#Name#
address=#Address#

1 个答案:

答案 0 :(得分:2)

target的{​​p> foreach并非旨在获取多个目标名称。它只遍历提供的列表,而不是提供的目标。

要使实施更干,您可以

  • 使用for循环代替foreachantcall s;
  • macrodeffor循环一起使用 - macrodef可以将多个ant xml代码打包成类似任务的内容

实际上,对于两个目标 - replace.addressreplace.name,您确定要从命令行调用它们吗? 如果没有,请为其命名-replace.address-replace.name或使用macrodef - 公开foreach的迭代主体不是一个好习惯。