Pergunta

In my PostBuildEvent I call a .bat file for convenience (editing, source control etc):

call "$(ProjectDir)..\SolutionItems\PostBuild.bat" "$(ProjectDir)" $(ConfigurationName)

PostBuild.bat:

echo ProjectDir: %~1 ConfigurationName: %2

rem echo "copy stuff"
rem robocopy "%~1..\SolutionItems\SomeFolder" "%~1\Bin" *.lic /v /PURGE

....

echo "compile js"
"%~1..\SolutionItems\Javascript\BuildJs.bat" "%~1"

BuildJs.bat:

rem compile public js
call "C:\Program Files\Java\jre6\bin\java.exe" -jar "%~1..\SolutionItems\Javascript\compiler.jar" --js "%~1Js\Common.js" --js_output_file  "%~1Js\Public.min.js" --create_source_map "%~1Js\Public.min.js.map" --source_map_format=V3 --compilation_level SIMPLE_OPTIMIZATIONS --summary_detail_level 3 --externs "%~1..\SolutionItems\Javascript\jquery-1.9.js"
rem compile admin js
call "C:\Program Files\Java\jre6\bin\java.exe" -jar "%~1..\SolutionItems\Javascript\compiler.jar" --js "%~1Js\Common.js" --js "%~1Admin\assets\js\admin.js" --js_output_file  "%~1Admin\Assets\Js\Admin.min.js" --create_source_map "%~1Js\Admin.min.js.map" --source_map_format=V3 --compilation_level SIMPLE_OPTIMIZATIONS --summary_detail_level 3 --externs "%~1..\SolutionItems\Javascript\jquery-1.9.js"

If the first call in BuildJs.bat fails it is swallowed by the second call and VisualStudio does not display any error (you can only see it in the ouput window) and the build succeds.

The only workaround I found is to handle %ERRORLEVEL% this way:

rem compile public js
call "C:\Program Files\Java\jre6\bin\java.exe" -jar "%~1..\SolutionItems\Javascript\compiler.jar" --js "%~1Js\Common.js" --js_output_file  "%~1Js\Public.min.js" --create_source_map "%~1Js\Public.min.js.map" --source_map_format=V3 --compilation_level SIMPLE_OPTIMIZATIONS --summary_detail_level 3 --externs "%~1..\SolutionItems\Javascript\jquery-1.8.js"
IF NOT %ERRORLEVEL% == 0 GOTO END
rem compile admin js
call "C:\Program Files\Java\jre6\bin\java.exe" -jar "%~1..\SolutionItems\Javascript\compiler.jar" --js "%~1Js\Common.js" --js "%~1Admin\assets\js\admin.js" --js_output_file  "%~1Admin\Assets\Js\Admin.min.js" --create_source_map "%~1Js\Admin.min.js.map" --source_map_format=V3 --compilation_level SIMPLE_OPTIMIZATIONS --summary_detail_level 3 --externs "%~1..\SolutionItems\Javascript\jquery-1.9.js"
:END

I really don't like this solution because you have to add IF NOT %ERRORLEVEL% == 0 GOTO END for any new rows: Has anybody any other solution?

-----------------UPDATE----------------------

I updated my script following jeb suggestion.

set "param1=%~1"
set "lastError=0"    

echo compile public js
call :javaCaller --js_output_file "%~1Js\Public.min.js" --create_source_map "%~1Js\Public.min.js.map"
echo compile admin js
call :javaCaller --js "%~1Admin\assets\js\admin.js" --js_output_file  "%~1Admin\Assets\Js\Admin.min.js" --create_source_map "%~1Js\Admin.min.js.map"
GOTO EXIT
    
:javaCaller
if %lastError% GTR 0 GOTO EXIT
call "C:\Program Files\Java\jre6\bin\java.exe" -jar "%param1%..\SolutionItems\Javascript\compiler.jar" --js "%param1%Js\Common.js" %*  --source_map_format=V3 --compilation_level SIMPLE_OPTIMIZATIONS --summary_detail_level 3 --externs "%param1%..\SolutionItems\Javascript\jquery-1.9.js"
set "lastError=%errorlevel%"

:EXIT
exit /b %lastError%
Foi útil?

Solução

You could create a wrapper function to do it for you, this could also simplify your other lines.

BuildJs.bat:

set "param1=%~1"
set "lastError=0"

rem compile public js
call :javaCaller --js_output_file  "%~1Js\Public.min.js" --create_source_map "%~1Js\Public.min.js.map"
rem compile admin js
call :javaCaller --js "%~1Admin\assets\js\admin.js" --js_output_file  "%~1Admin\Assets\Js\Admin.min.js" --create_source_map "%~1Js\Admin.min.js.map"
exit /b %lastError%

:javaCaller
if %lastError% GTR 0 exit /b
call "C:\Program Files\Java\jre6\bin\java.exe" -jar "%param1%..\SolutionItems\Javascript\compiler.jar" --js "%param1%Js\Common.js" %*  --source_map_format=V3 --compilation_level SIMPLE_OPTIMIZATIONS --summary_detail_level 3 --externs "%~1..\SolutionItems\Javascript\jquery-1.9.js"
set "lastError=%errorlevel%"
exit /b
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top