2013-03-18 46 views
1

我有一个问题,maven卡在测试的最后。为什么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消息没有显示出来。 为什么?

回答

1

我发现,我们使用

Process proc = new ProcessBuilder("cmd", "/C", "start", "/B", "notepad").start(); 

启动外部应用程序。该应用程序绑定到java进程。 java进程不会终止,直到外部应用程序也终止。即使所有这些CMD /启动魔术,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不会检测到这个新的“记事本”进程,并且几乎立即退出。我也遵循了所有正确的方法来刷新输出,并抓住了STD OUT和STD ERR rundll32

后台应用程序记事本能够正常运行,并且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] ------------------------------------------------------------------------