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 :

Compatibilité : Java SE 7.0 - OpenJDK 7.0 - JVM Mac ?


Sujet :

Java

  1. #1
    Membre habitué

    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2002
    Messages
    207
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : Suisse

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Septembre 2002
    Messages : 207
    Points : 133
    Points
    133
    Par défaut Compatibilité : Java SE 7.0 - OpenJDK 7.0 - JVM Mac ?
    Bonjour,

    Je développe en Java depuis peu de temps et j'ai quelques questions basiques par rapport à Java 7.
    Je travaille essentiellement sur Mac OS X (Lion).

    J'ai lu sur ce site que la nouvelle version de Java allait sortir mais qu'elle ne serait certainement pas disponible sous Mac (en tous cas pas tant qu'Apple s'occupe de fournir la machine virtuelle).

    J'ai en parallèle découvert l'existence de OpenJDK. Je vous pose donc cette question :
    Est-il possible de développer une application avec OpenJDK 7.0 ou Java SE 7.0 et l'exécuter sur une machine virtuelle qui n'est pas Java 7.0 (sur un Mac par exemple) ?
    Faut-il installer une machine virtuel spéciale pour faire tourner une application développée avec OpenJDK ? Ou la machine virtuelle d'origine suffit ?

    Est-ce qu'une application compilée avec un JDK 7.0 fonctionne sur une machine virtuelle d'une version inférieur ?

    Enfin bref, je ne comprends pas tellement la compatibilité entre les versions JDK et les versions JVM et idem avec OpenJDK.

    D'avance merci pour votre aide.

  2. #2
    Membre éclairé Avatar de JoeChip
    Profil pro
    Inscrit en
    Septembre 2008
    Messages
    536
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Septembre 2008
    Messages : 536
    Points : 803
    Points
    803
    Par défaut
    Les fonctions spécifiques à Java 7 ne pourront être utilisée que par Java 7 ... donc ni par une JVM de version inférieure, ni par la JVM de mac, ni par OpenJDK 6 etc ...

    "Faut-il installer une machine virtuel spécial pour faire tourner une application développer avec OpenJDK ? ou la machine virtuel d'origine suffit ?"

    Qu'appelles-tu "la machine virtuelle d'origine" ? En fait il vaut mieux développer sur la JDK "officielle", à mon avis, quitte à tester sur OpenJDK.

    En principe OpenJDK est sensé être complètement compatible avec Java 6 ; en pratique ça ne l'est pas tout à fait, notamment pour une partie de la crypto, et aussi en raison de bugs différents...

    Il y a moyen d'écrire de façon à pouvoir détecter et gérer la version de Java installée, mais ça complique fortement les choses ; il est plus facile de ne pas passer trop vite à une nouvelle version, de façon à ne pas utiliser des trucs incompatibles avec des versions inférieures.

    Il n'est donc pas urgent de passer à Java 7, surtout si tu débutes... Il faut savoir que mac est passé il n'y a pas très longtemps à Java 6, donc avant qu'ils passent à 7, de l'eau va couler dans les cafetières ... En plus, il y aura moins de bugs plus tard, quand plein de gens pressés auront testé

  3. #3
    Membre habitué

    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2002
    Messages
    207
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : Suisse

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Septembre 2002
    Messages : 207
    Points : 133
    Points
    133
    Par défaut
    Déjà merci de la réponse.

    Je me demandais en fait, si le code (bytecode) généré par le compilateur de la version 7, était compatible avec une machine virtuelle de la version 6. Je pensais que peut-être les nouveautés de la version 7 n’avaient d’influence que sur la syntaxe java. Mais c’était visiblement une erreur de ma part.
    Donc pour chaque version de java, il y a JDK et une JVM qui corresponde.
    En fait, je m’inquiétais un peu car j’ai lu que Java 7.0 ne serait certainement pas disponible sur mac. Dès lors, je me disais que l’application que je développe ne serait surement pas compatible sur toutes les plateformes. Mais du moment que je reste en Java 6, mon code sera compatible sur toutes les plateformes a partir de Java 6 à plus élevé.

    Par contre, un code compilé en Java 7.0 (JDK), sera-t-il compatible avec une JVM java 6.0 ou même 5.0, s’il n’utilise pas les nouveautés de Java 7.0 ?

    Qu'appelles-tu "la machine virtuelle d'origine" ? En fait il vaut mieux développer sur la JDK "officielle", à mon avis, quitte à tester sur OpenJDK.
    En fait, je ne comprends pas tellement l’utilité de OpenJDK (en dehors d’avoir une version de java qui soit open source) et son fonctionnement par rapport à Java disons « standard ». Admettons que je développe et compile une application avec le JDK java standard, sera-t-il possible de le faire tourner sur une JVM OpenJDK ?

    L’inverse est-t-il aussi possible ?

  4. #4
    Membre actif
    Profil pro
    Inscrit en
    Décembre 2008
    Messages
    127
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2008
    Messages : 127
    Points : 208
    Points
    208
    Par défaut
    Bonjour,

    Si tu veux générer du pseudo code compatible 1.6 avec le compilateur de la version 1.7, il te suffit de préciser l'option "target" :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    javac -target 1.6 MaClasse.java
    Va générer du code compatible avec les jvm 1.6 et te dira en plus s'il y a un conflit avec la version cible. Ceci pour les jdk sun/oracle, pour openjdk je ne connais pas.

    Le code généré devrait être compatible avec la jvm 1.6 de sun/oracle et peut-être aussi avec la jvm openjdk 1.6 mais pour cette dernière il faut tester.

    Cordialement

  5. #5
    Membre chevronné
    Inscrit en
    Mai 2006
    Messages
    1 364
    Détails du profil
    Informations forums :
    Inscription : Mai 2006
    Messages : 1 364
    Points : 1 984
    Points
    1 984
    Par défaut
    Alors, petit rappel rapide sur Java.
    Un des objectifs de ce langage est d'etre multiplateforme. Comme selon les machines/OS, les executables binaires sont différents, il faudrait générer 1 executable / plateforme cible. Pour éviter cela, un compilateur Java va générer un bytecode générique qui sera interprété par une machine virtuelle. Ainsi, c'est la machine virtuelle qui sera l'executable différents selon la machine / OS mais le bytecode java sera toujours le meme.

    Ensuite, en ce qui concerne les versions de Java, une machine virtuelle ne peut faire fonctionner que des executables générée pour elle ou pour une version inférieure (donc une machine virtuelle 6.0 ne pourra pas faire fonctionner un programme compilé en 7.0). Ceci dit, comme l'a indiqué semaphore, il est possible de compiler en une version inférieure.

    Pour finir, en ce qui concerne les différentes machines virtuelles, elles sont toutes sensées pouvoir faire fonctionner un bytecode java de version egale ou inférieure à celle-ci. Ceci dit, comme tout programme informatique, les machines virtuelles peuvent avoir des bugs.
    C'est pour ca que, comme ca a déja été précisé, je te conseillerais de developper sur une version JDK officielle car si ton programme est orienté grand public, c'est ce qu'auront la majorité des utilisateurs...

  6. #6
    Expert éminent sénior
    Avatar de tchize_
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2007
    Messages
    25 482
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : Belgique

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2007
    Messages : 25 482
    Points : 48 804
    Points
    48 804
    Par défaut
    Bienvenue dans le monde de mac, tu comprend maintenant pourquoi j'ai revendu mon portable mac qui avait 6h d'autonomies pour acheter un pc qui plafonne à 1h20. Mac et le développement java, c'est pas vraiment compatible. Il y a de fortes chances que le support de java 7 arrivera seulement avec un version ultérieure de mac os X. Donc pour le support des client machines qui n'ont pas upgradé mac os X, tu l'aura dans l'os, si je puis dire. Open jdk ne te sera d'aucun recours, pas de portage mac que je sache.

    J'entrevois pour toi deux possibilités
    1) te contenter de java 6 voir même seulement java 5
    2) dual boot linux ou windows (puisque maintenant mac c'est du intel)


    Pour info, ce n'est pas consellé de jouer avec les -target. Genre utiliser java 7 pour faire une compilation visant java 6. Même si les .class seront compatible et les nouveautés du language seront refusées, il n'en reste pas moins que le compilateur utilisera l'api java 7 avec toutes ses nouvelles classes / méthodes.

  7. #7
    Expert éminent sénior Avatar de Uther
    Homme Profil pro
    Tourneur Fraiseur
    Inscrit en
    Avril 2002
    Messages
    4 635
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Pyrénées Orientales (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Tourneur Fraiseur

    Informations forums :
    Inscription : Avril 2002
    Messages : 4 635
    Points : 15 838
    Points
    15 838
    Par défaut
    Citation Envoyé par Seboubou86 Voir le message
    Est-il possible de développez une application avec OpenJDK 7.0 ou Java SE 7.0 et l'exécuter sur une machine virtuelle qui n'est pas Java 7.0 (sur un mac par exemple) ?
    C'est déconseillé, le code compilé par défaut ne sera pas exécutable avec une JRE inférieur à Java 7

    Citation Envoyé par Seboubou86 Voir le message
    Je me demandais en fait, si le code (bytecode) généré par le compilateur de la version 7, était compatible avec une machine virtuelle de la version 6. Je pensais que peut-être les nouveautés de la version 7 n’avaient d’influence que sur la syntaxe java. Mais c’était visiblement une erreur de ma part.
    Le bytecode peut légèrement changer d'une version a l'autre. Par exemple en Java 7 il y a une nouvelle instruction bytecode 'invokedynamic'. Le numéro de version des fichiers .class a donc été augmenté (de 50.00 à 51.00).
    Un jre java 6 refusera d'executer un fichier class avec une version supérieure à 50.00

    Citation Envoyé par Seboubou86 Voir le message
    Par contre, un code compilé en Java 7.0 (JDK), sera-t-il compatible avec une JVM java 6.0 ou même 5.0, s’il n’utilise pas les nouveautés de Java 7.0 ?
    Par défaut non.
    Avec l'option -target 1.6 , les fichier class générés auront un numéro de version 50.00 compatible avec un JRE Java 6. Mais tout appel à une classe ou méthode introduite dans l'API Java 7 se soldera par une exception au moment de l’exécution.
    Autant donc utiliser un vrai JDK 1.6 ce qui empêchera un tel programme de compiler.

    Citation Envoyé par Seboubou86 Voir le message
    Faut-il installer une machine virtuel spécial pour faire tourner une application développer avec OpenJDK ? ou la machine virtuel d'origine suffit ?
    En théorie, en Java le code compilé par n'importe quel compilateur(Sun, OpenJDK, Apple, IBM ...) peut être exécute par n’importe quelle JVM(Sun, OpenJDK, Apple, IBM ...) certifiée avec un numéro de version identique ou supérieur.
    Même si en général cette règle est plutôt bien respecté en JavaSE (en JavaME c'est une horreur), dans la pratique, il veut mieux vérifier.

    Citation Envoyé par Seboubou86 Voir le message
    Est-ce qu'une application compilée avec un JDK 7.0 fonctionne sur une machine virtuel d'une version inférieur ?
    Non. Sauf si target 1.6(comme expliqué ci-dessus)

    Citation Envoyé par Seboubou86 Voir le message
    Enfin bref, je comprend pas tellement la compatibilité entre les version JDK et les version JVM, et idem avec OpenJDK. J'espère que vous pourrez m'aider.
    Open JDK est un projet open source contenant une implémentation de référence des outils de dev et de la machine virtuelle Java.
    Il sert de base a Sun pour fabriquer son JDK et son JRE. Mais il n'a pas de version complètement utilisable et certifiée pour le moment, sauf sous Linux.
    La situation ne semble pas sur le point de changer.

  8. #8
    Membre habitué

    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2002
    Messages
    207
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : Suisse

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Septembre 2002
    Messages : 207
    Points : 133
    Points
    133
    Par défaut
    Merci beaucoup pour toutes c'est informations, vous avez répondu à merveille à ma question.

    Je vais continuer à développez avec le JDK 6.0 et j'effectuerais peut-être un test avec OpenJDK. Afin d'éprouver la compatibilité de mon code.

    Citation Envoyé par tchize_
    Bienvenue dans le monde de mac, tu comprend maintenant pourquoi j'ai revendu mon portable mac qui avait 6h d'autonomies pour acheter un pc qui plafonne à 1h20.
    Depuis que j'ai passé sous mac il y a environ une année et demi, je ne vois pas comment je pourrais faire marche arrière^^. Je serais cependant contraint de mettre en place une machine sous Windows afin d'effectuer des essais sous une autre plateformes.

    Merci encore d'avoir pris le temps de me répondre.

  9. #9
    Expert éminent sénior
    Avatar de tchize_
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2007
    Messages
    25 482
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : Belgique

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2007
    Messages : 25 482
    Points : 48 804
    Points
    48 804
    Par défaut
    Je suis resté environ 2 ans sous mac os x. Après avoir attendu pendant des mois le portages de java 5 sous mac et avoir découvert lors de sa mise à disponibilité que, ho joie, il faudrait que je débourse la modique somme de 150€ pour upgrader mon OS, mon portable a pris la direction de ebay


    Ca et pas mal d'autres choses m'ont fait comprendre que mac os x était une plateforme anti java, appel préférant promouvoir xcode, objective C et cocoa

  10. #10
    Membre habitué

    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2002
    Messages
    207
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : Suisse

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Septembre 2002
    Messages : 207
    Points : 133
    Points
    133
    Par défaut
    Je comprends ton point de vue mais je trouve qu'il ont fait un gros effort sur le prix de OS X Lion (bien que cela ne soit pas une très grosse révolution par rapport à Snow Leopard). Espérons qu'ils continueront sur cette lancée.

    En même temps, s'ils abandonnent le développement de la machine virtuelle et que Oracle développe eux-même la JVM pour Mac, cela pourrait être plus rapide pour avoir les dernières versions.

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

Discussions similaires

  1. Compatibilité Java EE 6, Glassfish v3, Richfaces et Facelets
    Par methodman225 dans le forum Glassfish et Payara
    Réponses: 1
    Dernier message: 19/04/2010, 13h36
  2. compatibilité Java 1.3 et 1.6
    Par WidgetZorg dans le forum Général Java
    Réponses: 7
    Dernier message: 30/06/2009, 09h50
  3. [compatibilité] java incompatible entre versions ?
    Par d_token dans le forum Débuter avec Java
    Réponses: 21
    Dernier message: 14/09/2006, 16h36
  4. [INFO][ANT] Compatibilité java 5
    Par SEMPERE Benjamin dans le forum ANT
    Réponses: 6
    Dernier message: 23/09/2005, 19h44
  5. [Serialisation]compatibilite java 1.4 et 1.5
    Par akrom dans le forum Général Java
    Réponses: 2
    Dernier message: 10/04/2005, 10h46

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