eclipse中的ant junit构建错误

Posted

技术标签:

【中文标题】eclipse中的ant junit构建错误【英文标题】:ant junit build error inside eclipse 【发布时间】:2012-05-19 03:34:52 【问题描述】:

我希望有些人已经看到并解决了我现在使用 ant 脚本遇到的问题。我正在使用 ant 脚本在 eclipse 中编译我的 java 代码,但 eclipse 不断给我这些错误

[junitreport] Processing E:\workspace\DataOrchestrationDevelopment\DataOrchestration\Logs\jsreports\junit\html\TESTS-TestSuites.xml to C:\Users\u0160235\AppData\Local\Temp\null1503375679
[junitreport] Loading stylesheet jar:file:/E:/software/apache/apache-ant-1.8.2/lib/ant-junit.jar!/org/apache/tools/ant/taskdefs/optional/junit/xsl/junit-frames.xsl
[junitreport] : Error! The first argument to the non-static Java function 'replace' is not a valid object reference.
[junitreport] : Error! Cannot convert data-type 'void' to 'reference'.
[junitreport] : Fatal Error! Could not compile stylesheet
[junitreport] Failed to process E:\workspace\DataOrchestrationDevelopment\DataOrchestration\Logs\jsreports\junit\html\TESTS-TestSuites.xml

BUILD FAILED
E:\workspace\DataOrchestrationDevelopment\DataOrchestration\ant\developerbuild.xml:124: The following error occurred while executing this line:
E:\workspace\DataOrchestrationDevelopment\DataOrchestration\ant\QunitAntScript.xml:20: Errors while applying transformations: Fatal error during transformation

我的环境设置:

Windows 7 Eclipse 3.6 RC2 32 位 JDK 1.6 更新 32 32 位 蚂蚁 1.7.2 Junit 4(在 Eclipse 中):在我的项目 jar 文件夹中,我有 junit-dep-4.8.2.jar

有一件事要提一下,如果我在 eclipse 之外使用相同的 ant 脚本编译我的代码,一切正常,但它在 eclipse 中不起作用。我试图用谷歌搜索上面样式表上方的错误,但这对我没有多大帮助。我的猜测是,在eclipse中使用了不同版本的junit,但我可能错了。

【问题讨论】:

【参考方案1】:

我在使用以下环境的 Eclipse 中遇到了同样的样式表问题:

Windows 7 x64 Eclipse 3.7.2 (SR2) 32 位 JDK 1.6.0_32 32 位 Ant 1.7.2(来自 Eclipse)或 1.7.4(来自 Apache,当前) Junit 4.8.1(项目依赖)

我在使用 JDK 1.6.0_31 时构建成功,因此样式表问题似乎是 Java 6 build 32 发布时引入的 Ant 或 Java 错误。我在 Apache 的 Bugzilla 系统中找不到任何报告。如果它对某人有帮助,这些是构建 32 中包含的错误修复:http://www.oracle.com/technetwork/java/javase/2col/6u32bugfixes-1579554.html

我目前的解决方法是使用 Java 6 JDK build 31。

更新:使用较新 JDK 的解决方法

Eclipse 中的 Ant 故障始于 Java 6u32 和 Java7u4 中引入的一个缺陷。 Eclipse Bug #384757 中报告了这个传奇,包括一个允许您使用更新的 JDK 的解决方法。

从Eclipse Orbit project下载org.apache.xalanorg.apache.xml.serializer插件 将它们复制到 Java java.ext.dirs 属性中列出的目录中

我使用以下目录,因为它们是默认定义的,并且独立于 JDK 版本:

在 Windows 上:C:\Windows\Sun\Java\lib\ext 在 Mac 上:/Users/$USER/Library/Java/Extensions

根本问题已报告给 Oracle,但 the bug is no longer in their bug database。我并不乐观它会得到修复。

更新:Apache 修复了 Ant 中的问题

Apache 已经修复了根本问题;它可能在 Ant 1.9.0 版本中可用 (Apache Bug #54641)。

更新:Ant 1.9.1 计划用于 Eclipse 4.4

正如@OliBlogger 所提到的,Apache 修复了 Ant 1.9.1 中的根本问题。 Eclipse 计划update to Ant 1.9.1 in Eclipse 4.4(可能更早,Eclipse 错误系统还没有 4.3.x 里程碑)。

更新:已在 Eclipse 4.4 中修复

我确认我的构建现在使用 Java 7 JDK build 67 和 Ant 1.9.2 与 Eclipse 4.4.1 (Windows 7) 一起成功构建,而无需使用 Orbit 插件解决方法。

【讨论】:

@Tyler,对不起,我错过了你的评论。它被显示更多 cmets 链接隐藏。 我还没有找到真正解决问题的方法。我向 Eclipse 报告了这个错误:Bug 384757. 另一种解决方法是在 Eclipse 之外执行 ant 脚本。这对我有用,而无需更改我当前的 jdk。 我在使用 NetBeans 时也遇到了同样的问题。我回到了 JDK 1.6.0_31。 只需阅读您的答案的更新(Apache 修复了 Ant 中的问题。Apache 修复了根本问题;它可能在 Ant 1.9.0 版本中可用(Apache Bug #54641))。这是个好消息。但是,该修复的目标版本是 1.9.1。当前发布版本是 1.8.4。【参考方案2】:

请尝试转到Preferences->Ant->Runtime 并将 Ant Home... 设置为您的 ant 安装文件夹。默认情况下,eclipse 附带并使用作为插件贡献的 ant。

如果需要,您还可以在那里添加其他 jars、文件夹。

【讨论】:

感谢您的快速回复。我将我的 ant home 设置为 ant 安装文件夹,但这并没有帮助我解决这些错误。 我还想知道是否需要为 ant(在我的 Eclipse 中运行)添加任何额外的 jar 文件来解析这些文件?如果我确实需要添加更多的 jar 文件,它们会是什么,我会在哪里添加它们? 首选项中的相同位置。 是的,我这样做了,但仍然无法解决问题。在我最初的帖子中提到的环境设置是我在 eclipse 设置中应用的。 @Tuan -- 使用 JDK 1.6 u31 而不是 32。我遇到了同样的问题,但这解决了它!【参考方案3】:

https://bugs.eclipse.org/bugs/show_bug.cgi?id=384757#c18 中指出,对此的修复已在 Ant 1.9 中,但不幸的是,它现在似乎已针对 1.9.1 进行了修复。所以与此同时,这对我有用。

您可以使用来自http://svn.apache.org/viewvc?view=revision&revision=1453414 的样式表。 然后将 "stledir" 添加到报告标签中。例如:styledir="c:\utils"

【讨论】:

【参考方案4】:

我尝试过使用几种不同的 JRE/JDK 设置(均为 1.6 和 1.7),但每个都有问题。

这显然不是一个完美的解决方案,但如果 JUnit 报告在构建文件中是“原始的”——未包含在目标中,我似乎不会遇到这些问题。

糟糕的解决方法显然是目标是 Ant 的一个重要方面,但有时用于报告构建目标/依赖项并不是那么关键的任务。这对我来说还不是什么大问题,因为我以一种一次性的方式运行这些报告,而不是作为构建的一部分。

希望它对某人有所帮助,但也希望这个问题得到妥善解决。

【讨论】:

【参考方案5】:

我遇到了类似的问题。我的项目有这个组合:

Java:jdk1.6.0_45 Ant:eclipse\plugins\org.apache.ant_1.8.2.v20120109-1030 Java 编译器:1.6

我将我的 java 更改为 JRE6,它工作得非常好

【讨论】:

【参考方案6】:

根据文档here 和here,Ant 任务<JUnitReport> 需要Apache Xalan 2.4.1+ 或Xalan XSLT。它们可以从外部库xalan.jar 获得。确保您有这些依赖项。

【讨论】:

以上是关于eclipse中的ant junit构建错误的主要内容,如果未能解决你的问题,请参考以下文章

Junit ant 任务未将断言错误报告为失败

Eclipse解析build.xml文件报错。

Junit_Ant使用Eclipse自带的Junit和Ant,生成测试报告

如何在eclipse中进行ant?

从 ant 执行的 junit 测试未加载 DLL

Junit安装和使用