Ant构建关闭 – Ctrl C.

我有一组用于运行我的测试套件的ant任务,有时其中一个测试会冻结,我的整个测试套件都会挂起.我添加了一个关闭处理程序,所以当我按下Ctrl C时,ant将正常关闭并给我一个报告,最终测试标记为未运行. (这很重要,因为这些是集成测试,并且可以运行几个小时)除了在没有调用我的关闭挂钩的
Windows上之外,这很有效.有没有办法让ant响应任何类型的输入并正常关闭? 最佳答案 看来这是一个
long-running known issue.

问题是在Windows上,正如您所观察到的,Ant Ctrl C不会传播到子VM.你可能会考虑的事情:

>将测试分解成更小的片段并使用超时来杀死任何挂起的东西.这会将丢失的数据限制为挂起的一个测试.
>在测试运行中,添加一个’监听器’线程,等待关闭’信号'(可能存在标志文件)并安排由Ant设置该信号,如果检测到挂起,则从控制台发出命令.

这似乎很复杂,但可能值得一试.您需要将Ant并行和输入任务组合在一个线程中运行测试,并在第二个线程中等待来自控制台的输入.选择中止时,将写入信号文件,这将在测试运行“监听器”中检测到,从而导致其终止.任何其他输入都将导致运行的干净终止.这样做的问题是,如果测试成功完成,那么您将使用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>
点赞