У меня есть тестовый проект Groovy Maven2 с включенным плагином TestNG и Surefire.
Я хочу запустить внешний процесс (файл *.cmd, который запускает некоторый файл *.exe) в последнем методе тестирования, завершить мои тесты и оставить процесс запущенным после тестов.
Я пробовал следующие коды, чтобы сделать это:
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
Когда я запускаю каждый из этих кодов из Intellij IDEA с помощью функции «Выполнить» (Alt + Shift + F10), коды выполняются успешно, процесс запускается и запускается после завершения теста.
Когда я запускаю каждый из этих кодов как из задачи Intellij IDEA Maven, процесс чистой установки Maven (и даже задачи Maven из Jenkins) успешно запускается, но тест остается запущенным. Мне нужно убить его вручную. Когда я вручную убиваю тестовый процесс (процесс Maven), мой запущенный внешний процесс продолжает работать так, как я ожидаю.
Этот зависший процесс тестирования - моя головная боль на данный момент.
Я просмотрел множество материалов, но не нашел ни первопричины, ни исправления, ни даже обходного пути для этой проблемы. Я вижу, что все мои попытки (пожалуй, кроме AntBuilder()) создают отсоединенные процессы. Я предполагаю, что это может быть связано с настройками JVM. Но я не нашел к какому.
Кроме того, я пытался
"full command to run my cmd".execute()
но мне тоже не помогло.
Не могли бы вы помочь мне решить проблему?
Заранее спасибо!