2011-01-09 19 views

回答

7

螞蟻script任務可以讓你實現腳本語言的任務。如果你安裝了JDK 1.6,Ant可以執行JavaScript而不需要任何附加的依賴庫。例如,這個JavaScript讀取Ant屬性值,然後將另一Ant屬性取決於條件:

<property name="version" value="2"/> 

<target name="init"> 
    <script language="javascript"><![CDATA[ 
    var version = parseInt(project.getProperty('version')); 
    project.setProperty('isGreater', version > 1); 
    ]]></script> 

    <echo message="${isGreater}"/> 
</target> 
4

不幸的是,螞蟻的內置condition task不具有IsGreaterThan元素。但是,您可以使用Ant-Contrib項目中的IsGreaterThan condition。另一種選擇是推出your own task以進行比較。我更喜歡前者,因爲它更容易,更快捷,並且您還可以從Ant-Contrib獲得其他useful tasks

+0

試圖目前使用這一點。 你有沒有用這個設置屬性的例子? 嘗試簡單地將布爾屬性設置爲isgreaterthan任務的結果,或者在if任務中使用 – 2011-12-01 12:31:33

2

如果你不想(或不能)使用Ant-的Contrib庫,你可以定義compare任務使用javascript:

<!-- returns the same results as Java's compareTo() method: --> 
<!-- -1 if arg1 < arg2, 0 if arg1 = arg2, 1 if arg1 > arg2 --> 
<scriptdef language="javascript" name="compare"> 
    <attribute name="arg1" /> 
    <attribute name="arg2" /> 
    <attribute name="result" /> 
    <![CDATA[ 
    var val1 = parseInt(attributes.get("arg1")); 
    var val2 = parseInt(attributes.get("arg2")); 
    var result = (val1 > val2 ? 1 : (val1 < val2 ? -1 : 0)); 
    project.setProperty(attributes.get("result"), result); 
    ]]> 
</scriptdef> 

您可以使用它像這樣:

<property name="myproperty" value="20" /> 
... 
<local name="compareResult" /> 
<compare arg1="${myproperty}" arg2="19" result="compareResult" /> 
<fail message="myproperty (${myproperty}) is greater than 19!"> 
    <condition> 
     <equals arg1="${compareResult}" arg2="1" /> 
    </condition> 
</fail>