我希望有些人已经看到并解决了我现在使用ant脚本遇到的问题。我正在使用一个 ant 脚本在 eclipse 中编译我的 java 代码,但 eclipse 一直给我这些错误
[junitreport] Processing E:workspaceDataOrchestrationDevelopmentDataOrchestrationLogsjsreportsjunithtmlTESTS-TestSuites.xml to C:Usersu0160235AppDataLocalTempnull1503375679
[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:workspaceDataOrchestrationDevelopmentDataOrchestrationLogsjsreportsjunithtmlTESTS-TestSuites.xml
BUILD FAILED
E:workspaceDataOrchestrationDevelopmentDataOrchestrationantdeveloperbuild.xml:124: The following error occurred while executing this line:
E:workspaceDataOrchestrationDevelopmentDataOrchestrationantQunitAntScript.xml:20: Errors while applying transformations: Fatal error during transformation
我的环境设置:
- 视窗 7
- Eclipse 3.6 RC2 32 位
- JDK 1.6 更新 32 32 位
- 蚂蚁 1.7.2
- Junit 4(在 eclipse 中(:在我的项目 jar 文件夹中,我有 junit-dep-4.8.2.jar
值得一提的是,如果我使用相同的 ant 脚本在 eclipse 外部编译我的代码,一切正常,但在 eclipse 中不起作用。我试图用谷歌搜索上面样式表上方的错误,但这对我没有多大帮助。我的猜测是,在日食中使用了不同版本的 junit,但我可能是错的。
我在使用以下环境的 Eclipse 中遇到了相同的样式表问题:
- 视窗 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 项目下载
org.apache.xalan
和org.apache.xml.serializer
插件 - 将它们复制到 Java
java.ext.dirs
属性中列出的目录
我使用以下目录,因为它们是默认定义的并且独立于JDK版本:
- 在视窗上:
C:WindowsSunJavalibext
- 在 Mac 上:
/Users/$USER/Library/Java/Extensions
根本问题已报告给 Oracle,但该错误不再存在于他们的错误数据库中。我并不乐观,它永远不会被修复。
更新:Apache修复了Ant中的问题
Apache 已经修复了根本问题;它可能在 Ant 1.9.0 发行版(Apache Bug #54641(中可用。
更新:Ant 1.9.1 计划用于 Eclipse 4.4
正如@OliBlogger提到的,Apache 在 Ant 1.9.1 中修复了根本问题。Eclipse 计划在 Eclipse 4.4 中更新到 Ant 1.9.1(也许更早,Eclipse bug 系统还没有 4.3.x 里程碑(。
更新:在 Eclipse 4.4 中修复
我确认我的构建现在使用Java 7 JDK build 67和Ant 1.9.2与Eclipse 4.4.1(Windows 7(一起分发,而无需使用Orbit插件解决方法。
请尝试去Preferences->Ant->Runtime
并设置蚂蚁之家...那里到您的 Ant 安装文件夹。默认情况下,eclipse 附带并使用 ant 贡献的插件。
如果需要,您还可以添加其他jar,文件夹。
在 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"
我尝试使用几种不同的JRE/JDK设置(所有1.6和1.7(,每个设置都有问题。
这显然不是一个完美的解决方案,但如果 JUnit 报告在构建文件中是"原始"的——而不是包装在目标中,我似乎不会遇到这些问题。
显然,糟糕的解决方法是目标 Ant 的一个重要方面,但有时用于报告构建目标/依赖项并不是那么关键的任务。这对我来说还不是什么大问题,因为我以一次性的方式运行这些报告,而不是作为构建的一部分。
希望它对某人有所帮助,但也希望这得到正确修复。
我也有类似的问题。我的项目有这个组合:
Java: jdk1.6.0_45 Ant: eclipse\plugins\org.apache.ant_1.8.2.v20120109-1030 Java 编译器: 1.6
我将我的java更改为JRE6,它工作得很好
根据这里的文档,Ant 任务<JUnitReport>
需要 Apache Xalan 2.4.1+ 或 Xalan XSLT。 它们可以从外部库xalan.jar获得。 确保具有这些依赖项。