TestNG と Surefire プラグインを有効にした Groovy Maven2 テスト プロジェクトがあります。
最後のテスト メソッドで外部プロセス (いくつかの *.exe ファイルを開始する *.cmd ファイル) を起動し、テストを終了して、テスト後にプロセスを実行したままにします。
私はそれを行うために次のコードを試しました:
1 回試行
def builder = new ProcessBuilder('cmd','/c <name>.cmd')
builder.directory( ( new File( <path_to_working_directory> ) ) )
builder.start()
2 回の試行(start cmd オプションの有無にかかわらず)
Runtime.getRuntime().exec( "cmd /c start <name>.cmd", null , ( new File( <path_to_working_directory> ) ) )
3回の試行
( new AntBuilder() ).exec(
dir: "<path_to_working_directory>",
executable: "<name>.cmd"
)
.cmd は次のとおりです。
set path=<path_to_execFile>;%path%
start <execFileName>.exe
「実行」機能 (Alt+Shift+F10) を介して Intellij IDEA からこれらの各コードを起動すると、コードが正常に実行され、プロセスが開始され、テストが終了した後に実行されます。
Intellij IDEA Maven タスクからこれらの各コードを起動すると、Maven のクリーン インストール (および Jenkins からの Maven タスク) プロセスが正常に開始されましたが、テストは実行されたままです。手動で殺す必要があります。テスト プロセス (Maven プロセス) を手動で強制終了すると、起動した外部プロセスは期待どおりに動作し続けます。
このハングしたテスト プロセスは、今のところ私の頭痛の種です。
多くの資料を調べましたが、この問題の根本原因、修正、回避策さえ見つかりませんでした。私のすべての試行 (おそらく、AntBuilder() を除く) によって、切り離されたプロセスが作成されることがわかります。これはJVMの設定で接続できると思います。しかし、私はどれに見つけることができませんでした。
また、試してみました
"full command to run my cmd".execute()
しかし、それも私を助けませんでした。
問題の解決を手伝っていただけませんか?
前もって感謝します!