2

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

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

你知道它是否可能吗?

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

4

1 回答 1

3

在您的示例中,该属性cmdStatus已设置,然后在宏定义之外可用。但我猜你的问题是,如果你多次调用你的宏,你不会得到下一个状态值,因为 Ant 中的属性是不可变的。

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

<macrodef name="execEtlBinScript">
    <attribute name="script" />
    <attribute name="resultproperty" />
    <sequential>
        <exec executable="@{script}" resultproperty="@{resultproperty}"/>
    </sequential>
</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}" />
于 2013-07-06T18:10:36.570 回答