我遇到一个问题,即maven在测试结束时卡住了。
Tests run: 2, Failures: 0, Errors: 0, Skipped: 0, Time elapsed: 4.235 sec
Results :
Tests run: 2, Failures: 0, Errors: 0, Skipped: 0
但是BUILD SUCCESSFUL
消息没有显示出来。
为什么呢?
答案 0 :(得分:1)
我发现我们正在使用
Process proc = new ProcessBuilder("cmd", "/C", "start", "/B", "notepad").start();
启动外部应用程序。该应用程序与java进程相关联。在外部应用程序终止之前,java进程不会终止。即使使用所有这些cmd / start魔法,Windows和Java也不会分离进程。在阅读了大量的博客和网站之后,他们都提出了同样的建议。刷新输出缓冲区,并读入所有STD ERR和STD OUT流。不过,这不起作用。 Java仍然说,“还有一个应用正在运行!”
答案是确保java不知道应用程序正在运行。我这样做了,使用
Process proc = new ProcessBuilder("rundll32", "SHELL32.DLL,ShellExec_RunDLL", "notepad").start();
在这个方法中,java调用rundll32并使用SHELL32 DLL函数ShellExec_RunDLL来启动应用程序。 Java没有检测到这个新的“记事本”进程,并且 RunDLL32 几乎立即退出。我还遵循了所有正确的方法来刷新输出并获取 rundll32 的STD OUT和STD ERR。
背景应用程序,记事本,能够正常运行,并且maven按预期完成。
Tests run: 2, Failures: 0, Errors: 0, Skipped: 0, Time elapsed: 3.935 sec
Results :
Tests run: 2, Failures: 0, Errors: 0, Skipped: 0
[INFO] ------------------------------------------------------------------------
[INFO] BUILD SUCCESSFUL
[INFO] ------------------------------------------------------------------------
[INFO] Total time: 7 seconds
[INFO] Finished at: Mon Mar 18 11:28:54 PDT 2013
[INFO] Final Memory: 27M/72M
[INFO] ------------------------------------------------------------------------