大家好,这是我的目标通话代码。
<target name="abc">
<var name="x" value="10"/>
<antcall target="def"/>
<!--Again Access The value of x here and also change it here-->
</target>
<target name="def">
<!--Access The value of x here and also change it here-->
</target>
并且我想在其他构建文件中访问此X,有什么办法
答案 0 :(得分:2)
这对蚂蚁来说是不可能的。属性是不可变的,无法重置。 var task from ant contrib可用于覆盖值,但应谨慎使用。
您可以使用临时文件来实现您想要的效果。但是,你可能正在尝试一些奇怪的东西,这可以通过不同的方式解决 如果他们可以访问属性文件,这也适用于构建文件。
<target name="abc">
<var name="x" value="10"/>
<antcall target="def"/>
<!--Again Access The value of x here and also change it here-->
<var unset="true" file="myproperty.properties" /> <!-- read variable from property file-->
</target>
<target name="def">
<echo file="myproperty.properties" append="false">x=12</echo> <!-- create a new propertyfile-->
</target>
答案 1 :(得分:1)
为了正义,有一个hack允许更改ant的不可变属性而不需要任何额外的libs(因为java 6):
<scriptdef name="propertyreset" language="javascript"
description="Allows to assing @{property} new value">
<attribute name="name"/>
<attribute name="value"/>
project.setProperty(attributes.get("name"), attributes.get("value"));
</scriptdef>
用法:
<target name="abc">
<property name="x" value="10"/>
<antcall target="def"/>
</target>
<target name="def">
<propertyreset name="x" value="11"/>
</target>
正如@oers所提到的,在所有规范方法被证明不合适之后,应谨慎使用。
如果不了解问题背后的目标,很难进一步建议。