2010-02-03 69 views
7

我有一個主要的構建腳本,調用各種目標。其中一個目標需要存儲一個值,另一個目標需要顯示它。顯然這不起作用,所以我認爲這可能與範圍有關。我試過了var,property,並且聲明瞭target1之外的屬性。由於var似乎是可變的,它看起來像我需要使用它,而不是每次我的輸出是空的。螞蟻var和屬性範圍

主要腳本

<antcall target="target1"/> 
<antcall target="display"/> 

在目標1:

<var name="myVar" value="${anotherVar}"/> 

在顯示:

<echo>${myVar}</echo> 

回答

4

antcall會啓動Ant目標的一個新項目,並不會影響主體工程以任何方式。嘗試使用antcontrib中的runtarget在同一個項目中運行目標。

+0

+1:謝謝你的提示。通過'runtarget',我能夠輕鬆地清理構建文件。 – tangens 2010-04-28 16:58:03

2

您可以使用一個antcall元素調用多個目標。然後這些目標將共享包含所定義屬性的單個項目實例。要做到這一點指定目標,因爲這樣的嵌套元素:

<antcall> 
    <target name="target1"/> 
    <target name="display"/> 
</antcall> 
+0

有趣的想法。我在這兩者之間還有其他目標電話。我可以將它們全部添加到那裏,但是如果我將它們全部更改爲runtarget,則會遇到同樣的範圍/安全問題。但無論如何它是一個折衷。 – bobtheowl2 2010-02-03 15:19:03

+0

這僅在Ant 1.6.3以後才支持,否則您會看到:「任務不支持嵌套的」target「元素。」 – 2010-04-28 12:02:41

+0

這不會共享兩個目標之間的屬性。 – pstanton 2015-10-30 03:56:40

2

我發現另一種選擇是antcallback,它似乎工作。這限制了只返回一個特定的值列表,這比開放整個目標的範圍(因爲它設置,創建,修改許多var和屬性)本質上更安全。

<antcallback target="target1" return="myVar"/> 
<antcall target="display"/> 

我認爲所有這些都是有效的解決方案,它只取決於您想要改變變量範圍的級別。

4

您確實需要使用<antcall>?你可以使用目標依賴嗎?

正如您懷疑的那樣,使用<antcall>本質上會創建一個新的範圍。

+0

我們現在有一個依賴關係混亂,並試圖組件化我們的共享目標,以刪除任何內部依賴關係,並在那裏進行一些清理。 – bobtheowl2 2010-02-03 18:47:42

+0

由於嵌套標籤,因此經常使用。 – 2010-04-28 11:16:10

0
<antcall target="display"> 
    <param name="param1" value="anything" /> 
</antcall> 

將上面的代碼放到您的target1中。我相信你現在可以訪問你的參數1。