我有一个目标:
<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中做这个吗?
简短的回答是不可以,因为Ant属性是不可变的。属性一旦有了值,就不能再修改了。引用自文档:
属性是不可变的:谁先设置一个属性,谁就冻结它其余的构建;它们绝对不是变量。
尽管有一些事情你可以用来实现你想要的。首先是Ant <local>
任务,它允许您拥有目标本地属性的实例,该实例的值与目标外部的值不同。但是看看你的问题的细节,似乎你想要一个变量而不是一个属性-你想要的值可以随意改变。既然已经使用了ant- contribution,为什么不使用<var>
呢?Ant-contrib变量是可变的,在大多数情况下,可以直接用来代替Ant属性。