2012-10-02 65 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