2009-07-08 12 views
232

Possible Duplicate:
Tool to read and display Java .class versionscómo comprobar la versión del JDK utilizada para compilar un archivo .class

Estoy tratando de depurar un error

"Bad version number in .class file'

en Java, hay una manera para mí para comprobar la versión del .class archivos son?

Estoy usando JRE1.5.0_6, pero mi JDK es la versión 1.6.0_13.

Estoy compilando con el modo de compatibilidad se establece en 1,5 en Eclipse que pensé que trabajar ...

+0

Consulte http://stackoverflow.com/questions/698129/how-can-i-find-the-target-java-version-for-a-compiled-class – Jon

+0

Consulte [javadoc] (http: // java.sun.com/docs/books/jvms/second_edition/html/ClassFile.doc.html) para obtener más información sobre versiones principales y secundarias. – WiseGeek

Respuesta

507

Usted está buscando esto en la línea de comandos (para una clase llamada MiClase):

en Unix/Linux:

javap -verbose MyClass | grep "major" 

en Windows:

javap -verbose MyClass | findstr "major" 

Usted quiere que el principal versión de los resultados. Aquí están algunos valores de ejemplo:

  • Java 1.2 utiliza versión principal 46
  • Java 1.3 utiliza versión principal 47
  • Java 1.4 utiliza versión principal 48
  • Java 5 utiliza versión principal 49
  • Java 6 principales usos versión 50
  • Java 7 utiliza versión principal 51
  • Java 8 utiliza versión principal 52
  • Java 9 utiliza la versión principal 53
+33

Alternativamente, si abre el archivo de clase en un editor hexadecimal, puede ver los bytes 7 y 8. El número se correlacionará con los números que figuran en la respuesta anterior. P.ej. '00 2E' -> JDK 1.2 = 46 (0x2E hex). Útil si no tienes acceso a javap. ref: http://en.wikipedia.org/wiki/Java_class_file#General_layout – Jim

+14

adenda: Puede poner -cp luego la clase para que pueda obtenerla y jar existente –

+2

Tuve que eliminar la ".class" en el comando de lo contrario recibí un mensaje, "Error: no se puede encontrar foo.class". Entonces, "javap -verbose foo | grep" major "" funcionó. Solo un aviso. http://stackoverflow.com/questions/13356811/java-javap-errorcould-not-find-class –

3

qué la bandera -verbose a su rendimiento comando java cualquier información útil? Si no, ¿tal vez java -X revela algo específico para su versión que podría ayudar?

15

Por cierto, la razón por la que está teniendo problemas es que el compilador de Java reconoce dos indicadores de versión. Hay -source 1.5, que asume el código fuente de Java 1.5, y -target 1.5, que emitirá java 1.5 archivos de clase compatibles. Probablemente quieras utilizar ambos conmutadores, pero definitivamente necesitas -target 1.5; intente verificar dos veces que el eclipse está haciendo lo correcto.

7

Herramienta gratuita JarCheck here

Cuestiones relacionadas