for循环-如何为foreach调用多个ant目标



这是我要做的,我想在构建过程中替换大量属性文件中的名称和地址,但不幸的是,我无法做到这一点,有没有更好的方法可以做到这一步,而不必复制粘贴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#

foreachtarget未设计为采用多个目标名称。它只遍历所提供的列表,而不是所提供的目标。

为了使实现更加DRY,您可以

  • 使用for循环而不是具有两个antcallforeach
  • macrodeffor循环一起使用--macrodef可以将几个ant xml代码打包到类似任务的东西中

实际上,对于replace.addressreplace.name这两个目标,您确定要从命令行调用它们吗?如果不是,请将它们命名为-replace.address-replace.name或使用macrodef——暴露foreach的迭代体不是一个好的做法。

相关内容

  • 没有找到相关文章

最新更新