Frage:
Finden Sie die Compilerversion einer Java-Klassendatei heraus
user187
2013-03-27 21:24:44 UTC
view on stackexchange narkive permalink

Ich habe eine Java-Klassendatei. Wie finde ich die Version des Compilers heraus, mit dem diese Datei kompiliert wurde? Ich bin auf Ubuntu Server 12.04.

Drei antworten:
#1
+22
user187
2013-03-27 21:24:44 UTC
view on stackexchange narkive permalink

Das JDK enthält einen javap -Befehl. Es gibt viele Informationen, aber Sie können es folgendermaßen verwenden:

  javap -verbose yourClass | grep version  

Beispielausgabe:

  Nebenversion: 0 Hauptversion: 51  

Die Hauptversion sagt es Ihnen Welche Version der Compiler hatte:

  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  
Für 45 hängt die genaue Compilerversion von der Nebenversion ab. 45.3 wäre 1.0.2 Ich glaube.
Hier erfahren Sie tatsächlich die Version des Klassendateiformats, nicht die Version des Compilers oder eines anderen Tools, mit dem es generiert wurde. `javac` unterstützt das Flag` -target` oder` --release`, um Klassendateien zu generieren, die auf frühere Versionen des JDK abzielen.
Gibt es eine Möglichkeit, die Version zu erhalten, aber im Code?
#2
+15
0xC0000022L
2013-03-27 22:11:02 UTC
view on stackexchange narkive permalink

Wieder das Dienstprogramm file (1) und libmagic (3) , auf dem es basiert, kann dein Freund sein:

  $ file Gwan.classGwan.class: kompilierte Java-Klassendaten, Version 50.0 (Java 1.6)  
Was ist, wenn Sie unter Windows arbeiten?
@avgvstvs: dann können Sie immer noch auf so etwas wie Cygwin zurückgreifen. Ehrlich gesagt, wenn Sie Ihr eigenes Toolset einschränken, indem Sie Ihre RCE-Bemühungen auf ein einziges Host-Betriebssystem beschränken, ist dies Ihre eigene Schuld. Einfach ausgedrückt: Wissen Sie, welche Tools wann verwendet werden müssen, und seien Sie nicht aufgrund willkürlicher und künstlicher Einschränkungen wählerisch.
Cygwin führt eine unnötige Abhängigkeit ein. Wenn Sie * .class-Dateien umkehren, haben Sie auf * jeder * JVM Zugriff auf `javap`. Ich bin mit dem Rest von dem, was du sagst, nicht einverstanden, aber ich bin faul und wenn ich kein VM oder D / L Cygwin starten muss, bin ich glücklicher.
#3
  0
Sachin Kokate
2017-07-27 07:01:51 UTC
view on stackexchange narkive permalink

Sie suchen dies in der Befehlszeile (für eine Klasse namens MyClass):

Unter Unix / Linux:

  javap -verbose MyClass | grep "major"  

Unter Windows:

  javap -verbose MyClass | findstr "major"  

Sie möchten die Hauptversion aus den Ergebnissen. Hier einige Beispielwerte:

  • Java 1.2 verwendet die Hauptversion 46
  • Java 1.3 verwendet die Hauptversion 47
  • Java 1.4 verwendet die Hauptversion 48
  • Java 5 verwendet die Hauptversion 49
  • Java 6 verwendet die Hauptversion 50
  • Java 7 verwendet die Hauptversion 51
  • Java 8 verwendet die Hauptversion 52


Diese Fragen und Antworten wurden automatisch aus der englischen Sprache übersetzt.Der ursprüngliche Inhalt ist auf stackexchange verfügbar. Wir danken ihm für die cc by-sa 3.0-Lizenz, unter der er vertrieben wird.
Loading...