subant failonerror subtleties

前端 未结 2 1286
梦毁少年i
梦毁少年i 2021-01-19 07:57

I have ant code that kicks off a release build in all subdirectories:


    

        
相关标签:
2条回答
  • 2021-01-19 08:19

    Antelope Ant extensions have a try-catch command which can be used to to what you need:

    <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 let's continue the next command after failing. But failed targets set the haderrors property which is checked in the end. I used it a lot for build jobs (and it works fine) but I am not sure it works for <fileset> inside <subant>. Maybe you have to list all <subant> calls explicitly.

    0 讨论(0)
  • 2021-01-19 08:30

    Suggest you look at the extensions available in the ant-contrib tasks.

    The 'for' task can probably be adapted to meet your requirements.

    Your 'all-release' target, with the ant-contrib taskdef might look like this:

    <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>
    

    Using some other ant-contrib features it may be possible to get the list of fails.

    Sample log from above 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 讨论(0)
提交回复
热议问题