我有一个目标:
<target name="add_inner_class" >
<property name="client.jar.classes"
value="${client.class.jar.package.list}"/>
<foreach list="${client.class.jar.package.list}"
target="add_inner_class_list" param="outer_class"
delimiter=" " inheritall="true" />
</target>
此目标调用第二个目标"add_inner_class_list"
。
在第二个目标中,我想更新调用目标中定义的属性(即名为client.jar.classes
的属性)。
在每次调用中,我希望此值保持不变并在需要时进行更新。
我想知道,我可以在Ant中这样做吗?
答案 0 :(得分:0)
简短的回答是否定的,你不能这样做,因为Ant properties are immutable。一旦属性具有值,就无法更改。引用文档:
属性是不可变的:任何设置属性的人都会将其冻结 其余的构建;他们绝对不是变数。
虽然有一些事情可以用来实现你想要的东西。
首先是Ant <local>
task,它允许您为目标提供本地属性的实例,其值与目标之外的值不同。但是看一下你问题的具体细节,你似乎想要一个变量而不是一个属性 - 你希望随意改变这个值。由于您已经在使用ant-contrib,为什么不使用<var>
? Ant-contrib变量是可变的,在大多数情况下,可以直接用于代替Ant属性。