我试图让ANT在Eclipse中创建一个JUNIT测试的HTML报告,但在我创建ANT版本后,运行时出现以下错误:
[junitreport] Processing C:\Documents and Settings\Administrator\workspace\Home\junit\TESTS-TestSuites.xml to C:\DOCUME~1\ADMINI~1\LOCALS~1\Temp\null785926900
[junitreport] Loading stylesheet jar:file:/C:/ANT/apache-ant-1.8.3/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 C:\Documents and Settings\Administrator\workspace\Home\junit\TESTS-TestSuites.xml
我需要做些什么来解决这个问题?
以下是我正在尝试运行的Build.xml的部分:
<target name="Home">
<mkdir dir="${junit.output.dir}"/>
<junit fork="yes" printsummary="withOutAndErr">
<formatter type="xml"/>
<test name="Home" todir="${junit.output.dir}"/>
<classpath refid="Home.classpath"/>
</junit>
</target>
<target name="junitreport">
<junitreport todir="${junit.output.dir}">
<fileset dir="${junit.output.dir}">
<include name="TEST-*.xml"/>
</fileset>
<report format="frames" todir="${junit.output.dir}"/>
</junitreport>
</target>
答案 0 :(得分:16)
当我收到此错误时,我必须右键单击Eclipse中的build.xml文件,选择“Run as Ant build ...”选项(菜单中的第3个)然后单击JRE选项卡并选择“在与工作区“选项相同的JRE中运行,然后继续运行脚本。出于某种原因,这解决了这个问题。老实说,我不知道为什么。
答案 1 :(得分:9)
Eclipse Bug已明确记录Bug 384757。分析表明Oracle引入了这个bug。我需要Java版本7但JunitReport需要Java版本5和早期版本的Java版本6.显而易见的方法是在未来版本中由Oracle修复Java问题时将“bootclasspath”参数添加到Ant junitreport任务。不幸的是,Ant task junitreport不支持bootclasspath选项。这是支持Ant的人可以做的吗?
答案 2 :(得分:4)
我在 Eclipse SDK Juno 上使用* java 1.7.0_51 *在 Ubuntu 12.04 上运行我的java程序时遇到了这种情况。我采用Bhagyaraj的建议,而不是使用apache-ant-1.9.2。 (p.s.Eclipse Juno的默认ant版本是* org.apache.ant_1.8.3 *,我使用的是apache-ant-1.9.3)
您可以按照我的步骤进行设置。
更改后,右键单击build.xml文件并选择Run - &gt; 1 Ant Build,错误信息将不会显示,因为你的蚂蚁现在是1.9.3。
我也下载了apache-ant-1.8.4来运行我的构建文件,但错误无法解决。
答案 3 :(得分:3)
我使用了jdk1.6.45和最新的apache-ant-1.9.2-bin \
问题解决了。
根据MikeBach的说明
这是bug#, 请阅读: https://bugs.eclipse.org/bugs/show_bug.cgi?id=384757 修正了Ant。
此致 Bhagyaraj
答案 4 :(得分:1)
如果您正在使用JDK 1.7的Eclipse / JUnit报告,请使用JDK 1.6。 JDK 1.7中存在一个与Eclipse / JUnit报告类似的错误。这可能是类似的报告:https://netbeans.org/bugzilla/show_bug.cgi?id=201022
答案 5 :(得分:1)
我尝试过使用一些不同的JRE / JDK设置(全部为1.6和1.7),每个设置都存在各种问题(或者在jar中无法访问XSL文件)。
这显然不是一个完美的解决方案但是如果JUnit报告在构建文件中是“原始的”而不是包含在目标中,我似乎不会遇到这些问题。
显然,不良的解决方法是目标是Ant的一个重要方面,但有时报告构建目标/依赖关系并不是关键任务。对我而言,这不是一个问题,因为我正在以一次性的方式运行这些报告,而不是作为构建的一部分。
答案 6 :(得分:1)
Bug 是在Java 7u5 according to this comment中引入的。 另一个comment解释了如何解决它,更改 bootclasspath 。 (免责声明:我没有尝试对此进行测试。)
然而,这个解决方案对我很有用:
根据Ant Changes,这是fixed since 1.9.1