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

标签 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#

最佳答案

foreach

target 并非设计为采用多个目标名称。它仅迭代提供的列表,而不迭代提供的目标。

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

  • 使用 for 循环代替带有两个 antcallforeach
  • 使用 macrodeffor 循环 -- macrodef 可以将多个 ant xml 代码打包成一个类似任务的东西

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

关于ant - 如何为foreach调用多个ant目标,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14873276/

相关文章:

java - Ant:在1个文件中设置属性,在另一个文件中读取它?

java - 将 Selenium 与 HP ALM 集成

javascript - 我的 JavaScript for 循环有问题

linux - 从源代码构建 go 编译器时出错

visual-studio-2010 - 如何配置 TeamCity 以构建包含 2 个项目的解决方案?

ant - 删除除一个以外的文件夹

android - Android 上的 Pocketsphinx 无法找到声学模型定义 mdef

postgresql - 循环遍历并从多个表中选择数据的函数

r - 当要填充的条目数可能不同时,如何仅填充一行中的特定值

angular - 基本应用程序生产包的常见大小