2010-08-21 21 views
7

Estoy tratando de compilar el código comprobado de SVN de otro desarrollador. Eclipse me ha estado causando muchos problemas últimamente.Eclipse no compilará, archivo de clase incorrecta, versión incorrecta

Éstos son mis ajustes específicos del proyecto: alt text

Esto es lo que la sección de compilación de mi archivo de hormigas:

<target name="compile" depends="build-common, init" description="Compile files. "> 
    <javac srcdir="${src_dir}" destdir="${build_dir}" debug="true" > 
     <classpath path="${tomcat_home}/lib/servlet-api.jar;" /> 
    </javac> 
</target> 

cuando compilo (utilizando Ant) me sale un mensaje de error:

compile: 
    [javac] Compiling 3 source files to H:\MYCOMPANY\portlets\build 
    [javac] H:\MYCOMPANY\portlets\src\com\mycompany\portlets\CourseList.java:3: cannot access java.io.IOException 
    [javac] bad class file: C:\Program Files\Java\jre1.6.0_07\lib\rt.jar(java/io/IOException.class) 
    [javac] class file has wrong version 49.0, should be 48.0 
    [javac] Please remove or make sure it appears in the correct subdirectory of the classpath. 
    [javac] import java.io.IOException; 
    [javac]    ^
    [javac] 1 error 

¿Qué significa este error?

Respuesta

13

La versión del archivo de clase de 49.0 pertenece a Java 1.5.x, mientras que la de 48.0 pertenece a una de las versiones de Java 1.4.x. La estructura del archivo de clase había cambiado en 1.5 debido a la introducción de varias características nuevas y cambios realizados en la Especificación del lenguaje Java.

A partir del error, se puede deducir que se esperaba un archivo de clase Java 1.4, mientras que se encontró un archivo de clase Java 1.5. Parece que el compilador es un compilador Java 1.4, por lo que debe intentar verificar si está utilizando la versión correcta del compilador Java y también el JDK correcto (es decir, el inicio JDK).

ADENDA

hormiga tiende a buscar el ejecutable en el javac $ JAVA_HOME/bin/javac. Si la variable de entorno JAVA_HOME se ha configurado incorrectamente, por ejemplo, en una casa Java 1.4, entonces existe la posibilidad de obtener el error descrito incluso en Eclipse.

ADDENDUM # 2

La adición de entradas a la variable de entorno PATH podría resultar en la alteración del comportamiento de búsqueda de ruta de clase de hormiga, posiblemente resultando en una tools.jar diferentes que se utilizan para el fin de recopilar las fuentes. Esto podría deberse a que jvm.dll de la instalación de JRE 1.4.2 se utiliza para ejecutar Eclipse (y, por lo tanto, Ant).

+0

¿Cómo verifico la versión del compilador de Ant? –

+0

Bueno, de forma predeterminada, esta tiende a ser la versión del compilador en el hogar JDK (la configuración de inicio de Eclipse puede ayudar a identificar el hogar). Podría especificar un compilador diferente utilizando el atributo ejecutable de la tarea javac Ant: http://ant.apache.org/manual/Tasks/javac.html –

+0

No entiendo, estoy usando Java 1.6 JDK. Agregué una captura de pantalla a mi publicación. ¿Por qué debería importar eso? –

3

archivo de clase de mal: C: \ Archivos de programa \ Java \ jre1.6.0_07 \ lib \ rt.jar (java/io/IOException.class)
archivo de clase tiene una versión incorrecta 49.0, 48.0 debe ser

Es revelador que el archivo de clase mencionado se haya compilado utilizando un compilador que genere archivos de clase de la versión 49.0, mientras que Ant espera que se compile utilizando un compilador que genere archivos de clase de la versión 48.0. Como la clase en cuestión es parte del JRE, debe actualizar classpath en su build.xml para incluir los archivos de clase que contienen JRE de la versión 48.0.

+1

Umm, Java 6 tiene una versión classfile de 50.0. –

+0

@Vineet: Hmm, tienes razón. Solo estaba traduciendo del mensaje de error. Pero eso no explica por qué 'IOException.class' en JRE 1.6 tiene la versión 49.0 como se indica en el mensaje de error? De todos modos, generifiqué mi respuesta para eliminar las versiones específicas de JRE. – BalusC

+0

buena captura. La versión 49.0 en un 1.6 JRE no tiene sentido. –

2

Parece que está ejecutando Ant con un compilador Java de la versión 1.5 pero compilando en contra de las bibliotecas de clase (rt.jar) de una instalación 1.6. Debe configurar su build.xml para que use consistentemente ambos (el compilador y las bibliotecas de clase) de la misma versión de Java.

+0

Este podría ser el problema, ¿dónde lo especifico? En la construcción de ant, ¿debería agregar target = "1.5" source = "1.5" al comando de compilación? –

+0

Está en sus "Configuraciones de herramientas externas", es decir, por iniciador de hormigas. Especialmente revisa las pestañas JRE y Classpath. El problema probablemente sea en la configuración de JRE, pero es posible que haya agregado manualmente una versión diferente de rt.jar a Classpath. – Stroboskop

+0

¿Me pregunto cómo lograron _hacer_ eso? –

3

En primer lugar, la configuración de su proyecto no tiene nada que ver con su script de compilación. La configuración del proyecto le indica cómo Eclipse construye su proyecto, no cómo se ejecutará su archivo ant.

Para encontrar en qué jvm ant se ejecuta, haga clic con el botón derecho en su script de compilación en Eclipse y seleccione "Ejecutar como ...". En el cuadro de diálogo emergente, vaya a la pestaña jvm y compruebe qué jre se utiliza para ejecutar su secuencia de comandos.

+1

Esto ayudó un poco. No hay una pestaña JVM, pero la pestaña JRE usa correctamente jre1.6.0_07. –

+1

Lo siento, no tenía Eclipse abierto y le di el nombre de la pestaña incorrecta.Bueno, a continuación comprobaría: 1. Si tiene jre 1.4 instalado en algún lugar. 2. Si tiene JAVA_HOME o JRE_HOME definido, y si es así a dónde apuntan. 3. Ejecute java -version desde la línea de comandos para ver a qué java apunta su ruta. Si es 1.4, ajuste su entorno de ruta para que apunte a 1.6. – spbfox

0

Tal vez es necesario utilizar JDK JRE que se encuentra en C: \ Archivos de programa \ Java \ jdk \ jre, no pública

1

Usted puede tratar de copiar tools.jarjdk/jre-common/lib de Tomcat.

que trabajó para mí, como lo demuestra here

+0

funcionó 4 me, thx – Mariah

2

El mensaje de error significa que la herramienta compilador incluido en su Tool.jar hormiga está utilizando es la versión más antigua que la clase a la que intenta compilar. Mensaje "El archivo de clase [javac] tiene la versión incorrecta 50.0 debería ser 49.0" significaría que su archivo de clase necesita jdk 6.0 pero su tool.jar proviene de la distribución de jdk 5.0. Para cambiar a tools.jar correctas en eclipse, abra Ventana> Preferencias> Ant> Runtime> Global Entries.

0

Necesita cambiar la versión de Java para ANT también porque si está utilizando su entorno de tiempo de ejecución como JDK1.8 entonces su ANT también debe apuntar a la misma versión o Ant debe referir el archivo tools.jar de JDK1.8/la ubicación lib/tools.jar. Para solucionar este problema yo su Eclipse Vaya a la ventana -> Preferencia -> Ant -> Runtime -> Global Entries. Aquí compruebe y actualice la ruta tools.jar con la última versión de la siguiente manera .: C: \ Archivos de programa \ Java \ jdk1.8.0_60 \ lib \ tools.jar

Luego, se ejecutará el problema del script de compilación se resolverá. :)

0

Cambiando las herramientas.jar en eclipse a la versión correcta se arregló. Estaba usando jre 1.6 y tuve que cambiarlo para usar 1.8 para obtener el archivo de clase en la versión 52.

Cuestiones relacionadas