Hi, I'd like to propose a patch to ant.bat so that ant.bat returnes an exit code if an error ocurred during the build. This is very useful for example when calling a ant build using the <exec failonerror="true"> task from another ant build file. Otherwise, the calling build file does not exit. See the mails below for an explanation.
I have come up with 2 possibilities to do this :
1) Solution 1 :
The idea is to check for a ERRORLEVEL after the java ant command line and
use the shell exit command. However, when used on a top level shell, the
exit will close the DOS windows, so I introduced an environment variable
ANT_EXITONFAILURE to control the exit or not.
A simple example on how to use it :
<exec dir="..." executable="ant.bat" failonerror="true">
<env key="ANT_EXITONFAILURE" value="true"/>
[...]
</exec>
The patch to ant.bat :
80a81
> set _ERRORLEVEL=%ERRORLEVEL%
84a86
> set _ERRORLEVEL=%ERRORLEVEL%
90a93,101
> if "%ANT_EXITONFAILURE%" == "" goto almostEnd
> if "%_ERRORLEVEL%" == "0" goto almostEnd
> if not "%OS%"=="Windows_NT" goto mainEnd1
> @endlocal
> :mainEnd1
> if exist "%HOME%\antrc_post.bat" call "%HOME%\antrc_post.bat"
> exit %_ERRORLEVEL%
>
> :almostEnd
97d107
<
2) Solution 2 (which I personally prefer) :
It is a variant of solution 1. Create another batch file at the same
location as ant.bat. Let's call it antExit.bat. This batch file simply calls
ant.bat and does an "exit %ERRORLEVEL% if the errorlevel is not 0. See
attached file. Using it is very simple :
<exec dir="..." executable="antExit.bat" failonerror="true">
[...]
</exec>
Tell me what you think, if you have even simpler solution and if this can be
included as part of the Ant distribution.
Thanks
Vincent Massol
----- Original Message -----
From: "Thomas Christen" <[EMAIL PROTECTED]>
To: <[EMAIL PROTECTED]>
Sent: Saturday, March 24, 2001 6:38 PM
Subject: AW: <exec> problem with exit value
> I've got a similar problem. Fact is, WindowsNT returns exit codes only
from
> within an executable. Batch and commands are not real executables. My
> workaround was to modify the excute (I wraped it in an additional Task) in
> the way, that the log methode scans the message and looks for a String
EXIT
> nn (nn would be the exitcode). You then must ensure, that at the end of
the
> command an "@ECHO EXIT %ERRORLEVEL%" (%ERRORLEVEL% represents your
internal
> stored errorcode), is inserted. If an EXIT nn has been detected by exec,
it
> sets an internal variable with the value (nn) and if the task has done its
> work, checks again the exitcode scanned before ... Easy to implement but
> somone might have a better solution.
>
> Thomas
>
> > -----Urspr�ngliche Nachricht-----
> > Von: Vincent Massol [mailto:[EMAIL PROTECTED]
> > Gesendet am: Freitag, 23. M�rz 2001 10:21
> > An: [EMAIL PROTECTED]
> > Betreff: <exec> problem with exit value
> >
> > Hi,
> >
> > I am trying to use the exec task to call another ant build file in some
> > other directory (I don't want ot use the <ant> task to do that because I
> > don't want to inherit any of the properties from the calling build.xml).
> > However, when the called ant build file fails, the calling build file
does
> > not generate a "build failed" and does not stop.
> >
> > My settings :
> >
> > 1/ I have used the failonerror attribute in the exec task :
> >
> > <exec dir="${out.sample.build.dir}" executable="ant.bat"
> > failonerror="true">
> > <arg line="tests_all"/>
> > </exec>
> >
> > 2/ When I manually run the called ant build file it fails and if I type
> > "echo %ERRORLEVEL%" at the DOS prompt (I am on Windows 2000), it
correctly
> > says "1"
> >
> > 3/ For confirmation, I modified the Ant Main.java class to output the
exit
> > value in the main() method and it effectively does a "System.Exit(1)"
> >
> > 4/ I modified Execute.waitFor() method as follows :
> >
> > protected void waitFor(Process process) {
> > try {
> > process.waitFor();
> > System.out.println("Process return value = " +
> > process.exitValue());
> > setExitValue(process.exitValue());
> > } catch (InterruptedException e) {}
> > }
> >
> > and it prints "Process return value = 0" !
> >
> > I am stuck ...
> > Can you help me to debug this problem ?
> >
> > Thank you.
> > Vincent.
> >
>
>
>
<<attachment: antExit.bat>>
