这是我想要做的,我想在构建期间从我的大量属性文件中替换名称和地址,但不幸的是我无法做到这一点,有没有更好的方法来做到这一点,而无需复制粘贴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#
答案 0 :(得分:2)
target
的{p> foreach
并非旨在获取多个目标名称。它只遍历提供的列表,而不是提供的目标。
要使实施更干,您可以
for
循环代替foreach
和antcall
s; macrodef
与for
循环一起使用 - macrodef
可以将多个ant xml代码打包成类似任务的内容实际上,对于两个目标 - replace.address
和replace.name
,您确定要从命令行调用它们吗?
如果没有,请为其命名-replace.address
和-replace.name
或使用macrodef
- 公开foreach
的迭代主体不是一个好习惯。