Pregunta:
Descubra la versión del compilador de un archivo de clase Java
user187
2013-03-27 21:24:44 UTC
view on stackexchange narkive permalink

Tengo un archivo de clase java. ¿Cómo averiguo la versión del compilador que se utilizó para compilar este archivo? Estoy en Ubuntu Server 12.04.

Tres respuestas:
user187
2013-03-27 21:24:44 UTC
view on stackexchange narkive permalink

El JDK incluye un comando javap . Proporciona mucha información, pero puede usarla así:

  javap -verbose yourClass | versión grep  

Salida de ejemplo:

  versión secundaria: 0 versión principal: 51  

La versión principal le dice qué versión tenía el compilador:

  J2SE 8 = 52, J2SE 7 = 51, J2SE 6.0 = 50, J2SE 5.0 = 49, JDK 1.4 = 48, JDK 1.3 = 47, JDK 1.2 = 46 , JDK 1.1 = 45  
para 45, la versión exacta del compilador depende de la versión secundaria. 45.3 sería 1.0.2, creo.
En realidad, esto le dice la versión del formato de archivo de clase, no la versión del compilador u otra herramienta utilizada para generarlo. `javac` admite el indicador` -target` o `--release` para generar archivos de clase destinados a versiones anteriores del JDK.
¿Hay alguna forma de obtener la versión pero en el código?
0xC0000022L
2013-03-27 22:11:02 UTC
view on stackexchange narkive permalink

De nuevo, la utilidad file (1) y libmagic (3) , en la que se basa, puede ser tu amigo:

  $ file Gwan.classGwan.class: datos de clase Java compilados, versión 50.0 (Java 1.6)  
¿Qué pasa si estás en Windows?
@avgvstvs:, entonces aún puede recurrir a algo como Cygwin. Honestamente, si limita su propio conjunto de herramientas al restringir sus esfuerzos de RCE a un solo sistema operativo host, es culpa suya. En pocas palabras: sepa qué herramientas usar cuando y no sea exigente en base a limitaciones arbitrarias y artificiales.
Cygwin introduce una dependencia innecesaria. Si está invirtiendo archivos * .class, en * cada * JVM tendrá acceso a `javap`. No estoy en desacuerdo con el resto de lo que dices, pero soy un vago y si no tengo que iniciar una VM o un Cygwin d / l, soy más feliz.
Sachin Kokate
2017-07-27 07:01:51 UTC
view on stackexchange narkive permalink

Está buscando esto en la línea de comandos (para una clase llamada MyClass):

En Unix / Linux:

  javap -verbose MyClass | grep "mayor"  

En Windows:

  javap -verbose MyClass | Findstr "major"  

Quieres la versión principal de los resultados. Aquí hay algunos valores de ejemplo:

  • Java 1.2 usa la versión principal 46
  • Java 1.3 usa la versión principal 47
  • Java 1.4 usa la versión principal 48
  • Java 5 usa la versión principal 49
  • Java 6 usa la versión principal 50
  • Java 7 usa la versión principal 51
  • Java 8 usa la versión principal 52


Esta pregunta y respuesta fue traducida automáticamente del idioma inglés.El contenido original está disponible en stackexchange, a quien agradecemos la licencia cc by-sa 3.0 bajo la que se distribuye.
Loading...