如何在ANT中重置属性?

时间:2010-09-17 12:43:47

标签: ant properties velocity reset

我正在编写一个速度宏,在其中我有一些蚂蚁任务。在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中的属性是不可变的。 但我需要在每次迭代期间设置文件名。有没有办法完成这项工作?

如果有办法重置属性,我可以在每次迭代结束时这样做。或者有更好的方法吗? 任何帮助将非常感谢!

提前致谢, 阿南德

4 个答案:

答案 0 :(得分:4)

你可以使用ant-contrib的变量。它们的行为就像是可变的属性。

http://ant-contrib.sourceforge.net/tasks/tasks/variable_task.html

答案 1 :(得分:3)

在Ant 1.8中使用新的词法范围属性:

“词汇范围的本地属性,即仅在目标,顺序块或类似环境中定义的属性。”

Annoucement.

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

这是a post about it。并another one

答案 3 :(得分:0)

使用Ant Plugin Flaka中for + let任务的组合来覆盖现有属性 请参阅some snippets here