错误!非静态Java函数“replace”的第一个参数不是有效的对象引用

时间:2012-05-15 19:01:34

标签: eclipse ant junit

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

7 个答案:

答案 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)

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

  1. 下载apache-ant-1.9.3-bin.zip并解压到您想要的地方。
  2. 打开你的日食并选择Window - &gt;首
  3. 您可以看到“首选项”窗口。在左侧请选择ant - &gt;运行
  4. 现在专注于窗口的右手部位。确保您现在位于 Classpath 标签上并选择 Ant Home Entries(默认)。右侧的按钮是 Ant Home ... 现在可以点击了。
  5. 毫无疑问,点击 Ant Home ... 按钮,然后选择你的ant-1.9.3所在的文件夹。在此步骤中,如果选择了错误的文件夹,Eclipse可能会显示错误消息,例如 指定的Ant home不包含“lib”目录 。如果选择正确的目录, Ant Home Entries(默认)将变为 ** Ant Home Entries()
  6. 不要忘记点击“应用”。
  7. 更改后,右键单击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-1.9.4
  • 的Eclipse&GT;&GT;设定&GT;&GT;蚂蚁&GT;&GT;运行&GT;&GT; AntHomeEntries
  • 删除所有1.8.x类路径条目
  • 添加1.9.4中的所有库

根据Ant Changes,这是fixed since 1.9.1