2010-09-17 85 views
2

我正在寫一個速度宏,其中我有一些螞蟻任務。內的速度宏#foreach循環,我有一個pathconvert任務:如何重置ANT屬性?

#foreach(<iterate through something>)   
     <pathconvert property='filename' refid='swf.file'> 
      <mapper> 
      <chainedmapper> 
       <flattenmapper/> 
       <globmapper from='*-d.swf' to='*'/> 
      </chainedmapper> 
      </mapper> 
     </pathconvert> 
#end 

我的問題是,「文件名」屬性,都會設置只有一次,第一次迭代時,因爲在Ant屬性是不可變的。 但我需要在每次迭代期間設置文件名。有沒有辦法做到這一點?

如果有方法重置屬性,我可以在每次迭代結束時執行此操作。還是有更好的方法來做到這一點? 任何幫助將不勝感激!

由於提前, 阿南德

回答

3

使用在螞蟻1.8新詞法作用域屬性:

「詞法作用域本地性質,即其僅一個目標內定義的屬性,連續塊或類似的環境。」在螞蟻

Annoucement.

屬性被設計爲immuatable,但他們說出了大衆的需求,給我們的變量。你的選擇是編寫一個自定義的任務(使用Java或動態語言),但這似乎是一個很好的折衷。

0

以下片段說明了我認爲沒有記錄的一個ant屬性。 屬性是不可變的,但引用是可變的。所以任何沒有名字但是引用的數據類型都是可變的。例如fileset。但是今天我找到了一種可變屬性的方法。與local任務或其他一些技巧有關,它可能是一種在螞蟻中有變量的方式。

<property name="a" value="aaa" id="refa" /> 
<property name="b" refid="refa" /> 
<echo>${b}</echo> 
<property name="c" value="ccc" id="refa" /> 
<property name="d" refid="refa" /> 
<echo>${d}</echo> 

的輸出是:

aaa 
ccc 

雖然在這兩種情況下的參考refa被打印。

這裏是a post about it。和another one