0

大家好,这是我的目标调用代码。

<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,有什么办法吗

4

2 回答 2

2

这对蚂蚁来说是不可能的。属性是不可变的,不能重置。ant contrib的var 任务可用于覆盖值,但应谨慎使用。

您可以使用临时文件来实现您想要的。但可能你正在尝试一些奇怪的东西,可以用不同的方式解决。
如果它们有权访问属性文件,这也适用于构建文件。

<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>
于 2012-05-15T09:15:57.827 回答
1

为了公正起见,有一个 hack 允许在没有任何额外库的情况下更改 ant 的不可变属性(从 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 所提到的,在所有规范方法被证明不适合之后,应谨慎使用。

如果不知道问题背后的目标,很难进一步提出建议。

于 2012-05-15T10:02:21.793 回答