Ant构建关闭-Ctrl C

Ant构建关闭-Ctrl C,ant,copy-paste,shutdown-hook,Ant,Copy Paste,Shutdown Hook,我有一组用于运行测试套件的ant任务,偶尔其中一个测试会冻结,而我的整个测试套件会挂起。我添加了一个关机处理程序,所以当我点击Ctrl+C时,ant将优雅地关机,并给我一个报告,其中最后的测试标记为NotRun。(这一点很重要,因为这些是集成测试,可以运行数小时)除了在Windows上没有调用我的关闭挂钩之外,这一点非常有效。有没有一种方法可以让ant响应任何类型的输入并优雅地关闭 看来这是一个好消息 问题是,正如您所观察到的,在Windows上Ant Ctrl+C并没有传播到子VM。您可能会考

我有一组用于运行测试套件的ant任务,偶尔其中一个测试会冻结,而我的整个测试套件会挂起。我添加了一个关机处理程序,所以当我点击Ctrl+C时,ant将优雅地关机,并给我一个报告,其中最后的测试标记为NotRun。(这一点很重要,因为这些是集成测试,可以运行数小时)除了在Windows上没有调用我的关闭挂钩之外,这一点非常有效。有没有一种方法可以让ant响应任何类型的输入并优雅地关闭

看来这是一个好消息

问题是,正如您所观察到的,在Windows上Ant Ctrl+C并没有传播到子VM。您可能会考虑的事项:

  • 将测试分解为更小的部分,并使用
    超时
    消除任何挂起的内容。这将把丢失的数据限制在一个挂起的测试中
  • 在测试运行中,添加一个“侦听器”线程,该线程等待关机“信号”(可能存在标志文件),如果检测到挂起,则安排Ant根据控制台的命令设置该信号
这看起来很复杂,但可能值得一试。您需要将Ant
parallel
input
任务组合在一个线程中运行测试,并在第二个线程中等待控制台的输入。当选择中止时,将写入信号文件,这将在测试运行“侦听器”中检测到,导致其终止。任何其他输入都会导致运行完全终止。这样做的问题是,如果测试成功完成,Ant将等待用户输入,但您可以为此设置一个总超时。(我没有给出测试运行代码如何检测信号文件的示例。)

Psuedo蚂蚁:

<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>