Error! The first argument to the non-static Java f

2019-01-14 23:29发布

I am trying to get ANT to create an HTML report of a JUNIT test in Eclipse but after I created the ANT build I get the following errors when I run it:

[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

What do I need to do to fix this?

Here are the sections of my Build.xml I am trying to run:

<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条回答
你好瞎i
2楼-- · 2019-01-14 23:54

If you are using Eclipse/JUnit report with JDK 1.7, please use JDK 1.6. There is a bug in JDK 1.7 with Eclipse/JUnit report similar to what you describe. This may be a similar report: https://netbeans.org/bugzilla/show_bug.cgi?id=201022

查看更多
做个烂人
3楼-- · 2019-01-14 23:58

I used the jdk1.6.45 and latest apache-ant-1.9.2-bin\

Problem solved.

As per note on MikeBach

This is bug#, please read: https://bugs.eclipse.org/bugs/show_bug.cgi?id=384757 Fixed in Ant.

Regards, Bhagyaraj

查看更多
劫难
4楼-- · 2019-01-15 00:00

The Eclipse Bug is clearly documented Bug 384757. The analysis suggests that Oracle introduced the bug. I need Java version 7 but JunitReport needs Java version 5 and early versions of Java version 6. The obvious way is to add the "bootclasspath" argument to the Ant junitreport task while the Java problem is fixed by Oracle in a future release. Unfortunately Ant task junitreport does not support the bootclasspath option. Is this something the people supporting Ant could do?

查看更多
仙女界的扛把子
5楼-- · 2019-01-15 00:01

The Bug was introduced in Java 7u5 according to this comment. Another comment explains how to workaround it, changing the bootclasspath. (DISCLAIMER: I didn't try and test this.)

This solution, however, worked fine for me:

  • Download ant-1.9.4
  • Eclipse>>Preferences>>Ant>>Runtime>>AntHomeEntries
  • Remove all 1.8.x classpath entries
  • Add all libs from 1.9.4 instead

According to Ant Changes, this has been fixed since 1.9.1

查看更多
手持菜刀,她持情操
6楼-- · 2019-01-15 00:05

I've tried using a few different JRE/JDK settings (all 1.6 and 1.7) with various problems (this or lack of access to XSL file in jar) for each.

It's not a perfect solution obviously but I don't seem to run into these issues if the JUnit report is "raw" in the buildfile -- not wrapped in a target.

Poor workaround obviously in that targets are an important aspect of Ant but sometimes for reporting build targets/dependencies aren't so mission critical. It's not so much of an issue for me yet because I'm running these reports in kindof a one-off fashion rather than as part of a build.

查看更多
唯我独甜
7楼-- · 2019-01-15 00:09

When I got this error I had to right click on my build.xml file in Eclipse, choose the "Run as Ant build..." option (3rd one in the menu) then click the JRE tab and select the "Run in the same JRE as the workspace" option and then proceeded to run the script. For some reason this fixed the problem. I honestly don't know why.

查看更多
登录 后发表回答