Ant中的Macrodef:在定义之外传递一个值

时间:2013-07-05 12:38:19

标签: ant

我在Ant中有以下宏定义,我想在此宏def之外传递“cmdStatus”值:

<macrodef name="execEtlBinScript">
    <attribute name="script" />
    <sequential>
        <exec executable="@{script}" resultproperty="cmdStatus"/>
    </sequential>
</macrodef>

你知道是否有可能吗?

感谢您的帮助。 亲切的问候, foxrafi

1 个答案:

答案 0 :(得分:3)

在您的示例中,属性cmdStatus已设置,然后可在macrodef外部使用。但我想你的问题是,如果你的几次调用你的宏,你就不会获得下一个状态值,因为Ant中的属性是不可变的。

正确处理它的方法是使result属性成为宏的一个属性:

<macrodef name="execEtlBinScript">
    <attribute name="script" />
    <attribute name="resultproperty" />
    <sequential>
        <exec executable="@{script}" resultproperty="@{resultproperty}"/>
    </sequential>
</macrodef>

然后每次调用macrodef都会通过不同的属性获取其值:

<execEtlBinScript script="somescript" resultproperty="status1" />
<echo message="Result of the first call: ${status1}" />
<execEtlBinScript script="somescript" resultproperty="status2" />
<echo message="Result of the second call: ${status2}" />