Question:
Découvrez la version du compilateur d'un fichier de classe Java
user187
2013-03-27 21:24:44 UTC
view on stackexchange narkive permalink

J'ai un fichier de classe java. Comment connaître la version du compilateur utilisé pour compiler ce fichier? Je suis sur Ubuntu Server 12.04.

Trois réponses:
#1
+22
user187
2013-03-27 21:24:44 UTC
view on stackexchange narkive permalink

Le JDK comprend une commande javap . Il donne beaucoup d'informations, mais vous pouvez l'utiliser comme ceci:

  javap -verbose yourClass | version grep  

Exemple de sortie:

  version mineure: 0 version majeure: 51  

La version majeure vous le dit quelle version le compilateur avait:

  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  
pour 45, la version exacte du compilateur dépend de la version mineure. 45,3 serait 1,0,2 je crois.
Cela vous indique en fait la version du format de fichier de classe, pas la version du compilateur ou de tout autre outil utilisé pour le générer. `javac` prend en charge l'indicateur` -target` ou `--release` pour générer des fichiers de classe ciblés sur les versions antérieures du JDK.
Existe-t-il un moyen d'obtenir la version mais dans le code?
#2
+15
0xC0000022L
2013-03-27 22:11:02 UTC
view on stackexchange narkive permalink

Encore une fois, l'utilitaire file (1) et libmagic (3) , sur lesquels il est basé, peut être votre ami:

  $ file Gwan.classGwan.class: données de classe Java compilées, version 50.0 (Java 1.6)  
Et si vous êtes sous Windows?
@avgvstvs:, vous pouvez toujours recourir à quelque chose comme Cygwin. Honnêtement, si vous limitez votre propre ensemble d'outils en limitant vos efforts RCE à un seul système d'exploitation hôte, c'est de votre faute. En termes simples: sachez quels outils utiliser quand et ne soyez pas pointilleux en raison de limitations arbitraires et artificielles.
Cygwin introduit une dépendance inutile. Si vous inversez des fichiers * .class, sur * chaque * JVM vous aurez accès à `javap`. Je ne suis pas en désaccord avec le reste de ce que vous dites, mais je suis paresseux et si je n'ai pas à démarrer un cygwin vm ou d / l je suis plus heureux.
#3
  0
Sachin Kokate
2017-07-27 07:01:51 UTC
view on stackexchange narkive permalink

Vous recherchez ceci sur la ligne de commande (pour une classe appelée MyClass):

Sous Unix / Linux:

  javap -verbose MyClass | grep "major"  

Sous Windows:

  javap -verbose MyClass | findstr "major"  

Vous voulez la version principale des résultats. Voici quelques exemples de valeurs:

  • Java 1.2 utilise la version majeure 46
  • Java 1.3 utilise la version majeure 47
  • Java 1.4 utilise la version principale 48
  • Java 5 utilise la version principale 49
  • Java 6 utilise la version principale 50
  • Java 7 utilise la version principale 51
  • Java 8 utilise la version principale 52


Ce Q&R a été automatiquement traduit de la langue anglaise.Le contenu original est disponible sur stackexchange, que nous remercions pour la licence cc by-sa 3.0 sous laquelle il est distribué.
Loading...