Java Ant JUnit任务因ClosedByInterruptException失败

Java Ant JUnit任务因ClosedByInterruptException失败,java,junit,concurrency,ant,junit4,Java,Junit,Concurrency,Ant,Junit4,我的JUnit测试由于一个ClosedByInterruptException而失败,在运行完一个测试后,它无法编写它的测试报告,只是由于以下异常而停止: [junit] Exception in thread "main" Unable to write log file [junit] at org.apache.tools.ant.taskdefs.optional.junit.XMLJUnitResultFormatter.endTestSuite(XMLJUni

我的JUnit测试由于一个ClosedByInterruptException而失败,在运行完一个测试后,它无法编写它的测试报告,只是由于以下异常而停止:

    [junit] Exception in thread "main" Unable to write log file
    [junit]     at org.apache.tools.ant.taskdefs.optional.junit.XMLJUnitResultFormatter.endTestSuite(XMLJUnitResultFormatter.java:197)
    [junit]     at org.apache.tools.ant.taskdefs.optional.junit.JUnitTestRunner.fireEndTestSuite(JUnitTestRunner.java:860)
    [junit]     at org.apache.tools.ant.taskdefs.optional.junit.JUnitTestRunner.run(JUnitTestRunner.java:579)
    [junit]     at org.apache.tools.ant.taskdefs.optional.junit.JUnitTestRunner.launch(JUnitTestRunner.java:1205)
    [junit]     at org.apache.tools.ant.taskdefs.optional.junit.JUnitTestRunner.main(JUnitTestRunner.java:1021)
    [junit] Caused by: java.nio.channels.ClosedByInterruptException
    [junit]     at java.nio.channels.spi.AbstractInterruptibleChannel.end(AbstractInterruptibleChannel.java:202)
    [junit]     at sun.nio.ch.FileChannelImpl.write(FileChannelImpl.java:200)
    [junit]     at java.nio.channels.Channels.writeFullyImpl(Channels.java:78)
    [junit]     at java.nio.channels.Channels.writeFully(Channels.java:101)
    [junit]     at java.nio.channels.Channels.access$000(Channels.java:61)
    [junit]     at java.nio.channels.Channels$1.write(Channels.java:174)
    [junit]     at java.io.BufferedOutputStream.flushBuffer(BufferedOutputStream.java:82)
    [junit]     at java.io.BufferedOutputStream.flush(BufferedOutputStream.java:140)
    [junit]     at org.apache.tools.ant.taskdefs.optional.junit.FormatterElement$DelayedFileOutputStream.flush(FormatterElement.java:394)
    [junit]     at sun.nio.cs.StreamEncoder.implFlush(StreamEncoder.java:297)
    [junit]     at sun.nio.cs.StreamEncoder.flush(StreamEncoder.java:141)
    [junit]     at java.io.OutputStreamWriter.flush(OutputStreamWriter.java:229)
    [junit]     at java.io.BufferedWriter.flush(BufferedWriter.java:254)
    [junit]     at org.apache.tools.ant.util.DOMElementWriter.openElement(DOMElementWriter.java:368)
    [junit]     at org.apache.tools.ant.util.DOMElementWriter.write(DOMElementWriter.java:209)
    [junit]     at org.apache.tools.ant.util.DOMElementWriter.write(DOMElementWriter.java:222)
    [junit]     at org.apache.tools.ant.util.DOMElementWriter.write(DOMElementWriter.java:222)
    [junit]     at org.apache.tools.ant.taskdefs.optional.junit.XMLJUnitResultFormatter.endTestSuite(XMLJUnitResultFormatter.java:195)
    [junit]     ... 4 more
我使用的是ant-junit-1.10.5-jar。方法endTestSuite的代码段是:

        if (out != null) {
            Writer wri = null;
            try {
                wri = new BufferedWriter(new OutputStreamWriter(out, "UTF8"));
                wri.write("<?xml version=\"1.0\" encoding=\"UTF-8\" ?>\n");
                new DOMElementWriter().write(rootElement, wri, 0, "  ");
            } catch (final IOException exc) {
                throw new BuildException("Unable to write log file", exc);
            }
if(out!=null){
Writer wri=null;
试一试{
wri=新的缓冲写入程序(新的OutputStreamWriter(输出,“UTF8”));
写入(“\n”);
new DOMElementWriter().write(rootElement,wri,0,“”);
}捕获(最终IOException exc){
抛出新的BuildException(“无法写入日志文件”,exc);
}
我的JUnit ant目标如下所示:

    <junit dir="${test.path}/${test.dir}" fork="on" forkmode="once" haltonfailure="${junit.halt.on.failure}" outputtoformatters="true" printsummary="on" showoutput="true">

        <sysproperty key="junit.aspectj.dump" file="woven-classes" />
        <!--
        <sysproperty key="junit.cobertura.agent" value="${junit.cobertura.agent}" />
        -->
        <sysproperty key="junit.code.coverage" value="${junit.code.coverage}" />
        <sysproperty key="junit.debug" value="${junit.debug}" />
        <sysproperty key="cluster.link.primary.node" value="true" />
        <sysproperty key="net.sourceforge.cobertura.datafile" file="${test.path}/test-coverage/${test.type}/cobertura.ser" />
        <jvmarg line="${junit.debug.jpda}" />
        <jvmarg line="${junit.profile.agent}" />
        <!--
        <jvmarg line="${junit.cobertura.agent}" />
        -->
        <jvmarg value="-Xmx${junit.java.mx}" />
        <jvmarg value="-Dexternal-properties=${test.properties}" />
        <jvmarg value="-Dfile.encoding=UTF-8" />
        <jvmarg value="-Djava.net.preferIPv4Stack=true" />
        <jvmarg value="-Duser.timezone=GMT" />
        <classpath location="${test.path}/test-coverage" />
        <classpath refid="test.classpath" />
        <formatter type="brief" usefile="false" />
        <formatter type="xml" />
        <batchtest fork="yes" todir="${test.path}/test-results/${test.type}">
            <fileset dir="${test.path}/test-classes/${test.dir}" includes="**/${test.class}.class">
                <exclude name="${test.excludes}" />
                <filename regex="${junit.test.excludes}" negate="true" />
            </fileset>
        </batchtest>
    </junit>

不确定它是否能帮助您,但它仍然应该让您知道为什么会发生异常,然后您可能会找到一条好的路径……只是一次尝试。。。