2

テストの最後で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メッセージは表示されません。なんで?

4

1 に答える 1

2

使っていることがわかりました

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] ------------------------------------------------------------------------
于 2013-03-18T18:36:26.710 に答える