如果没有设置某个环境变量,如何调用一些Ant目标?

时间:2010-10-20 12:03:52

标签: ant

如果存在某个环境变量,我想不要在build.xml中调用目标。

使用Ant 1.7.0,以下代码不起作用:

<property environment="env"/>
<property name="app.mode" value="${env.APP_MODE}"/>

<target name="someTarget" unless="${app.mode}">    
   ...
</target>

<target name="all" description="Creates app">
   <antcall target="someTarget" />
</target>

目标“someTarget”执行是否存在环境变量APP_MODE

2 个答案:

答案 0 :(得分:14)

unless属性的文档说:

  

为了执行此目标而无法设置的属性的名称,或者评估为false的内容

因此,在您的情况下,您需要设置属性的名称,而不是对属性的评估:

<target name="someTarget" unless="app.mode">    
   ...
</target>

注释

  • 在Ant 1.7.1及更早版本中,这些属性只能是属性名称。
  • 从Ant 1.8.0 开始,您可以使用属性扩展;值为true(或on或yes)将启用该项,而false(或off或no)将禁用该项。 其他值仍假定为属性名称,因此仅在定义了命名属性时才启用该项。

参考

答案 1 :(得分:0)

除非属性以简单的语言表明如果设置了属性,那么任务就不会被执行。对于前。

<target name="clean" unless="clean.not">
 <delete dir="${src}" />
<property name="clean.not" value="true" />
 <delete dir="${dest}" />
</target>

在这里,如果你调用干净的目标,它首先被执行然后它的值被设置。如果你想在脚本中再次调用它,那么它不会因为不能设置属性来执行任务。