Ant - 满足条件时运行步骤

时间:2017-07-08 19:19:10

标签: ant

我对蚂蚁有一个奇怪的问题。我想有条件地执行一个步骤,所以我创建了一个非常简单的例子:

<project name="TestProj" default="def">
<property name="prop1" value="xxx"/>


<target name="init">
    <echo message="init step"/>
</target>

<target name="def" depends="init">
    <echo message="def step"/>

    <condition property="should.run">
        <equals arg1="${prop1}" arg2="xxx"/>
    </condition>
    <echo message="outside check"/>
</target>


<target name="yes" if="${should.run}" depends="def">
    <echo message="yeah,should run"/>
</target>

<target name="no" unless="${should.run}" depends="def">
    <echo message="no,dont run"/>
</target>

输出结果为:

init:
     [echo] init step

def:
     [echo] def step
     [echo] outside check

所以,我的条件步骤根本没有运行。

我的例子出了什么问题?提前感谢任何建议。

2 个答案:

答案 0 :(得分:0)

ifunless使用属性的名称来检查是否存在,而不是值。因此,您应该使用if="should.run"unless="should.run"

答案 1 :(得分:0)

主要问题似乎是您的目标依赖项,而不是您的条件。您的AxesSubplot.patchesyes目标取决于no,而不是相反。因此,调用def只会运行defdef(因为init取决于def)。您需要制作一个调用inityes的第三个目标或扩展点,以使其按预期工作。

no

请注意,PavelS早些时候发布的其他答案中有一些道理。如果要在目标条件中使用属性引用而不是属性名称,则必须修改条件任务,以便在布尔值为false的情况下将条件属性显式设置为<extension-point name="all" depends="yes,no" /> (否则为{ {1}}任务根本不会设置属性。

false