11

我试图让 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>
4

7 回答 7

16

当我收到此错误时,我必须在 Eclipse 中右键单击我的 build.xml 文件,选择“Run as Ant build...”选项(菜单中的第 3 个),然后单击 JRE 选项卡并选择“Run in the与工作区相同的 JRE”选项,然后继续运行脚本。由于某种原因,这解决了问题。老实说,我不知道为什么。

于 2013-05-10T20:43:57.890 回答
9

Eclipse Bug 被清楚地记录在Bug 384757中。分析表明,Oracle 引入了该错误。我需要 Java 版本 7,但 JunitReport 需要 Java 版本 5 和 Java 版本 6 的早期版本。显而易见的方法是将“bootclasspath”参数添加到 Ant junitreport 任务中,而 Java 问题由 Oracle 在未来的版本中修复。不幸的是 Ant 任务 junitreport 不支持 bootclasspath 选项。这是支持蚂蚁的人可以做到的吗?

于 2012-09-05T16:20:07.373 回答
4

我在Eclipse SDK Juno上使用 *java 1.7.0_51*在Ubuntu 12.04上运行我的 java 程序时遇到了这种情况。我接受 Bhagyaraj 的建议,即使用 apache-ant-1.9.2 代替。(ps Eclipse Juno默认的ant版本是*org.apache.ant_1.8.3*,我用的是apache-ant-1.9.3)

您可以按照我的步骤进行设置。

  1. 下载 apache-ant-1.9.3-bin.zip 并解压到你想要的地方。
  2. 打开你的 Eclipse 并选择 Window --> Preferences
  3. 您可以看到“首选项”窗口。在左侧请选择 ant --> runtime
  4. 现在关注窗口的右侧位置。确保您现在位于Classpath选项卡上并选择Ant Home Entries(Default)。右侧的按钮是Ant Home...现在可以点击了。
  5. 毫无疑问,点击Ant Home...按钮并选择您的 ant-1.9.3 所在的文件夹。在这一步中,如果您选择了错误的文件夹,Eclipse 可能会显示错误消息,例如Specified Ant home does not contain a "lib" directory。如果选择正确的目录,Ant Home Entries(Default)将变为**Ant Home Entries()
  6. 不要忘记点击申请。

更改这些后,当您右键单击 build.xml 文件并选择 Run --> 1 Ant Build 时,将不会显示错误消息,因为您的 ant 现在是 1.9.3。

我还下载了 apache-ant-1.8.4 来运行我的构建文件,但错误无法解决。

于 2014-03-28T13:28:15.097 回答
3

我使用了 jdk1.6.45 和最新的 apache-ant-1.9.2-bin\

问题解决了。

根据 MikeBach 的注释

这是 bug#,请阅读: https ://bugs.eclipse.org/bugs/show_bug.cgi?id= 384757 在 Ant 中已修复。

问候, Bhagyaraj

于 2013-10-25T07:02:05.297 回答
1

我尝试使用一些不同的 JRE/JDK 设置(全部为 1.6 和 1.7),但每个设置都有各种问题(这个或无法访问 jar 中的 XSL 文件)。

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

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

于 2013-09-25T14:50:14.703 回答
1

根据此评论,错误是在 Java 7u5 中引入的。另一条评论解释了如何解决它,改变bootclasspath。(免责声明:我没有尝试测试这个。)

但是,此解决方案对我来说效果很好:

  • 下载ant-1.9.4
  • Eclipse>>首选项>>Ant>>运行时>>AntHomeEntries
  • 删除所有 1.8.x 类路径条目
  • 改为添加 1.9.4 中的所有库

根据 Ant Changes ,自 1.9.1 以来已修复此问题

于 2014-07-02T13:08:54.217 回答
1

如果您在 JDK 1.7 中使用 Eclipse/JUnit 报告,请使用 JDK 1.6。JDK 1.7 中存在与您描述的类似的 Eclipse/JUnit 报告的错误。这可能是一个类似的报告:https ://netbeans.org/bugzilla/show_bug.cgi?id=201022

于 2012-06-08T08:35:02.650 回答