我对蚂蚁有一个奇怪的问题。我想有条件地执行一个步骤,所以我创建了一个非常简单的例子:
<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
所以,我的条件步骤根本没有运行。
我的例子出了什么问题?提前感谢任何建议。
答案 0 :(得分:0)
if
和unless
使用属性的名称来检查是否存在,而不是值。因此,您应该使用if="should.run"
,unless="should.run"
。
答案 1 :(得分:0)
主要问题似乎是您的目标依赖项,而不是您的条件。您的AxesSubplot.patches
和yes
目标取决于no
,而不是相反。因此,调用def
只会运行def
和def
(因为init
取决于def
)。您需要制作一个调用init
和yes
的第三个目标或扩展点,以使其按预期工作。
no
请注意,PavelS早些时候发布的其他答案中有一些道理。如果要在目标条件中使用属性引用而不是属性名称,则必须修改条件任务,以便在布尔值为false的情况下将条件属性显式设置为<extension-point name="all" depends="yes,no" />
(否则为{ {1}}任务根本不会设置属性。
false