Connaissez-vous un outil qui recherchera les fichiers .class, puis affichera leurs versions compilées?
Je sais que vous pouvez les regarder individuellement dans un éditeur hexadécimal, mais j'ai beaucoup de fichiers de classe à examiner (quelque chose dans mon application géante est en train de compiler vers Java6 pour une raison quelconque).
jvm-bytecode
SCdF
la source
la source
Réponses:
Utilisez l' outil javap fourni avec le JDK. L'
-verbose
option imprimera le numéro de version du fichier de classe.Pour afficher uniquement la version:
la source
Il est assez facile de lire la signature du fichier de classe et d'obtenir ces valeurs sans API tierce. Tout ce que vous avez à faire est de lire les 8 premiers octets.
Pour la version de fichier de classe 51.0 (Java 7), les octets d'ouverture sont:
... où 0xCAFEBABE sont les octets magiques, 0x0000 est la version mineure et 0x0033 est la version principale.
Parcourir les répertoires ( File ) et les archives ( JarFile ) à la recherche de fichiers de classe est trivial.
Le blog d' Oracle Joe Darcy répertorie la version de classe avec les mappages de version JDK jusqu'à Java 7:
la source
Sur le type Unix
Donnera également le type et la version du fichier. Voici à quoi ressemble la sortie:
la source
Si vous êtes sur un système Unix, vous pouvez simplement faire un
(ma version du fichier dit "données de classe Java compilées, version 50.0" pour les classes java6).
la source
file *.class
produit:ClassName.class: compiled Java class data, version 50.0 (Java 1.6)
Encore une autre vérification de la version Java
la source
Dans eclipse si vous n'avez pas de sources attachées. Faites attention à la première ligne après le bouton Attacher la source.
// Compilé à partir de CDestinoLog.java ( version 1.5: 49.0, super bit )
la source
Peut-être que cela aide quelqu'un aussi. Il semble qu'il existe un moyen plus simple d'obtenir la version JAVA utilisée pour compiler / construire .class. Cette méthode est utile pour l'auto-vérification de l'application / classe sur la version JAVA.
J'ai parcouru la bibliothèque JDK et j'ai trouvé cette constante utile: com.sun.deploy.config.BuiltInProperties.CURRENT_VERSION . Je ne sais pas depuis quand il est en JAVA JDK.
En essayant ce morceau de code pour plusieurs constantes de version, j'obtiens le résultat ci-dessous:
src:
production:
Dans la classe bytecode, il y a vraiment une constante stockée - voir la partie marquée en rouge de Main.call - constante stockée dans .class bytecode
La constante est dans la classe utilisée pour vérifier si la version JAVA est obsolète (voir Comment Java vérifie qu'elle est obsolète ) ...
la source
Une solution Java utilisant des numéros magiques de version . En dessous, il est utilisé par le programme lui-même pour détecter sa version de bytecode.
la source
Cette classe Java analyse le contenu de tous les contenus WAR et JAR trouvés sous la liste des répertoires, et imprime un résumé des versions de fichier de classe Java pour chaque composant, y compris chaque JAR dans les WAR:
la source