API Java pour trouver la version du JDK un fichier de classe est compilée pour?
Existe-il des Api Java pour trouver la version du JDK un fichier de classe est compilée pour? Bien sûr, il est le javap outil pour déterminer la version majeure tel que mentionné dans ici. Cependant je tiens à le faire par programme afin que je puisse avertir l'utilisateur de le compiler pour le JDK approprié
- Les réponses faisant appel à la lecture d'octets à partir d'un fichier sembler assez barbare pour moi. Il devrait y avoir un moyen d'obtenir cette information à l'aide de la Réflexion, comme Foobar.classe.getTargetVersion().
Vous devez vous connecter pour publier un commentaire.
Les valeurs possibles sont :
basszero l'approche peut être effectuée via la ligne de commande UNIX, et le "od(1) de la commande":
"feca beba" est le nombre magique. Le "0000 3100" est 0x31, ce qui représente J2SE 5.0.
Cela vous arrive le contenu du fichier de classe:
MysteryClass.class.getResourceAsStream("MysteryClass.class")
Puis regarder octets 5 à 8 pour obtenir le mineur et majeur de version. Une correspondance entre ces chiffres et le JDK communiqués de presse peuvent être trouvés ici.
Apache BCEL fournit cette API:
Viens de lire le fichier de la classe directement. Il est TRÈS facile de trouver la version. Consultez les spec et wiki et puis d'essayer le code. Habillage de ce code et de décision est plus utile/jolie est laissée en exercice. Sinon, vous pouvez utiliser une bibliothèque comme BCEL, ASM, ou JavaAssist
Sur Linux, vous pouvez utiliser le
file
commande sur un fichier de classe, que j'ai trouvé plus simple pour mon cas d'utilisation. Par exemple:Comme d'autres l'ont montré, il est assez facile de le faire par la lecture des huit premiers octets d'un fichier de classe. Si vous souhaitez une pré-construit binaire de la bibliothèque, vous pouvez en télécharger un ici.
JavaP a un API, mais il est spécifique à la Sun JDK.
On en trouve dans
tools.jar
, soussun/tools/javap/Main.class
.