这就是我想要做的,我想在构建过程中替换大量属性文件中的名称和地址,但不幸的是我无法做到这一点,有没有更好的方法可以做到这一点而无需复制粘贴 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
循环代替带有两个antcall
的foreach
; - 使用
macrodef
和for
循环 --macrodef
可以将多个 ant xml 代码打包成一个类似任务的东西
实际上,对于两个目标 - replace.address
和 replace.name
,您确定要从命令行调用它们吗?
如果没有,请将它们命名为 -replace.address
和 -replace.name
或使用 macrodef
——公开 foreach< 的迭代主体
不是一个好的做法。
关于ant - 如何为foreach调用多个ant目标,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14873276/