2009-01-30 27 views
4

我有螞蟻的代碼揭開序幕發佈版本中所有子目錄:subant failonerror微妙之處

<target name="all-release" > 
    <subant target="sub-release" failonerror="true"> 
     <fileset dir="." includes="*/build.xml" /> 
    </subant> 
</target> 

書面,如果有個別構建失敗,所有的釋放將快速失敗(沒有後來的構建將取得成功如果我切換failonerror =「false」,all-release將會一直成功,結果是所有子版本都是獨立的,所以我真正想要的是:

運行所有的子版本構建,然後如果一個或多個子版本發佈失敗(理想情況下關於哪些版本失敗的錯誤消息),則全部發布失敗。

任何想法?

+0

如果子版本目標成功,則其運行已完成。 Ant之後無法成功構建失敗的構建。 – 2009-10-20 19:55:29

回答

3

建議您查看ant-contrib任務中的可用擴展。

'for'任務可能可以調整以滿足您的要求。

「全部釋放」的目標,與螞蟻的contrib的taskdef可能是這樣的:

<taskdef resource="net/sf/antcontrib/antlib.xml"> 
    <classpath> 
     <pathelement location="lib/ant-contrib-1.0b3.jar"/> 
    </classpath> 
</taskdef> 

<target name="all-release"> 
    <for keepgoing="true" param="file"> 
     <path> 
      <fileset dir="." includes="*/build.xml" /> 
     </path> 
     <sequential> 
      <ant antfile="@{file}" target="sub-release" /> 
     </sequential> 
    </for> 
</target> 

使用一些其他螞蟻的contrib功能有可能得到失敗的列表。

樣品數從上面的build.xml:

$ ant all-release 
Buildfile: build.xml 

all-release: 
    [echo] /work/Scratch/dir1/build.xml 

sub-release: 
    [echo] dir1 
    [echo] /work/Scratch/dir2/build.xml 

sub-release: 
    [echo] dir2 
     [for] /work/Scratch/dir2/build.xml: The following error occurred while executing this line: 
     [for] /work/Scratch/build.xml:17: The following error occurred while executing this line: 
     [for] /work/Scratch/dir2/build.xml:6: dir2 failed 
    [echo] /work/Scratch/dir3/build.xml 

sub-release: 
    [echo] dir3 

BUILD FAILED 
/work/Scratch/build.xml:11: Keepgoing execution: 1 of 3 iterations failed. 

Total time: 0 seconds 
+0

我最近做了這樣的事情,並使用subant而不是螞蟻呼叫,有什麼區別? – 2012-08-17 16:15:29

1

Antelope螞蟻擴展有try-catch命令,它可以用來給你所需要的:

<taskdef name="try" classname="ise.antelope.tasks.TryTask"/> 
.... 
<try break="false" printmessage="true" > 
    <antcall target="xmlValidate" /> 
    <antcall target="runJunit" /> 
    <antcall target="..." /> 
    <catch> 
     <property name="haderrors" value="true"/> 
    </catch> 
</try> 
<fail message="FAILED" if="haderrors" /> 

break=false讓我們繼續之後的下一個命令失敗。但失敗的目標設置最後檢查的haderrors屬性。我用它建立工作很多(並且工作正常),但我不確定它是否適用於<subant>內部的<fileset>。也許你必須明確列出所有<subant>調用。