批处理脚本意外退出

3
我有以下批处理脚本:
```bat ```
@echo off
set JAVA_HOME=C:\Program Files\Java\jdk1.6.0_32
set JRE_HOME=C:\Program Files\Java\jdk1.6.0_32\jre
set Path=%JAVA_HOME%\bin;%Path%

cd C:\project
mvn validate compile package db-migration:migrate -DskipTests
REM script exits here, the second line never been executed
java  -jar target/compiled_tar.jar

最后一行代码没有被执行。"mvn..." 命令成功执行,生成了 compiled_tar.jar 文件,输出如下:
[INFO] BUILD SUCCESS

如果我在最后一行和上一行之间插入PAUSE命令,那么PAUSE也永远不会发生。为什么?

mvn 可能会退出整个进程。我以前遇到过一些 ant 指令的相同问题,希望也能看到解决方案。 - TheZ
可以使用 mvn ... && true 命令,但我认为 cmd 可能没有 true 命令,需要替换为 echo.(几乎相同,但会打印一个空行)。问题在于你不知道是否出现了错误。mvn 的错误代码是什么? - ctrl-alt-delor
请返回翻译后的文本:请参见https://dev59.com/7HM_5IYBdhLWcg3wcSt_#1385644 - ctrl-alt-delor
可能是重复的问题,与此Windows批处理文件中为什么只执行第一行,而在命令 shell 中执行所有三行?的问题相同 - 甚至是相同的BAT文件,“mvn”。 - Peter Mortensen
2个回答

12

mvn 是一个 .bat 文件,因此(为了与 MS-DOS 1.0 兼容),Windows 将停止执行您的批处理文件。要解决这个问题,请使用 call 命令:

call mvn validate compile package db-migration:migrate -DskipTests

你改变了我的生活。谢谢! - odiszapc
1
现在是2013年,我必须关心32年前MS-DOS 1.0的运行方式。我不知道自己应该感到悲伤还是惊叹。 - Chris Nielsen
@ChrisNielsen 现在是2019年。 - Jerry Chin

0
使用以下Maven命令(设置maven_batch_pause=on)可以完美解决此问题:
@echo off

set JAVA_HOME=C:\Program Files\Java\jdk1.6.0_32
set JRE_HOME=C:\Program Files\Java\jdk1.6.0_32\jre
set Path=%JAVA_HOME%\bin;%Path%

set maven_batch_pause=on
cd C:\project
mvn validate compile package db-migration:migrate -DskipTests

REM The script exits here, and the second line will never be executed
java  -jar target/compiled_tar.jar

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接