2010-02-10 34 views
0

我需要保留一個控制值(可能在文件內),以決定是否執行任務。Ant +保持控制值

我從這裏來的:Ant: How can I subtract two properties (containing timestamps)?

我想要做的,是檢查如果控制值等於一個週期(MMYY)。如果相等,則不做任何事情,但如果不相同,則應更新控制值。

例如:

<task dosomethingifcontrolvaluediffers> 
control value is 0000 
(calculated) property is: 0110 
Then, control value should now be 0110. 

</task> 

我想保持值在一個單獨的文件中,如果重寫是neccessary,然後截斷文件和更新,但

1)不能找到一種方法要做到這一點

2)不知道如何。

3)腳本?將是我最喜歡的選擇,但不知道如何在JS中。

有什麼想法?

在此先感謝。

回答

1

應該在Ant之外完成。用你認識的任何語言(bash,Python,JavaScript等)編寫腳本來完成計算,檢查並根據需要使用該值作爲參數調用Ant。

Ant並不打算成爲腳本語言。當他們試圖這樣做時,人們會陷入困境。

+0

奔忙。我希望「ant不是腳本語言」不會出現。 事情是,螞蟻是我在這個項目中唯一的「腳本」可能性。 – Tom 2010-02-11 00:30:32

+0

你在使用什麼操作系統?您不能在Windows上使用批處理或命令文件,或者在* nix中使用cshell?你總是有一個選擇。 – duffymo 2010-02-11 01:36:23

0

我還沒有嘗試過,但你可以做到這一點:根據屬性值

使用條件的任務,像這樣

<condition property="exectask"> 
    <equals arg1="${prop1}" arg2="${prop2}" trim="true"/> 
</condition> 

然後再打一個目標

<target name="dosomethingifcontrolvaluediffers" unless="${exectask}"> 
</target> 

希望它有幫助。

+0

我明白你的意思,但繼承人的事情。 prop1可以計算,但我的問題是「我怎麼得到prop2」。另外,我如何在目標內部更新它。 謝謝。 – Tom 2010-02-11 00:26:31

+0

對不起,我不明白:S也許prop2是控制值? – Alonso 2010-02-11 00:34:11

0

正如duffymo所說,Ant不是一種腳本語言。 雖然您可以在Ant中使用JavaScript等腳本語言,但請參閱scriptdef task以瞭解詳細信息。 您可以定義自己的任務是這樣的:

<scriptdef name="nameOfTheTask" language="javascript"> 
    <![CDATA[ 
     (your script goes here) 
    ]]> 
</scriptdef> 

可以使用新的任務是這樣的:

<nameOfTheTask/> 

您也提到,你想存儲在一個文件中的值。這可以通過echo task來完成:

<echo file="yourFile">aProperty=${aProperty}{line.separator}</echo> 

該值寫入文件yourFile。輸出是例如:

aProperty=some value 

您可以再次在腳本與loadproperties task讀值:

<loadproperties srcFile="yourFile" />