Basculer entre Java 7 et 8 sous OS X

25

J'ai installé Java-8. Maintenant, je voulais revenir à Java-7 par défaut, donc je tape ...

/usr/libexec/java_home -v 1.7.0_40 --exec java -version
/usr/libexec/java_home -v 1.7.0_40 --exec javac -version

Mais je vois toujours ...

java -version
java version "1.8.0-ea"
Java(TM) SE Runtime Environment (build 1.8.0-ea-b108)
Java HotSpot(TM) 64-Bit Server VM (build 25.0-b50, mixed mode)

Cela fonctionne ...

export JAVA_HOME=/Library/Java/JavaVirtualMachines/jdk1.7.0_40.jdk/Contents/Home

Mais j'aimerais une solution plus permanente.

Quelqu'un voit ce que je fais mal?

Jackie
la source

Réponses:

50

Changez facilement de version

  1. Installez les versions 1.6, 1.7, 1.8 dans n'importe quel ordre. Remarque: je crois que le dernier installé détermine celui qui sera utilisé pour les plugins de navigateur, je ne vais pas me soucier de changer ceux ci-dessous.

  2. Ensuite, ajoutez à votre ~/.bashrcou ~/.bash_profile, ou n'importe où:

    #!/bin/bash
    export JAVA_HOME=$(/usr/libexec/java_home -v 1.7)
    
    setjdk() {
       export JAVA_HOME=$(/usr/libexec/java_home -v $1)
    }
    
  3. Vérifiez la modification via java -version

    $ java -version
    java version "1.7.0_51"
    Java(TM) SE Runtime Environment (build 1.7.0_51-b13)
    Java HotSpot(TM) 64-Bit Server VM (build 24.51-b03, mixed mode)
    
    $ setjdk 1.6
    $ java -version
    java version "1.6.0_65"
    Java(TM) SE Runtime Environment (build 1.6.0_65-b14-462-11M4609)
    Java HotSpot(TM) 64-Bit Server VM (build 20.65-b04-462, mixed mode)
    
    $ setjdk 1.8
    $ java -version
    java version "1.8.0"
    Java(TM) SE Runtime Environment (build 1.8.0-b132)
    Java HotSpot(TM) 64-Bit Server VM (build 25.0-b70, mixed mode)
    

Évidemment, le changement ne concerne que la durée du shell. Mais vous pouvez voir où vous pouvez le définir globalement maintenant.

nkadwa
la source
2
Un problème: JDK7 refuse d'installer si vous avez déjà JDK8. Il vous pointe vers une URL sur oracle.com pour plus d'informations qui vous donne un 404. Et, bien sûr, les instructions de désinstallation pour JDK8 ne fonctionnent pas du tout, alors maintenant je suis fondamentalement perdu.
Eric W
1
utilisez simplement jenv jenv.be
madzohan
9

Vous pouvez utiliser jEnv ( http://www.jenv.be/ ), qui est "un outil en ligne de commande pour vous aider à oublier comment définir la variable d'environnement JAVA_HOME pour basculer entre les différentes versions du JDK" (extrait de la page d'accueil du projet ).

Si vous connaissez Ruby, JEnv, c'est comme utiliser RVM ou rbenv. Il vous aide à gérer plusieurs JDK différents installés sur votre machine sans avoir à écrire votre propre script pour passer d'un JDK à un autre. Vous pouvez modifier la version actuelle de Java en fonction par exemple du répertoire en cours ou en fonction d'un fichier de configuration.

Pietro Di Bello
la source
Pouvez-vous développer davantage sur ce sujet? Cela ressemble à un commentaire, pas à une réponse.
Austin T French
Si vous êtes familier avec Ruby, c'est comme utiliser RVM ou rbenv pour changer la version actuelle de Java basée par exemple sur le répertoire courant ou basée sur un fichier de configuration. Si vous allez sur la page d'accueil de JENV, il y a un bon tutoriel.
Pietro Di Bello
Ce message devrait être destiné à tous ceux qui recherchent des réponses, donc plus de détails dans le message devraient être considérés ici comme une réponse complète et bonne.
Austin T French
J'ai ajouté plus d'informations et développé un peu la réponse ... j'espère que cela semble mieux maintenant. Merci pour les commentaires.
Pietro Di Bello
4

Vous ne pouvez pas basculer entre les versions Java. Dans la documentation, vous voyez:

Un seul JRE peut être installé à la fois. Le système n'installera pas de JRE dont la version est inférieure à la version actuelle. Si vous souhaitez installer une version inférieure de JRE, désinstallez d'abord la version actuelle.

Si vous souhaitez revenir à une version antérieure, vous devez désinstaller Java 8.

Christian Wörz
la source
grrr merci mais cela n'aide pas mon avis sur OSX.
Jackie
4
@Jackie: En fait, cela n'a pas grand-chose à voir avec OS X mais plus avec Oracle. À l'époque où Apple maintenait le JDK pour OS X, il était parfaitement et facile de basculer entre les versions Java actives. Veuillez blâmer Oracle pour son installateur de merde et non OS X.
Alessandro Vermeulen
@AlessandroVermeulen avec tout le respect que je vous dois, ce n'est pas le "programme d'installation". Ensuite, je pouvais "l'installer" comme je le voulais avec le binaire unix. Et puis il y avait les anciennes versions d'OSX où il était même nécessaire de démarrer. À mon humble avis, ce sont absolument les conventions utilisées dans OSX qui causent le problème.
Jackie
4
Il y a plusieurs JDK installés correctement sur ma machine, c'est le plugin de préférence d'Oracles qui ne permet pas de passer de 1.8 à 1.7, à partir de la ligne de commande avec un chemin complet, ils fonctionnent tous avec succès. / usr / libexec / java_home -V les répertorie tous - et le volet de préférences Java 7 a permis le choix des JRE Java 7
user151019
0

Je veux compléter la réponse de @ nkadwa. Sa suggestion a fonctionné, mais seulement après avoir également modifié le lien symbolique pour CurrentSDK. Voici donc le code modifié:

setjdk() {
    export JAVA_HOME=$(/usr/libexec/java_home -v $1)
    sudo ln -nsf ${JAVA_HOME%/*} /System/Library/Frameworks/JavaVM.framework/Versions/CurrentJDK
}
setjdk 1.8
imdahmd
la source