批量 Maven 构建会破坏 cmd.exe 吗?

批量 Maven 构建会破坏 cmd.exe 吗?

我有一个 Windows .bat 文件,其中包含用于编译我正在处理的项目的脚本。最后一个命令是 maven 构建。由于它需要一段时间才能完成,所以我想在完成时收到通知。

我认为最简单的方法是等效于echo -e '\a'。所以我四处查看了一下,并在脚本末尾添加了echo <BELL>(一个带有代码 0x07 的字节)。我将其添加到所有命令前面进行快速测试,它运行良好。<BELL>echo

删除回声并运行脚本。几分钟后,我注意到它已经完成了。我没有听到铃声,但假设我只是没有注意。用回声重新测试,铃声响得很好。然而这种情况已经发生过好几次了,我现在知道事实是我不仅错过了它,它不在那里。

我尝试编写一个简单的 C 程序,printf("\a")结果相同。然后我尝试了一个echo please work,这个文本也没有显示出来。我发现区别在于 maven 命令是否被回显。总结一下:

  • Windows 10,Windows 版 Maven 作为 .bat 批处理脚本中的最后一个有效命令
  • 如果 mvn 命令前面加上 echo,则一切都会正常进行
  • 如果运行了 mvn 命令,则 .bat 中的后续命令不会运行
  • 脚本完成后,cmd.exe 实例似乎没有任何问题

我有 Cygwin(构建所需),因此如果它对于调试有用,那就没问题。

编辑:因此看起来 Maven 本身就是一个批处理文件。有趣的是,where mvn首先列出 bhahlabh\mnv(一个 bash 脚本),然后列出 blahblah\mvn.com

答案1

在 Windows 版 Maven 中,命令“mvn”指的是批处理脚本文件,名为 mvn.bat 或 mvn.cmd(取决于 Maven 版本)。查看 Maven 文件bin夹。简单来说,.bat 文件就是 .cmd 文件,反之亦然。它们是 cmd.exe 批处理语言脚本。

来自 Maven 网站:

您可以通过调用命令行工具来运行 Maven:命令从 Maven 的 bin 目录中。为了方便执行此操作,${maven.home}\bin 必须在您的 PATH 中,就像 Java SDK 命令一样。您可以在控制面板中将目录添加到您的 PATH;详细信息因 Windows 版本而异。

Windows 上的 Maven

在 cmd.exe 下,如果您从第一个批处理文件运行第二个批处理文件(.bat 或 .cmd),仅使用其名称,命令就会转移到第二个文件,并且永不返回。

如果使用 CALL 命令调用第二个脚本,控制权就会返回。

举个例子来说明我的意思:

这是一个.bat(或者如果你愿意的话,这是一个.cmd)

@echo off
echo I am a.bat
b.bat
echo back again

这是 b.bat(或者如果你愿意的话是 b.cmd)

@echo off
echo I am b.bat

如果你运行 a.bat,并且 b.bat 在同一个文件夹中,或者在你的 PATH 上,你会看到

I am a.bat
I am b.bat

您将看不到back again,除非在 a.bat 中将其更改b.batcall b.bat

尝试在批处理中将 CALL 放在“mvn”之前。

相关内容