我正在编写一个速度宏,在其中我有一些蚂蚁任务。在velocity宏的#foreach循环中,我有一个pathconvert任务:
#foreach(<iterate through something>)
<pathconvert property='filename' refid='swf.file'>
<mapper>
<chainedmapper>
<flattenmapper/>
<globmapper from='*-d.swf' to='*'/>
</chainedmapper>
</mapper>
</pathconvert>
#end
我遇到的问题是'filename'属性在第一次迭代期间只被设置一次,因为ANT中的属性是不可变的。 但我需要在每次迭代期间设置文件名。有没有办法完成这项工作?
如果有办法重置属性,我可以在每次迭代结束时这样做。或者有更好的方法吗? 任何帮助将非常感谢!
提前致谢, 阿南德
答案 0 :(得分:4)
你可以使用ant-contrib的变量。它们的行为就像是可变的属性。
http://ant-contrib.sourceforge.net/tasks/tasks/variable_task.html
答案 1 :(得分:3)
在Ant 1.8中使用新的词法范围属性:
“词汇范围的本地属性,即仅在目标,顺序块或类似环境中定义的属性。”
Ant中的属性被设计为不可移动的,但它们屈服于大众需求并给了我们变量。您可以选择编写自定义任务(使用Java或动态语言),但这似乎是一个很好的折衷方案。
答案 2 :(得分:0)
以下代码段说明了一个ant属性,我猜这个属性没有记录。 属性是不可变的,但引用是可变的。因此,任何没有名称但引用的数据类型都是可变的。例如fileset
。但是今天我找到了一种方法来获得一种可变的属性。与local
任务或其他一些技巧相关联,它可能是在蚂蚁中使用变量的一种方式。
<property name="a" value="aaa" id="refa" />
<property name="b" refid="refa" />
<echo>${b}</echo>
<property name="c" value="ccc" id="refa" />
<property name="d" refid="refa" />
<echo>${d}</echo>
输出结果为:
aaa
ccc
虽然在这两种情况下都会打印参考refa
。
答案 3 :(得分:0)
使用Ant Plugin Flaka中for + let任务的组合来覆盖现有属性 请参阅some snippets here。