【问题标题】:How to prevent Maven from exiting console in Windows?如何防止 Maven 在 Windows 中退出控制台?
【发布时间】:2021-06-03 09:57:37
【问题描述】:

环境: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 命令和其他命令?

【问题讨论】:

    标签: maven batch-file cmd exit-code


    【解决方案1】:

    当您运行mvn 时,实际上您正在运行一个名为mvn.cmd 的批处理文件。当你从另一个运行一个批处理文件时,如果你想在完成后返回它,你需要使用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% 值。

    【讨论】:

      猜你喜欢
      • 2011-06-16
      • 2013-08-04
      • 1970-01-01
      • 2011-05-06
      • 1970-01-01
      • 2021-04-14
      • 1970-01-01
      • 1970-01-01
      • 2012-06-06
      相关资源
      最近更新 更多