Maven 2 & 3

mvn.bat looses error code on windows NT type platforms

Details

  • Type: Bug Bug
  • Status: Closed Closed
  • Priority: Major Major
  • Resolution: Fixed
  • Affects Version/s: 2.0.7
  • Fix Version/s: 2.0.9, 3.0-alpha-1
  • Component/s: Command Line
  • Labels:
    None
  • Number of attachments :
    0

Description

There is a bug in the mvn.bat script that prevents that an error code is properly returned to the caller of the script.
The batch script executes the following lines after maven has been invoked if an error occurs:

if ERRORLEVEL 1 goto error

:error
set ERROR_CODE=1

:end
if "%OS%"=="Windows_NT" goto endNT

:endNT
@endlocal

if exist "%HOME%\mavenrc_post.bat" call "%HOME%\mavenrc_post.bat"
if "%MAVEN_BATCH_PAUSE%" == "on" pause
if "%MAVEN_TERMINATE_CMD%" == "on" exit %ERROR_CODE%

exit /B %ERROR_CODE%

The problem is the endlocal statement. Calling endlocal ends the scope in which ERROR_CODE was set to 1. The previous value of ERROR_CODE will be reinstantiated (which is always 0, see line 46).

To fix the problem make the ERROR_CODE value known in the outer ("global") scope by changing the endlocal statement into
@endlocal & set ERROR_CODE=%ERROR_CODE%

Issue Links

Activity

Hide
John Casey added a comment -

applied the fix in the description. Thanks.

Incidentally, I don't have a copy of windows here, so if someone could try this and reopen it if it doesn't work, I'd appreciate it!

Show
John Casey added a comment - applied the fix in the description. Thanks. Incidentally, I don't have a copy of windows here, so if someone could try this and reopen it if it doesn't work, I'd appreciate it!

People

Vote (0)
Watch (0)

Dates

  • Created:
    Updated:
    Resolved: