IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Java Discussion :

version avec laquelle un .class a été compilé ? [FAQ]


Sujet :

Java

  1. #1
    Membre actif

    Inscrit en
    Juin 2005
    Messages
    212
    Détails du profil
    Informations forums :
    Inscription : Juin 2005
    Messages : 212
    Points : 229
    Points
    229
    Billets dans le blog
    1
    Par défaut version avec laquelle un .class a été compilé ?
    Bonjour !
    J'ai des .class j'aimerais connaitre la version de java avec laquelle ils ont été compilé, y a t'il un moyen de le savoir ?
    je n'arrive pas à exécuter le .jar car j'ai une erreur de version :
    Exception in thread "main" java.lang.UnsupportedClassVersionError: Bad version number in .class file

    Si quelqu'un peut aider, merci d'avance.

  2. #2
    Expert éminent sénior
    Avatar de adiGuba
    Homme Profil pro
    Développeur Java/Web
    Inscrit en
    Avril 2002
    Messages
    13 938
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Java/Web
    Secteur : Transports

    Informations forums :
    Inscription : Avril 2002
    Messages : 13 938
    Points : 23 190
    Points
    23 190
    Billets dans le blog
    1
    Par défaut
    Salut,


    Si tu veux juste connaitre le numéro de version d'un fichier *.class, tu peux utiliser le décompilateur javap du JDK :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    javap -verbose NomDeLaClasse
    Ce qui devrait te donner (en plus du bytecode de la classe) quelque chose du genre :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
      SourceFile: "Main.java"
      minor version: 0
      major version: 50
    Sachant que le major_version correspond à ceci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    45	:arrow:	Java 1.0 / 1.1
    46	:arrow:	Java 1.2
    47	:arrow:	Java 1.3
    48	:arrow:	Java 1.4
    49	:arrow:	Java 5.0
    50	:arrow:	Java 6
    Et qu'il peut y avoir des minors versions différents (mais principalement pour les premières versions de java si je ne me trompe pas).

    Attention car javap fonctionne comme java et attend un nom de classe et non pas un fichier. Tu pourrais donc avoir besoin de spécifier le classpath.


    Maintenant, si tu veux lire ces informations via un programme, il suffit de lire les premiers bytes du fichier *.class (cf la description du format des fichiers *.class sur wikipedia), ou tu peux récupérer le code Java sur ce blog : Thou shall know the .class file version!


    Enfin, tu peux utiliser la propriété système pour récupérer la version max supporté par la JVM :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    String maxVersion = System.getProperty("java.class.version");
    a++

  3. #3
    Membre actif

    Inscrit en
    Juin 2005
    Messages
    212
    Détails du profil
    Informations forums :
    Inscription : Juin 2005
    Messages : 212
    Points : 229
    Points
    229
    Billets dans le blog
    1
    Par défaut
    Merci adiGuba !

    En utilisant javap -verbose NomDeLaClasse (et en redirigeant la sortie vers un fichier pour une meilleure lisibilité) ça donne :
    minor version: 0
    major version: 46
    (46 correspondant à Java 1.2 selon ce que tu as écrit lus haut)
    Quant au code Java donné sur ce blog, il donne :
    class file version is 46.0
    You need to use JDK 1.3.1 or above
    Concernant l'instruction : String maxVersion = System.getProperty("java.class.version");, elle donne la version de la JVM installée, donc ce n'est pas ce que je veux savoir

    Pour info ce .jar dont il est question s'éxécute sur une autre machine avec la JDK 6, si il a été compilé avec 1.2 ou 1.3 je ne comprends pas pourquoi il ne marche pas avec ma JDK 5 (build 1.5.0_10-b03), je vais installer la 6 pour voir

    Merci encore !

  4. #4
    Expert éminent sénior
    Avatar de adiGuba
    Homme Profil pro
    Développeur Java/Web
    Inscrit en
    Avril 2002
    Messages
    13 938
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Java/Web
    Secteur : Transports

    Informations forums :
    Inscription : Avril 2002
    Messages : 13 938
    Points : 23 190
    Points
    23 190
    Billets dans le blog
    1
    Par défaut
    Citation Envoyé par kimz
    Pour info ce .jar dont il est question s'éxécute sur une autre machine avec la JDK 6, si il a été compilé avec 1.2 ou 1.3 je ne comprends pas pourquoi il ne marche pas avec ma JDK 5 (build 1.5.0_10-b03), je vais installer la 6 pour voir
    Vérifie bien ta version de java !

    Il y a plusieurs logiciels (Oracle entre autres) qui s'installent avec une JVM obsolète...

    Le problème est que bien souvent elle se retrouve dans le PATH et passe avant une version plus récente...

    a++

  5. #5
    Membre actif

    Inscrit en
    Juin 2005
    Messages
    212
    Détails du profil
    Informations forums :
    Inscription : Juin 2005
    Messages : 212
    Points : 229
    Points
    229
    Billets dans le blog
    1
    Par défaut
    re adiGuba,
    C'était pas clair que (build 1.5.0_10-b03) est la sortie de java -version ?
    sinon même System.getProperty("java.version"); donne : 1.5.0_10

    Si je double-clique sur le .jar il ne se passe rien, en cliquant-droit avec ouvrir avec j'ai 2 propositions : Java(TM) 2 Platform Standard Edition Binary, pour les deux il ne se passe rien ..

  6. #6
    Expert éminent sénior
    Avatar de adiGuba
    Homme Profil pro
    Développeur Java/Web
    Inscrit en
    Avril 2002
    Messages
    13 938
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Java/Web
    Secteur : Transports

    Informations forums :
    Inscription : Avril 2002
    Messages : 13 938
    Points : 23 190
    Points
    23 190
    Billets dans le blog
    1
    Par défaut
    Citation Envoyé par kimz
    C'était pas clair que (build 1.5.0_10-b03) est la sortie de java -version ?
    En fait il n'est pas rare que le problème viennent de là... je préfère vérifier avant de poster 10 messages pour finalement retomber là dessus...

    Citation Envoyé par kimz
    Si je double-clique sur le .jar il ne se passe rien, en cliquant-droit avec ouvrir avec j'ai 2 propositions : Java(TM) 2 Platform Standard Edition Binary, pour les deux il ne se passe rien ..
    Sous Windows, lorsque tu doubles-cliques sur un jar il est ouvert avec javaw qui n'affiche pas les sorties standard. Tu n'a donc aucun message d'erreur...

    Je suppose que tu as le message lorsque tu le lance manuellement avec java -jar...


    Par curiosité : d'où vient ce jar ???

    a++

  7. #7
    Membre actif

    Inscrit en
    Juin 2005
    Messages
    212
    Détails du profil
    Informations forums :
    Inscription : Juin 2005
    Messages : 212
    Points : 229
    Points
    229
    Billets dans le blog
    1
    Par défaut
    java -jar MonFich.jar donne en ligne de commande :

    Exception in thread "main" java.lang.UnsupportedClassVersionError: Bad version number in .class file
    at java.lang.ClassLoader.defineClass1(Native Method)
    ...etc...
    Le fichier (projet) vient de SourceForge, j'ai donné le projet à un copain qui a la jdk 6 ça marche chez lui

  8. #8
    Membre actif

    Inscrit en
    Juin 2005
    Messages
    212
    Détails du profil
    Informations forums :
    Inscription : Juin 2005
    Messages : 212
    Points : 229
    Points
    229
    Billets dans le blog
    1
    Par défaut
    re,
    j'ai viré les jre/jdk que j'avais et j'ai installé le jdk 6, ça marche nickel.
    Merci encore adiGuba, très instructive ta première réponse

  9. #9
    Candidat au Club
    Profil pro
    Inscrit en
    Juillet 2005
    Messages
    4
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2005
    Messages : 4
    Points : 4
    Points
    4
    Par défaut
    Citation Envoyé par adiGuba
    Salut,


    Si tu veux juste connaitre le numéro de version d'un fichier *.class, tu peux utiliser le décompilateur javap du JDK :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    javap -verbose NomDeLaClasse
    Ce qui devrait te donner (en plus du bytecode de la classe) quelque chose du genre :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
      SourceFile: "Main.java"
      minor version: 0
      major version: 50
    Sachant que le major_version correspond à ceci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    45	:arrow:	Java 1.0 / 1.1
    46	:arrow:	Java 1.2
    47	:arrow:	Java 1.3
    48	:arrow:	Java 1.4
    49	:arrow:	Java 5.0
    50	:arrow:	Java 6
    Et qu'il peut y avoir des minors versions différents (mais principalement pour les premières versions de java si je ne me trompe pas).

    Attention car javap fonctionne comme java et attend un nom de classe et non pas un fichier. Tu pourrais donc avoir besoin de spécifier le classpath.


    Maintenant, si tu veux lire ces informations via un programme, il suffit de lire les premiers bytes du fichier *.class (cf la description du format des fichiers *.class sur wikipedia), ou tu peux récupérer le code Java sur ce blog : Thou shall know the .class file version!


    Enfin, tu peux utiliser la propriété système pour récupérer la version max supporté par la JVM :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    String maxVersion = System.getProperty("java.class.version");
    a++
    Petit complément avec un autre méthode.

    la commande linux "file Fichier.class" affiche :
    Fichier.class: compiled Java class data, version XX.0

    où XX correspond à la major_version évoquée ci dessus

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 3
    Dernier message: 11/12/2009, 14h26
  2. Connaitre la version java d'une classe compilée
    Par hainaoui dans le forum Général Java
    Réponses: 1
    Dernier message: 02/09/2009, 16h28
  3. [CVS]Gestion de 2 versions avec une partie commune
    Par Gromitou dans le forum EDI et Outils pour Java
    Réponses: 4
    Dernier message: 19/02/2004, 14h32
  4. [Débutant]Classe d'Authentification : compilation impossible
    Par acyclique dans le forum Servlets/JSP
    Réponses: 4
    Dernier message: 23/08/2003, 19h42
  5. Problèmes de versions avec Xalan, Xerces et Java
    Par honeyz dans le forum XML/XSL et SOAP
    Réponses: 4
    Dernier message: 05/06/2003, 10h18

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo