2011-09-12 62 views
22

我有一個使用父Ant文件在子文件覆蓋目標時,如何調用Ant目標

類似這樣的項目:

<project name="some-portlet" basedir="." default="deploy"> 
    <import file="../build-common-portlet.xml" /> 
    <target name="test"> 
    <echo message="do foo"/> 
    RUN TEST FROM PARENT HERE 
    </target> 
    </project> 

現在我想重寫父測試目標是這樣的:

  • 需要做的
  • 從父文件運行測試目標罐的一些複製

第一部分是沒有問題的,但我不明白的方式從我想要的目標也名爲test的父文件

撥打測試,使CI可以簡單地運行測試目標。

有沒有辦法在../build-common-portlet.xml中調用測試?

回答

24

最簡單的方法是使用父項測試的依賴關係。

爲此,請務必將<project>名稱屬性與其文件名保持同步(確定這不是嚴格意義上的必要,但會極大地提高腳本的可讀性和可維護性)。

所以在集結共portlet.xml中:

<project 
    name="build-common-portlet" <-- note the name 
    ... 
> 
    <target name="test"> 
    <echo message="Calling parent test target"/> 
    ... 
    </target> 
</project> 

這樣,你可以這樣做:

<project name="some-portlet" basedir="." default="deploy"> 
    <import file="../build-common-portlet.xml" /> 
    <target name="test" 
    depends="build-common-portlet.test" <-- note parent specification 
    > 
    <echo message="do foo"/> 
    RUN TEST FROM PARENT HERE 
    </target> 
</project> 

>>在回覆評論

如果你想在做父母的測試之前做一些工作,在父母的測試之前創建一個新的目標並且依賴它:

<project name="some-portlet" basedir="." default="deploy"> 
    <import file="../build-common-portlet.xml" /> 

    <target name="copy-jars"> 
    <echo message="copying jars"/> 
    </target> 

    <target name="test" 
    depends=" 
     copy-jars, 
     build-common-portlet.test 
    " 
    /> 
</project> 
+0

這不會讓父測試先運行嗎?在我的情況下,這將失敗,因爲瓶子的複製不會發生。我也不想修改父項,因爲超過此項目包括父文件。 (我有一個解決方案,至少它看起來像,在下面的答案) – nheid

+0

@ nheid。我提供了一個回答您評論的樣本。 –

+0

我喜歡這種方法比明確調用父目標更好!爲我工作! –

6

我找到了一個解決方案,它將運行我的命令,然後從父ant文件中調用測試。 覆蓋父母的測試,然後在父母測試完成自己的「魔術」後再打電話。

所有其他家長的目標也可以調用。

因此,如果有人不知道你的螞蟻文件,她可以按照預期的方式調用ant測試。

<project name="some-portlet" basedir="." default="deploy"> 
     <import file="../build-common-portlet.xml" /> 
<target name="test"> 
     <echo message="do foo"/> 
     <ant antfile="../build-common-portlet.xml" target="test"/> 
</target> 
</project> 
+0

不錯,當我無法控制導入的文件,以及沒有設置時,我正在尋找解決方案。 – alexandroid