Java 在无头模式下运行Eclipse时禁用错误消息对话框?

Java 在无头模式下运行Eclipse时禁用错误消息对话框?,java,eclipse,ant,junit,messagebox,Java,Eclipse,Ant,Junit,Messagebox,我试图通过构建过程中的无头Eclipse执行JUnit测试。使用以下命令从Ant脚本调用单元测试: eclipsec.exe-noSplash-application org.eclipse.ant.core.antRunner-data“C:\SomeDirectory”-构建文件“C:\Path\To\tests.xml” 这很好,除非Ant脚本由于任何原因需要失败(或者是因为单元测试失败而通过显式任务失败,或者是因为单元测试向上游抛出异常)。在任何一种情况下,ECLISec都会引发一个对话

我试图通过构建过程中的无头Eclipse执行JUnit测试。使用以下命令从Ant脚本调用单元测试:

eclipsec.exe-noSplash-application org.eclipse.ant.core.antRunner-data“C:\SomeDirectory”-构建文件“C:\Path\To\tests.xml”

这很好,除非Ant脚本由于任何原因需要失败(或者是因为单元测试失败而通过显式任务失败,或者是因为单元测试向上游抛出异常)。在任何一种情况下,
ECLISec
都会引发一个对话框,报告“发生了错误”。这会伴随一个异常。堆栈跟踪的顶部(如果相关)是:

java.lang.reflect.InvocationTargetException
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
    at java.lang.reflect.Method.invoke(Unknown Source)
    at org.eclipse.ant.core.AntRunner.run(AntRunner.java:513)
    at org.eclipse.ant.core.AntRunner.start(AntRunner.java:600)
我真的不在乎Ant脚本或Eclipse失败的原因是什么——这就是日志记录的目的——但随之弹出的对话框是不可接受的,因为它挂起了我们的持续集成系统,而它却在等待看不见的用户来点击它

是否有任何方法可以抑制此对话框?是否有任何方法可以绕过此对话框而不需要实际用户响应

其他信息:

Eclipse版本:Indigo(昨天的最新版本)。Ant和JUnit在它的内部

Java版本:JDK 6.0_30 32位


OS:Windows(7和Server 2003)

如果您使用的是ErrorDialog的子类,则有一个名为AUTOMATED_MODE的静态模式,您可以将其设置为true


结果表明(参见下面的注释)错误来自包装程序exclipsec。查看此处的命令行选项:在命令行上指定--launcher.suppressErrors将避免此对话框(请注意双破折号)。

这看起来很有希望,但我不知道如何应用它,或者在这种情况下它将不起作用。我曾尝试在JUnit测试中设置此选项,但新设置可能会失败,但这并不能防止出现eclipse错误对话框。错误抑制需要在Ant层或eclipse层进行,但我不知道是哪一个,也不知道如何进行。发生错误时,获取堆栈转储(linux上的kill-3),以便您可以准确地看到正在发生的对话框。它可能不是ErrorDialog的子类(可能不是)。在这种情况下,您需要查看堆栈跟踪中发生的情况,并添加您自己的代码以防止对话框显示。Linux(可能还有Mac)上的另一种选择是使用虚拟帧缓冲区并将显示重定向到该缓冲区(xvfb)。我不知道Windows有没有类似的软件。你能提供一个对话框的屏幕截图吗?也许做一个堆栈转储的粘贴库,我可以看一看吗?您可能想看看ECLISec上是否有一个命令行选项,可以防止它弹出对话框(可能在某种无头模式下运行)。看看这里:这对我来说显然也是CodeWarrior。