在Ant中更改两个目标中的变量值

在Ant中更改两个目标中的变量值,ant,Ant,我有一个目标: <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" p

我有一个目标:

<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>

此目标调用第二个目标
“添加内部类列表”

在第二个目标中,我想更新调用目标中定义的属性(即名为
client.jar.classes
)的属性。 在每次调用中,我希望此值保持不变,并在需要时进行更新


我想知道,我能在Ant中做到这一点吗?

简单的回答是不,你不能这么做,因为Ant。属性一旦有值,就不能更改。从文件中引用:

属性是不可变的:任何设置属性的人都会首先将其冻结 建造的其余部分;它们绝对不是变量

不过,有几件事你也许可以用来实现你想要的。 首先是Ant,它允许您在目标本地拥有一个属性实例,该属性的值与目标外部的属性值不同。但从问题的细节来看,似乎您想要的是一个变量而不是一个属性—您想要随意更改值。既然您已经在使用ant contrib,为什么不使用?Ant contrib变量是可变的,在大多数情况下,可以直接使用它来代替Ant属性