2012-05-15 17 views
11

Estoy intentando que ANT cree un informe HTML de una prueba JUNIT en Eclipse, pero después de crear la construcción ANT recibo los siguientes errores cuando lo ejecuto:¡Error! El primer argumento para la función Java no estática 'reemplazar' no es una referencia de objeto válida

[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 

¿Qué debo hacer para solucionarlo?

Estas son las secciones de mi build.xml Estoy intentando ejecutar:

<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> 
+2

En segundo lugar, ¿cómo deberíamos saber lo que está mal si no pones el código no? –

+4

Después de señalar la compilación ANT al JDK en lugar de JRE, pude obtener el informe HTML. – user1397000

+0

¿Cómo apuntaste la construcción ANT al JDK en lugar de JRE? –

Respuesta

9

El error Eclipse está claramente documentado Bug 384757. El análisis sugiere que Oracle introdujo el error. Necesito Java versión 7, pero JunitReport necesita Java versión 5 y versiones anteriores de Java versión 6. La manera obvia es agregar el argumento "bootclasspath" a la tarea Ant junitreport mientras Oracle soluciona el problema Java en una versión futura. Lamentablemente, la tarea Ant junitreport no admite la opción bootclasspath. ¿Es esto algo que la gente que apoya a Ant podría hacer?

16

Cuando recibí este error, tuve que hacer clic derecho en mi archivo build.xml en Eclipse, elegir la opción "Ejecutar como Ant build ..." (tercero en el menú), luego hacer clic en la pestaña JRE y seleccionar "Ejecutar en el mismo JRE que el espacio de trabajo" opción y luego procedió a ejecutar el script. Por alguna razón, esto solucionó el problema. Honestamente, no sé por qué.

+0

Funcionó para mí también. Gracias :-) – Mohit

1

He intentado utilizar algunos ajustes JRE/JDK diferentes (todos 1.6 y 1.7) con varios problemas (esto o falta de acceso al archivo XSL en el jar) para cada uno.

No es una solución perfecta, obviamente, pero parece que no me encuentro con estos problemas si el informe JUnit está "en bruto" en el archivo de construcción, no envuelto en un objetivo.

Mala solución, obviamente, en el sentido de que los objetivos son un aspecto importante de Ant, pero a veces para informar objetivos de compilación/dependencias no son tan críticos. Todavía no es un problema para mí porque estoy ejecutando estos informes de una manera única y no como parte de una compilación.

3

he utilizado la última jdk1.6.45 y apache-ant-1.9.2-bin \

Problema resuelto.

Según nota en MikeBach

Este es el bug #, Por favor lea: https://bugs.eclipse.org/bugs/show_bug.cgi?id=384757 fijados en hormiga.

Saludos, Bhagyaraj

+0

También intente: Ejecutar en el símbolo del sistema donde su archivo build.xml presente para una recuperación más rápida. (ANT: JAVA: 1.70_45. Y ant-1.9.2) es realmente sencillo, generó el informe. – Bhagyaraj

4

me encontré con esta situación durante la ejecución de mi programa Java en Ubuntu 12.04 con * Java 1.7.0_51 * en Juno Eclipse SDK. Tomo la sugerencia de Bhagyaraj que está usando apache-ant-1.9.2 en su lugar. (p.s. La versión ant predeterminada de Eclipse Juno es * org.apache.ant_1.8.3 *, y uso apache-ant-1.9.3)

Es posible que siga mis pasos para la configuración.

  1. Descargue apache-ant-1.9.3-bin.zip y extráigalo a un lugar donde desee.
  2. Abra su eclipse y elija Ventana -> Preferencias
  3. Puede ver la ventana de Preferencias. En el lado izquierdo, elija hormiga -> runtime
  4. Ahora concéntrese en el lado derecho de la ventana. Asegúrese de que está ahora en ficha Classpath y elija Ant Home Entries (Predeterminado). Los botones a la derecha que son Ant Home ... ahora pueden hacer clic.
  5. Sin duda, haga clic en Ant Home ... y elija la carpeta donde se encuentra su ant-1.9.3. En este paso, si elige una carpeta incorrecta, Eclipse puede mostrar el mensaje de error como Ant especificada no contiene un directorio "lib". Si elige el directorio correcto, Ant Home Entries (Predeterminado) se convertirá en ** Ant Home Entries()
  6. No olvide hacer clic en aplicar.

Después de cambiarlos, mientras hace clic derecho en el archivo build.xml y selecciona Ejecutar -> 1 Ant Build, el mensaje de error no se mostrará porque su hormiga ahora es 1.9.3.

También descargo apache-ant-1.8.4 para ejecutar mi archivo de compilación, pero el error no puede ser resuelto.

+0

+1 Esto resolvió mi problema. ¡Gracias! – OceanBlue

+0

Muchas gracias. Funcionó :) – user2967948

0

El Error se introdujo en Java 7u5 according to this comment. Otro comment explica cómo solucionarlo cambiando el bootclasspath. (RENUNCIA:. Yo no probar y probar esto)

Esta solución, sin embargo, trabajado bien para mí:

  • Descargar ant-1.9.4
  • Eclipse> > Preferencias >> Ant >> Runtime >> AntHomeEntries
  • Eliminar todas las entradas 1.8.x classpath
  • Agregar todas las libs desde 1.9.4 en lugar de

Según Ant Changes, esto ha sido fixed since 1.9.1

Cuestiones relacionadas