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

diz*_*iaq 2 cmd batch-file exit-code maven

环境:Windows 10,,Java 11.0.10Maven 3.8.1

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

mvn clean package
echo After build
Run Code Online (Sandbox Code Playgroud)

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

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

mvn clean package
command X            // depends on the previous command artifact
Run Code Online (Sandbox Code Playgroud)

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

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

Com*_*mpo 11

当您运行时mvn,您实际上正在运行一个名为mvn.cmd. 当您运行另一个批处理文件时,如果您希望在完成后返回到该批处理文件,则需要使用该Call命令。

call mvn clean package
echo After build
Run Code Online (Sandbox Code Playgroud)

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

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

Call "%ProgramFiles%\Maven\apache-maven-3.8.1\bin\mvn.cmd" clean package
Echo After build
Run Code Online (Sandbox Code Playgroud)

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

如果在当前工作目录中找不到该位置,它%PATH%也会按从第一个到最后一个的顺序搜索下值中列出的每个位置。它将运行找到的第一个,并%PATHEXT%像以前一样附加值。