2012-10-02 63 views
0

我有一个ant任务,它从 myproject.properties中读取环境属性。环境属性值设置为 prod并显示“产品条件为真”。我看到 ${environment}变量被设置为prod,但是如果条件从不为真。有人可以解释为什么 ?ant如果目标失败

myproject.properties:

environment=prod 

的build.xml:

<project name="my-project" default="run" basedir="."> 
    <property file="myproject.properties" /> 
    <target name="run"> 
    <echo message="running target run ${environment}"/> 
    <if> 
     <equals arg1="${environment}" arg2="prod"> 
     <then> 
      <echo message="Prod condition is true"/> 
      <!--do prod environment specific task--> 
     </then> 
    </if>  
    </target> 
</project> 
+0

请按照艾萨克的建议更正此构建脚本。尝试运行您发布的确切脚本,以避免混淆和复制问题。 – Jarekczek

回答

2

除了事实,你equals任务缺少结束标记(它应该是一个自闭的标签,实际上),我敢打赌,你有一个隐藏在某个地方的空白。在你echo,环绕着酒店的撇号什么的打印输出:

<echo message="running target run '${environment}'"/>

,你可能会在值的末尾看到一个空白。这是我能想到的唯一合理的解释。另外,尝试使用-Denvironment=prod运行,看看会发生什么。

0

希望你会这样做,但只是想提醒一下,你是否包含antcontrib jar并在你的project.xml中放置了相关的taskdef?如果不是,请更正构建文件,并将ant contrib jar复制到类路径中

<project name="SampleWS" default="run" basedir="."> 
<taskdef resource="net/sf/antcontrib/antlib.xml" classpath="lib/ant-contrib-0.6.jar" onerror="ignore"/> 
<property file="myproject.properties" /> 
<target name="run"> 
<echo message="running target run ${environment}"/> 
    <if> 
     <equals arg1="${environment}" arg2="prod"/> 
     <then> 
      <echo message="Prod condition is true"/> 
      <!--do prod environment specific task--> 
     </then> 
    </if>  
</target> 
</project> 
1

以下解决方案使用核心ANT。它避免使用ant-contrib扩展提供的“if”任务。

<project name="my-project" default="run" basedir="."> 
    <property file="myproject.properties" /> 

    <condition property="prod.set"> 
     <equals arg1="${environment}" arg2="prod"/> 
    </condition> 

    <target name="run" if="prod.set"> 
     <echo message="Prod condition is true"/> 
    </target> 
</project> 
+0

所有很好的答案......谢谢! – questborn