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