¿Alguno de ustedes conoce alguna herramienta que busque archivos .class y luego muestre sus versiones compiladas?
Sé que puede verlos individualmente en un editor hexadecimal, pero tengo muchos archivos de clase para revisar (algo en mi aplicación gigante se está compilando en Java6 por alguna razón).
jvm-bytecode
SCdF
fuente
fuente
Respuestas:
Utilice la herramienta javap que viene con el JDK. La
-verbose
opción imprimirá el número de versión del archivo de clase.Para mostrar solo la versión:
fuente
Es bastante fácil leer la firma del archivo de clase y obtener estos valores sin una API de terceros. Todo lo que necesita hacer es leer los primeros 8 bytes.
Para la versión de archivo de clase 51.0 (Java 7), los bytes de apertura son:
... donde 0xCAFEBABE son los bytes mágicos, 0x0000 es la versión secundaria y 0x0033 es la versión principal.
Caminar directorios ( Archivo ) y archivos ( JarFile ) buscando archivos de clase es trivial.
El blog de Joe Darcy de Oracle enumera la versión de la clase a las asignaciones de la versión JDK hasta Java 7:
fuente
En tipo Unix
También le dará el tipo de archivo y la versión. Así es como se ve la salida:
fuente
Si está en un sistema Unix, puede hacer un
(mi versión del archivo dice "datos de clase Java compilados, versión 50.0" para clases java6).
fuente
file *.class
produce:ClassName.class: compiled Java class data, version 50.0 (Java 1.6)
Otra comprobación de la versión de Java
fuente
En eclipse si no tiene fuentes adjuntas. Tenga en cuenta la primera línea después del botón adjuntar fuente.
// Compilado de CDestinoLog.java ( versión 1.5: 49.0, super bit )
fuente
Quizás esto también ayude a alguien. Parece que hay una manera más fácil de usar la versión JAVA para compilar / construir .class. De esta manera es útil para la autocomprobación de la aplicación / clase en la versión JAVA.
Revisé la biblioteca JDK y encontré esta constante útil: com.sun.deploy.config.BuiltInProperties.CURRENT_VERSION . No sé desde cuándo está en JAVA JDK.
Al probar este fragmento de código para varias constantes de versión, obtengo el resultado a continuación:
src:
salida:
En el código de bytes de la clase, realmente hay una constante almacenada; vea la parte marcada en rojo de Main.call: constante almacenada en el código de bytes .class
La constante está en la clase utilizada para verificar si la versión de JAVA está desactualizada (consulte Cómo Java verifica que está desactualizada ) ...
fuente
Una solución basada en Java que utiliza números mágicos de versión . A continuación, el propio programa lo utiliza para detectar su versión de código de bytes.
fuente
Esta clase de Java escanea el contenido de todos los contenidos de WAR y JAR que se encuentran en la lista de directorios e imprime un resumen de las versiones de archivo de la clase de Java para cada componente, incluido cada JAR dentro de los WAR:
fuente