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 antérieur de java


Sujet :

Java

  1. #1
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Mai 2006
    Messages
    42
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Mai 2006
    Messages : 42
    Points : 35
    Points
    35
    Par défaut Version antérieur de java
    Bonjour à tous,

    J'aimerais savoir s'il est possible de faire fonctionner une application développée sous la version 1.6 sur un pc équipé de la version 1.4. Car lors de l'éxécution du programme sur plusieurs pc avec la version 1.6 aucun soucis, par contre pour la 1.4, j'ai toutes des erreurs du genre class found error,...
    Merci de vos conseil.

    Flames

  2. #2
    Expert éminent sénior
    Avatar de sinok
    Profil pro
    Inscrit en
    Août 2004
    Messages
    8 765
    Détails du profil
    Informations personnelles :
    Âge : 43
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Août 2004
    Messages : 8 765
    Points : 12 977
    Points
    12 977
    Par défaut
    Tout à fait normal, la version 6 de java apporte des nouveautés à java.
    Donc grosso modo java n'est pas rétrocompatible (il n'est pas possible de faire tourner un classe compilée par un compilateur 1.6 en 1.4).

    Donc si tu veux que ton programme puisse être utilisé par tout, il faut le compiler avec un javac 1.4
    Hey, this is mine. That's mine. All this is mine. I'm claiming all this as mine. Except that bit. I don't want that bit. But all the rest of this is mine. Hey, this has been a really good day. I've eaten five times, I've slept six times, and I've made a lot of things mine. Tomorrow, I'm gonna see if I can't have sex with something.

  3. #3
    Membre expert
    Avatar de Janitrix
    Inscrit en
    Octobre 2005
    Messages
    3 391
    Détails du profil
    Informations forums :
    Inscription : Octobre 2005
    Messages : 3 391
    Points : 3 401
    Points
    3 401
    Par défaut
    C'est tout à fait normal, tu ne peux pas exécuter une application compilé en 1.6 avec une machine virtuelle 1.4. A part la magie, rien ne peut changer cela. Soit tu fais une upgrade sur tes ordinateurs équipés de 1.4, soit tu fais en sorte que ton programme est compatible 1.4 et tu le compiles en tant que 1.4 (facile avec Eclipse, par contre faut que je cherche pour la ligne de commande si t'as pas eclipse). Bonne chance.

  4. #4
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Mai 2006
    Messages
    42
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Mai 2006
    Messages : 42
    Points : 35
    Points
    35
    Par défaut
    Merci beaucoup de vos réponses.
    Je m'en doutais un peu, toutes fois, il serait possible de compiler pour la version 1.4 en utilisant Eclipse, même si j'ai la mise à jour de la version 1.6.Cfr le post précédent.

  5. #5
    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,

    Citation Envoyé par flames
    Je m'en doutais un peu, toutes fois, il serait possible de compiler pour la version 1.4 en utilisant Eclipse, même si j'ai la mise à jour de la version 1.6.Cfr le post précédent.
    Oui tout à fait ! Eclipse sait très bien géré plusieurs JVM différentes...

    Pour cela il faut déjà que tu installes un JDK ou un JRE 1.4 et que tu le références dans les préférences d'eclipse ( Java -> Installed JREs). Je te conseille d'utiliser un JDK si possible (comme cela eclipse lie automatiquement les sources et te propose une javadoc en tooltip).


    Ensuite tu as dans les propriétés de ton projet (clic-droit sur le répertoire du projet) puis :
    • Dans la section "Java Build Path", onglet "Library", tu supprimes le JRE/JDK 1.6 puis tu utilises "Add Library..." pour ajouter le 1.4 (selectionner "JRE System Library" puis "Alternate JRE").
    • Dans la section "Java Compiler" tu dois spécifier une "compliance level" de 1.4 (il faut cocher "Enable project specific settings" si c'est grisé )


    a++

  6. #6
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Mai 2006
    Messages
    42
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Mai 2006
    Messages : 42
    Points : 35
    Points
    35
    Par défaut
    Merci beaucoup, je fais cela tout de suite.

  7. #7
    Membre expert
    Avatar de Janitrix
    Inscrit en
    Octobre 2005
    Messages
    3 391
    Détails du profil
    Informations forums :
    Inscription : Octobre 2005
    Messages : 3 391
    Points : 3 401
    Points
    3 401
    Par défaut
    Mais vous vous compliquez la vie cher amis . Tu n'as pas besoin d'installer le JDK 1.4, reste en 1.6. Tu lances Eclipse et tu fais : menu Window --> Preference --> Java --> Compiler. Dans la fenêtre de droite, tu décoches 'Use default compliance settings'. Dans 'Generated .class files compatibility', tu sélectionnes 1.4 et le tour est joué. Bien sur, cela sera appliqué à tout tes projets, donc si tu veux le faire que pour un, tu fais cliques droit sur ton projet (il faut qu'il soit ouvert je crois) : Properties --> Java Compiler et là c'est pareille. Bonne chance.

  8. #8
    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 Janitrix
    Mais vous vous compliquez la vie cher amis . Tu n'as pas besoin d'installer le JDK 1.4, reste en 1.6. Tu lances Eclipse et tu fais : menu Window --> Preference --> Java --> Compiler. Dans la fenêtre de droite, tu décoches 'Use default compliance settings'. Dans 'Generated .class files compatibility', tu sélectionnes 1.4 et le tour est joué. Bien sur, cela sera appliqué à tout tes projets, donc si tu veux le faire que pour un, tu fais cliques droit sur ton projet (il faut qu'il soit ouvert je crois) : Properties --> Java Compiler et là c'est pareille. Bonne chance.
    Non car tu fais la moitié du boulot

    Comme cela tu indiques au compilateur de générer un bytecode compatible 1.4. C'est bien sûr nécessaire pour que l'application fonctionne avec une JVM 1.4... mais ce n'est pas suffissant !

    Si l'édition des liens entre les classes se fait à l'exécution, le compilateur les vérifies à la compilation (c'est ce qui te permet d'avoir une erreur si une classe ou une méthode n'existe pas).

    Ainsi si tu te contente de changer le "compiler compliance" tu pourras très bien continuer à utiliser des méthodes et classes de Java 6 sans avoir d'erreur (avec une JVM 6) mais qui provoqueront bien une exception lors de l'exécution avec une JVM 1.4...


    Bref je conseille fortement d'utiliser un JRE/JDK correspondant à la version minimum de compatibilité souhaité, sous peine d'éviter de mauvaise surprise lors du déploiement

    a++

  9. #9
    Membre expert
    Avatar de Janitrix
    Inscrit en
    Octobre 2005
    Messages
    3 391
    Détails du profil
    Informations forums :
    Inscription : Octobre 2005
    Messages : 3 391
    Points : 3 401
    Points
    3 401
    Par défaut
    A bon ? Moi, ça m'a toujours fait des erreurs, notamment lors que j'utilisais les Generics qui sont apparus en 1.5, en 1.4 Eclipse criait qu'il y avait un truc bizarre dans toutes mes classes, et il voulait pas compiler.

  10. #10
    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 Janitrix
    A bon ? Moi, ça m'a toujours fait des erreurs, notamment lors que j'utilisais les Generics qui sont apparus en 1.5, en 1.4 Eclipse criait qu'il y avait un truc bizarre dans toutes mes classes, et il voulait pas compiler.
    Mais les Generics ne sont pas des classes ou méthodes mais une syntaxe du langage


    En fait changer le "compiler compliance level" permet principalement 2 choses :
    • De générer un bytecode qui respectent les spécifications du bytecode, afin que le code puisse s'exécuter sur la version indiqué (cela correspond à l'option -target de javac).
    • Utiliser les spécifications du langage de la version sélectionné pour la compilation. Ainsi par exemple enum est un mot clef dans Java 5 mais pas dans les versions précédente. Pareil pour assert dans Java 1.4...

      C'est l'équivalent de l'option -source de javac. Bref il ne s'agit principalement que d'une vérification syntaxique du code (donc c'est normal que cela génère une erreur sur les Generics).


    Toutefois, le compilateur utilise son CLASSPATH pour vérifier la cohérence des liens entre les classes (lequel contient le rt.jar de la JVM qui contient les classes standard). Or si ce CLASSPATH ne correspond pas à la version cible tu peux avoir des surprises puisque le compilateur ne peut pas savoir dans quelle version est apparut telle classe ou telle méthode.


    Si tu prends le code suivant :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    	public static void main(String[] args) {
     
    		String str = "Hello Man !";
     
    		str = str.replace("Man", "World");
     
    		System.out.println(str);
     
    	}
    Et que tu changes le "compiler level" en 1.4 tu n'auras pas d'erreur ni à la compilation ni à l'exécution (avec une JVM > 1.5).
    Or si tu exécutes cela avec une JVM 1.4 cela plantera. Et si tu le compiles avec un vrai JDK 1.4 tu obtiendras une belle erreur !!!

    En effet la méthode replace() n'existe pas dans le JDK 1.4 (ou en tout cas pas comme cela puisqu'elle prend deux char en paramètre), mais le compilateur a quand même fait le lien puisque pour lui elle existait...


    Bref il faut que le compilateur et le code des classes natifs soit cohérent...

    a++

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

Discussions similaires

  1. Réponses: 3
    Dernier message: 09/04/2010, 09h18
  2. Compatibilité pg_dump avec une version antérieure.
    Par Empty_body dans le forum PostgreSQL
    Réponses: 2
    Dernier message: 22/01/2007, 17h15
  3. Réinstallez version antérieur à IE7 ? :(
    Par WatzaKamikaze dans le forum Outils
    Réponses: 5
    Dernier message: 27/11/2006, 11h36
  4. Réponses: 2
    Dernier message: 02/11/2005, 09h52
  5. [WSAD]upgrader la version du complateur java
    Par mlequim dans le forum Eclipse Java
    Réponses: 2
    Dernier message: 29/07/2005, 21h19

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