2008-08-12 56 views
26

我有一個構建腳本,作爲該腳本的一部分,它將一個jar文件複製到一個目錄中,以便於將其稱爲utils jar。 utils jar由位於另一個目錄中的另一個構建腳本構建。我試圖做的就是讓我的構建腳本運行utils構建腳本,以便我可以確保utils jar是最新的。Ant構建腳本,antcall,依賴關係等

所以我知道我需要導入utils構建文件。

<import file="../utils/build/build.xml" /> 

因爲進口任務,與幾乎所有其他螞蟻TAKS,不從BASEDIR運行不工作時,它從PWD運行。所以,要解決這個問題我有這個小玩意,它確實成功地導入構建文件

<property name="baseDirUpOne" location=".." /> 
    <import file="${baseDirUpOne}/utils/build/build.xml" /> 

所以,現在,香港專業教育學院解決了我的進口問題,我需要調用任務,也應該很容易右:

<antcall target="utils.package" /> 

注意,在上面,utils的是../utils/build/build.xml

我現在運行到這個問題的項目名稱是螞蟻調用不執行。 ./utils/build所以我需要什麼,不能找到,是中用runat財產或類似的東西,主要有:

<antcall target="utils.package" runat="../utils/build" /> 

我之所以需要這個是在我的utils的構建文件的步驟選擇哪些代碼複製到罐子基於相對路徑,避免硬編碼路徑在我的螞蟻文件中。有任何想法嗎?

回答

33

我有類似的設置:我有一個主要的Ant build.xml,它調用一個單獨的build.xml,負責構建我的測試。這就是我要做的事:

<target name="build-tests"> 
    <subant target="build"> 
     <fileset dir="${test.home}" includes="build.xml"/> 
    </subant> 
</target> 

的技巧是使用subant而不是antcall。您不必導入其他構建文件。

+0

如果您需要調整subant目標中的類路徑,該怎麼辦? – 2009-09-23 18:10:19

6

嘗試使用"ant" task而不是「antcall」任務,該任務直接運行導入的構建,而不是將其導入到當前構建文件中。它有一個「dir」參數:

用作新的Ant項目的basedir 的目錄。默認爲 當前項目的basedir,除非 inheritall已被設置爲false,在 這種情況下它沒有默認的 值。這將覆蓋被調用項目的basedir 設置。

所以,你可以這樣做:

<ant antfile="${baseDirUpOne}/utils/build/build.xml" dir="../utils/build" /> 

或類似的東西。

+2

使 2010-05-07 03:00:44

0

您可以使用嵌套在antcall塊中的params傳遞給antcall。所以,你可以以這種方式傳遞屬性(可能甚至是基於屬性,因爲屬性是不可變的)。