2010-03-18 26 views
136

Recibo este error cuando incluyo una biblioteca de código abierto que tuve que compilar desde el código fuente. Ahora, todas las sugerencias en la web indican que el código se compiló en una versión y se ejecutó en otra versión (nueva en versiones anteriores). Sin embargo, solo tengo una versión de JRE en mi sistema. Si me quedo los comandos:java.lang.UnsupportedClassVersionError: ¿número de versión incorrecto en el archivo .class?

$ javac -version 
javac 1.5.0_18 

$ java -version 
java version "1.5.0_18" 
Java(TM) 2 Runtime Environment, Standard Edition (build 1.5.0_18-b02) 
Java HotSpot(TM) Server VM (build 1.5.0_18-b02, mixed mode) 

y registro en Eclipse para las propiedades de la biblioteca de Java, consigo 1.5.0_18

Por lo tanto, tengo que concluir otra cosa, interna a una clase en sí, está lanzando el ¿¿excepción?? ¿Es eso posible?

+2

¿tiene una versión compilada de la biblioteca en otro lugar que podría estar en su ruta de clase primero? –

+0

Buena idea, pero no. Hice un chequeo usando 'buscar. -name '* .jar' | xargs locate 'desde la carpeta lib con los JAR. Además, ¿no creía que Eclipse usaba CLASSPATH? ¿Alguna otra buena sugerencia? –

+0

cómo usar este comando find -name '* .jar' en cmd ya que estoy buscando reconstruir el código jr src otra vez ... y para eso necesito disparar este cmd ..... http: // www. javalobby.org/java/forums/t103334.html.....my jdk está en C: \ Program Files \ Java \ jdk1.6.0_31 –

Respuesta

183

He aprendido que los mensajes de error como este suelen ser correctos. Cuando POSSIBLY (en tu mente) no puede ser lo que dice el error que se informa, vas a buscar un problema en otra área ... solo para descubrir horas más tarde que el mensaje de error original era realmente correcto.

Dado que está utilizando Eclipse, creo que Thilo tiene razón. La razón más probable por la que recibe este mensaje es porque uno de sus proyectos está compilando 1.6 clases. No importa si solo tiene un 1.5 JRE en el sistema, porque Eclipse tiene su propio compilador (no javac), y solo necesita un 1.5 JRE para compilar 1.6 clases. Puede ser extraño, y una configuración debe ser desmarcada para permitir esto, pero me las arreglé para hacerlo.

Para el proyecto en cuestión, verifique las Propiedades del proyecto (generalmente Alt + Enter), sección del compilador de Java. Aquí hay una imagen de un proyecto configurado para compilar 1.6, pero con solo un 1.5 JRE.

enter image description here

+0

Totalmente de acuerdo ... es por eso que le pregunté, en mi comentario, la pregunta sobre la forma de puntualizar.No sabía de las clases internas de Eclipse. La biblioteca fue compilada en la línea de comando con 'javac' e integrada en mi proyecto de Eclipse. Intentaré compilar mi proyecto desde la línea de comando. Claramente ha resuelto este problema en el pasado y sus sugerencias son fantásticas. –

+3

Si tiene el JDK (que tiene fuentes), debería poder agregar algunos puntos de interrupción en Eclipse y con suerte ver qué clase está intentando cargar. La forma más fácil es probablemente un punto de interrupción en el constructor para UnsupportedClassVersionError (o un punto de interrupción de Eclipse Exception, el ícono 'J!'), Luego puede inspeccionar cómo llegó allí. –

+0

OK. Encontré un experto en el edificio y él pudo apuntar a Eclipse al mismo JRE que mi línea de comando. Luego reconstruí contra 1.6 y corrí contra 1.6 y todo está funcionando. Obviamente, estaba equivocado sobre no tener nada más que 1.5. Él me mostró dónde mirar. Gracias por la ayuda - ¡ahora estoy en mi próximo problema! :) –

5

¿Compiló con Eclipse? Utiliza un compilador diferente (no javac). Eso no debería generar este error (si todo está configurado correctamente), pero puede intentar compilarlo con javac.

Si eso solucionó el problema, intente ver si Eclipse tiene algunas configuraciones incorrectas del compilador. Específicamente, apunte a Java 5.

+0

Eso es lo que estoy aprendiendo. Voy a tratar de construir las dos piezas de la misma manera (línea de cmd y/o eclipse). –

+1

Gracias Thilo, hoy he aprendido mucho sobre Eclipse y Java y las versiones de clase. Y un poco sobre * ant * también. –

8

¿Ha intentado hacer una "limpieza" completa y luego reconstruir en Eclipse (Proyecto-> Limpiar ...)?

¿Puede compilar y ejecutar con "javac" y "java" directamente desde la línea de comandos? ¿Eso funciona correctamente?

Si hace clic derecho en su proyecto, vaya a "Propiedades" y luego vaya a "Ruta de compilación de Java", ¿hay alguna entrada sospechosa debajo de alguna de las pestañas? Este es esencialmente tu CLASSPATH.

En las preferencias de Eclipse, es posible que también desee comprobar la sección "JRE instalados" en la sección "Java" y asegurarse de que coincida con lo que cree que debería.

Definitivamente tiene un archivo .class obsoleto en alguna parte o está obteniendo un desajuste en tiempo de compilación/tiempo de ejecución en las versiones de Java que está utilizando.

+0

sí (limpieza completa); no lo he probado (proyecto de la línea cmd); tal vez/no (eliminé las entradas de Eclipse "Java Build Path"); hizo eso (JREs - de ahí es donde obtuve la versión #). –

0

Otro escenario en el que esto podría ocurrir es cuando se va a iniciar una instancia de Eclipse (para depuración, etc.) a partir de un eclipse de acogida - en cuyo caso, alterando el nivel del proyecto o biblioteca de JRE en la ruta de clase del proyecto solo no ayuda. Lo que importa es el JRE utilizado para lanzar el entorno de eclipse de destino.

1

También verifique cualquier archivo jar en su proyecto que haya sido compilado para una versión superior de Java.Si se trata de sus propias bibliotecas, puede solucionar esto cambiando el atributo de la versión de destino a javac

<javac destdir="${classes.dir}" 
      debug="on" classpathref="project.classpath" target="1.6"> 
0

Siempre busque lo obvio también. Recibí este error una vez cuando accidentalmente agarré el recurso incorrecto para agregar y eliminar acciones del servidor. Puede ser fácil pasar por alto.

0

Eliminar los archivos de configuración específicos del proyecto (Eclipse workspace/project folder/.settings /) de la carpeta del proyecto también lo hará. Obviamente, tenemos que hacer un proyecto de limpieza y compilación después de eliminar.

2

También recibí el mismo error. Motivo por el cual estaba compilando el proyecto usando Maven. Tenía JAVA_HOME apuntando a JDK7 y, por lo tanto, java 1.7 se estaba utilizando para la compilación y cuando estaba ejecutando el proyecto estaba usando JDK1.5. Cambiar la entrada siguiente en el archivo .classpath o cambiar en el eclipse como en la captura de pantalla resolvió el problema.

classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/J2SE-1.5 

o cambio en las configuarions de ejecución de Eclipse como enter image description here

0

cambiar el proyecto para utilizar Java 1.7: Para que esto funcione siga estos pasos:

  • cambiar el compilador de Cumplimiento Nivel
  • Cambie sus proyectos JRE/JDK a algo del mismo nivel (1.7 en mi caso)
  • Haga el mismo cambio en todos los proyectos referenciados por su proyecto
  • cambiar la configuración/depuración de ejecución para utilizar el JRE/JDK (o del mismo nivel)

no funciona?

  • proyectos de eliminación bin
  • Limpio
  • a reconstruir

Todavía no funciona?

en el directorio de su proyecto: editar .settings/org.eclipse.jdt.core.prefs> asegurarse de que su nivel objetivo se aplica

buena suerte!

Cuestiones relacionadas