如何在ant中通过引用传递参数

时间:2012-05-15 08:37:36

标签: ant 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-->
</target>

<target name="def">
  <!--Access The value of x here and also change it here-->
</target>

并且我想在其他构建文件中访问此X,有什么办法

2 个答案:

答案 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所提到的,在所有规范方法被证明不合适之后,应谨慎使用。

如果不了解问题背后的目标,很难进一步建议。