如何防止 Maven 在 Windows 中退出控制台?

How to prevent Maven from exiting console in Windows?

环境:Windows 10Java 11.0.10Maven 3.8.1

有一个简单的批处理文件run.bat

mvn clean package
echo After build

从命令行执行 call run.bat 时,我得到了 maven build 的完整输出,但是行 After build 从未打印到控制台。输出的最后一行是 Process finished with exit code N(如果构建成功 N=0,否则 N=1)。

一种可能性是在单独的进程中使用start到运行 maven,但问题是需要顺序执行:

mvn clean package
command X            // depends on the previous command artifact

我不确定如何实现,假设 Maven 在内部调用 exit

有没有办法在同一脚本中按顺序执行 mvn 命令和其他命令?

当您 运行 mvn 时,您实际上正在做的是 运行 一个名为 mvn.cmd 的批处理文件。当您 运行 来自另一个批处理文件时,如果您希望在完成后 return 它,您需要使用 Call 命令。

call mvn clean package
echo After build

主要问题是由于 cli 'man' 页面的默认位置没有告诉最终用户他们正在 运行 什么或如何正确地这样做。他们确定命令行的使用,意味着直接在该界面中输入,因此试图通过最小化您需要执行的输入量来提供帮助。为了实现这一点,他们假设您没有修改您的 %PATHEXT% 变量,并且通常期望您修改您的 %PATH% 变量。

然而,当您使用批处理文件时,您只需要输入一次命令,这意味着减少输入的需求已经不那么重要了。使用扩展名和完整路径 运行 的命令也比允许在执行时搜索这些内容更快。也就是说,这是从 :

执行任务的推荐方法
Call "%ProgramFiles%\Maven\apache-maven-3.8.1\bin\mvn.cmd" clean package
Echo After build

快速解释 %PATHEXT% 的作用;当你 运行 mvn 时,系统会在当前目录中寻找名为 mvn 的文件,如果不存在,它会读取 %PATHEXT% 变量,并且附加在其值中列出的每个扩展名,按顺序从头到尾,直到它找到一个可以 运行 具有该扩展名的文件。它会 运行 只找到它找到的第一个。

如果在当前工作目录中没有找到,它会搜索 %PATH% 下的值中列出的每个位置,同样按顺序从头到尾搜索。它会 运行 它找到的第一个,像以前一样附加 %PATHEXT% 值。