I have ant code that kicks off a release build in all subdirectories:
<target name="all-release" >
<subant target="sub-release" failonerror="true">
<fileset dir="." includes="*/build.xml" />
</subant>
</target>
As written, if any individual build fails, all-release will fail fast (none of the later builds will succeed. If I switch failonerror="false", the all-release will succeed all the time. It turns out that all the sub-builds are independent, so what I really want is:
run all sub-release builds, and then have all-release fail afterwards if one or more sub-releases failed (ideally with a nice error message about which builds failed).
Any ideas?
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:
Using some other ant-contrib features it may be possible to get the list of fails.
Sample log from above build.xml:
Antelope Ant extensions have a
try-catch
command which can be used to to what you need:break=false
let's continue the next command after failing. But failed targets set thehaderrors
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.