Похоже, это давно известная проблема .
Проблема в том, что в Windows Ant Ctrl + C , как вы заметили, не распространяется на дочерние виртуальные машины.Вещи, которые вы могли бы рассмотреть:
- Разбейте тест на более мелкие части и используйте
timeout
, чтобы убить все, что зависает.Это ограничит потерянные данные одним зависшим тестом. - В вашем тестовом прогоне добавьте поток «слушателя», который ожидает сигнала «завершения работы» (возможно, наличие файла флага), и организуйтеэтот сигнал должен быть установлен Ant по команде с консоли, если обнаружен зависание.
Это кажется сложным, но, возможно, того стоит.Вам нужно будет объединить задачи Ant parallel
и input
, чтобы запустить тесты в одном потоке, и ожидать ввода от консоли во втором потоке.Когда выбрано прерывание, файл сигнала записывается, это обнаруживается в тестовом прогоне «слушатель», вызывая его прекращение.Любой другой ввод приведет к чистому завершению цикла.Проблема в том, что если тест завершится успешно, Ant останется в ожидании ввода данных пользователем, но вы можете установить общее время ожидания для этого.(Я не привел пример того, как код тестового прогона может обнаружить файл сигнала.)
Psuedo-Ant:
<property name="signal.abort" value="stop.txt" />
<target name="runner">
<delete file="${signal.abort}" />
<parallel timeout="86400000">
<sequential>
<!-- run tests here -->
</sequential>
<sequential>
<input validargs="y,n"
message="Abort the test (y/n)?"
addproperty="abort.test" />
<condition property="do.abort">
<equals arg1="y" arg2="${abort.test}"/>
</condition>
<ant target="terminator" />
</sequential>
</parallel>
</target>
<target name="terminator" if="do.abort">
<echo message="abort" file="${signal.abort}" />
</target>