Mac OS X et plusieurs versions de Java

333

Comment puis-je installer un java supplémentaire sur MacOS? J'ai installé jdk8 et cela fonctionne bien. mais maintenant j'ai besoin d'une installation jdk7 à des fins de développement. Lorsque j'essaie d'installer l'ancienne version via le fichier DMG, je reçois un avertissement, indiquant qu'une version plus récente de Java est déjà installée et que le programme d'installation se ferme.

/usr/libexec/java_home -verbose
Matching Java Virtual Machines (1):
    1.8.0_20, x86_64:   "Java SE 8" /Library/Java/JavaVirtualMachines/jdk1.8.0_20.jdk/Contents/Home

   /Library/Java/JavaVirtualMachines/jdk1.8.0_20.jdk/Contents/Home

Comment installer jdk7 en plus de celui-ci?

Merci
Dakky

Dakkar
la source

Réponses:

493

La façon la plus simple de gérer plusieurs versions java sur Mac est d'utiliser Homebrew.

Et à l'intérieur Homebrew, utilisez:

  • homebrew-cask installer les versions de java
  • jenv gérer les versions installées de java

Comme vu sur http://hanxue-it.blogspot.ch/2014/05/installing-java-8-managing-multiple.html , ce sont les étapes à suivre.

  1. installer homebrew
  2. installer homebrew jenv
  3. installer homebrew-cask
  4. installer une version java spécifique en utilisant cask (voir le paragraphe "versions homebrew-cask" ci-dessous)
  5. ajouter cette version pour jenv pour la gérer
  6. vérifier que la version est correctement gérée par jenv
  7. répétez les étapes 4 à 6 pour chaque version de java dont vous avez besoin

versions homebrew-cask

Ajoutez le homebrew/cask-versionsrobinet à l'homebrew en utilisant:

brew tap homebrew/cask-versions

Ensuite, vous pouvez consulter toutes les versions disponibles:

brew search java

Ensuite, vous pouvez installer la ou les versions que vous aimez:

brew cask install java7
brew cask install java6

Et ajoutez-les pour qu'ils soient gérés par jenv comme d'habitude.

jenv add <javaVersionPathHere>

Je pense que c'est la manière la plus propre et la plus simple de s'y prendre.


Une autre chose importante à noter, comme mentionné dans Mac OS X 10.6.7 Java Path Current JDK confus :

Pour différents types de JDK ou d'installations, vous aurez des chemins différents

Vous pouvez vérifier les chemins des versions installées à l'aide de /usr/libexec/java_home -V, voir Comment puis-je vérifier si le JDK Java est installé sur Mac?

Sur Mac OS X Mavericks, j'ai trouvé ce qui suit:

1) JRE intégré par défaut: /Library/Internet\ Plug-Ins/JavaAppletPlugin.plugin/Contents/Home

2) JDK téléchargés depuis Apple: /System/Library/Java/JavaVirtualMachines/1.6.0.jdk/Contents/Home/

3) JDK téléchargés depuis Oracle: /Library/Java/JavaVirtualMachines/jdk1.8.0_11.jdk/Contents/Home


Ressources

Adrien Be
la source
16
Il serait bon de mentionner que homebrew-cask peut être installé avec une commande brew install caskroom/cask/brew-caskau lieu d' brew install caskun plugin Emacs.
Unnawut
7
J'ai rencontré quelques problèmes lors de la mise en œuvre de cette solution, dont l'un était de jenvrenvoyer l' No such file or directory.erreur. Ce wiki a aidé à le résoudre pour moi. github.com/gcuisinier/jenv/wiki/Trouble-Shooting
juil
10
J'ajouterais que toutes les installations java seraient dans /Library/Java/JavaVirtualMachines/et lorsque jenv addvous les ajoutez avec vous ajoutez un chemin ressemblant à ceci /Library/Java/JavaVirtualMachines/[specific-version]/Contents/Home/. À votre santé!
Nikolay Tsenkov
14
Depuis le 23 juin 2017, j'ai couru brew cask search java7mais aucun Cask n'a été trouvé pour "java7".
Mingliang Liu
4
@MingliangLIU ouais moi aussi ... ça craint vraiment. J'ai trouvé des problèmes à ce sujet sur Github où ils ont mentionné des solutions, mais je n'ai pas pu le faire fonctionner. J'ai donc fini par devoir le faire "de manière manuelle" via les pages Web "télécharger et installer les versions Java" d'Apple et d'Oracle. Ensuite, utilisez /usr/libexec/java_home -Vpour vérifier les chemins où ils ont été installés.
Adrien Be
304

Désinstallez jdk8, installez jdk7, puis réinstallez jdk8.

Mon approche pour basculer entre eux (en .profile):

export JAVA_7_HOME=$(/usr/libexec/java_home -v1.7)
export JAVA_8_HOME=$(/usr/libexec/java_home -v1.8)
export JAVA_9_HOME=$(/usr/libexec/java_home -v9)

alias java7='export JAVA_HOME=$JAVA_7_HOME'
alias java8='export JAVA_HOME=$JAVA_8_HOME'
alias java9='export JAVA_HOME=$JAVA_9_HOME'

#default java8
export JAVA_HOME=$JAVA_8_HOME

Ensuite, vous pouvez simplement taper java7ou java8dans un terminal pour changer de version.

(édition: mise à jour pour ajouter l'amélioration de Dylans pour Java 9)

Vegard
la source
18
Jusqu'à présent, c'est la meilleure option pour moi. peut facilement passer à n'importe quelle version avec juste une simple commande "java8" ou "java7". Merci pour l'aide
MMHMasud
4
Génial ! :) Et pour d'autres comme moi, vous pouvez utiliser: ls / Library / Java / JavaVirtualMachines pour voir quelles versions sont disponibles. Ensuite, vous pouvez activer différentes versions 1.8.x. Et vous devez également ajouter l'exportation PATH = $ JAVA_HOME / bin: $ PATH
Nico
4
Merci pour celui-ci. Je voulais juste mentionner que j'ai réussi à le faire en installant jdk7 après jdk8 (il n'est pas nécessaire de désinstaller jdk8).
Titus
6
Je ne sais pas pourquoi j'ai perdu mon temps avec jenv, car cela fonctionne, et n'encombre pas le démarrage de votre shell de 0,5s avec jenv init.
cvakiitho
2
Si vous essayez de faire fonctionner java 9 de cette manière, l'argument de version de java_home pour java 9 devrait simplement être 9par exempleexport JAVA_9_HOME=$(/usr/libexec/java_home -v9)
Dylan Nissley
125

Pour macOS Sierra 420

Ce guide a été bricolé à partir de diverses sources (réponses ci-dessus ainsi que d'autres messages) et fonctionne parfaitement.

0. Si ce n'est pas déjà fait, installez homebrew.

Voir https://brew.sh/

1. Installez jenv

brew install jenv

2. Ajoutez jenv au profil bash

if which jenv > /dev/null; then eval "$(jenv init -)"; fi

3. Ajoutez jenv à votre chemin

export PATH="$HOME/.jenv/shims:$PATH"

4. Appuyez sur "caskroom / versions"

FYI: "Tap" étend la liste des référentiels disponibles qu'il peut installer, au-delà de la liste par défaut des référentiels disponibles.

brew tap caskroom/versions

5. Installez la dernière version de java

brew cask install java

6. Installez java 6 (ou 7 ou 8 selon vos besoins)

brew cask install java6
#brew cask install java7
#brew cask install java8

? Fermez et redémarrez peut-être Terminal pour qu'il voit toutes les nouvelles versions ENV qui ont été configurées.

7. Examiner les installations

Toutes les versions Java sont installées ici: /Library/Java/JavaVirtualMachinesjetons un œil.

ls -la /Library/Java/JavaVirtualMachines

8. Ajoutez chaque chemin d'accès à jenv un par un.

Nous devons ajouter "/ Contents / Home" au dossier de version. AVERTISSEMENT: Utilisez les chemins réels sur votre machine ... ce ne sont que Exemple d »

jenv add /Library/Java/JavaVirtualMachines/1.6.0___EXAMPLE___/Contents/Home
jenv add /Library/Java/JavaVirtualMachines/jdk-9.0.1.jdk___EXAMPLE___/Contents/Home

9. Vérifiez si jenv s'est bien enregistré

jenv versions

10. Définissez la version java à utiliser (globalement)

Où XX correspond à l'un des éléments de la liste des versions ci-dessus.

jenv global XX

Vérifier la version java

java -version

Vérifier les versions jenv

Doit également indiquer la version actuelle utilisée avec un astérisque.

jenv versions

TERMINÉ


Référence future rapide

Pour changer les versions de Java

... Voir la liste des versions java disponibles

jenv versions

... puis, où XX correspond à un élément de la liste ci-dessus

jenv global XX
bob
la source
1
De plus, redémarrez votre terminal après lebrew cask install java*
squeeish
1
Explication claire et intéressante étape par étape.
Ritesh Singh
1
Erreur: Cask 'java8' n'est pas disponible: aucun Cask portant ce nom n'existe.
Alexey Sh.
6
java8 / 9/10 ne sont plus disponibles en fûts. Essayez ceci à la place: "brew cask install adoptopenjdk / openjdk / adoptopenjdk8"
supi
1
brew tap caskroom/versionsdevrait êtrebrew tap homebrew/cask-versions
Vyacheslav Cotruta
42

SDKMAN! est un excellent outil pour utiliser plusieurs versions de Java, Gradle, Groovy, Kotlin et d'autres outils JVM sur Mac OS. Les documents d'installation et d'utilisation sont clairement sur le site principal.

(Je n'ai aucune affiliation, juste un utilisateur heureux).

À titre d'exemple d'utilisation, si je tape ce qui suit dans une fenêtre de terminal, il y a une liste des versions du SDK Java disponibles (éditées par souci de concision):

$ sdk list java
Available Java Versions
   + 9ea170                                                                        
 > + 8u131                                                                         
     7u141-zulu                     

+Indique ici que la version est installée. >indique quelle version est actuellement utilisée. Pour installer une version:

$ sdk install java 7u141-zulu

Pour utiliser une version dans cette fenêtre de terminal:

$ sdk use java 9ea170
Michael Easter
la source
sdkman prend en charge les versions commençant par java 1.7. Si vous souhaitez utiliser java 1.6, cette solution peut ne pas vous convenir.
Aykut Akıncı
sdkman est génial, mais ils ne prennent pas en charge les versions spécifiques d'une version. Par exemple, Datastax Dev Center ne fonctionne qu'avec 1.8.0_151 mais je ne peux pas spécifier cela avec sdkman. J'espère qu'ils ajouteront plus de versions.
Eduardo Dennis
Si vous avez une version locale, je pense que vous pouvez l'installer dans SDKMan - sdkman.io/usage#localversion (mais je ne l'ai pas essayé)
Michael Easter
6

Comme on le trouve sur ce site Web Commençons donc par installer jEnv

  1. Exécutez ceci dans le terminal

    brew install https://raw.github.com/gcuisinier/jenv/homebrew/jenv.rb
  2. Ajouter jEnv au profil bash

    if which jenv > /dev/null; then eval "$(jenv init -)"; fi
  3. Lors de la première installation de jEnv, aucun JDK ne lui sera associé.

    Par exemple, je viens d'installer JDK 8 mais jEnv ne le sait pas. Pour vérifier les versions Java sur jEnv

    Pour le moment, il n'a trouvé que la version Java (jre) sur le système. La *montre la version actuellement sélectionnée. Contrairement à rvm et rbenv, jEnv ne peut pas installer JDK pour vous. Vous devez installer JDK manuellement à partir du site Web d'Oracle.

  4. Installez JDK 6 à partir du site Web d'Apple. Cela installera Java dans /System/Library/Java/JavaVirtualMachines/. La raison pour laquelle nous installons Java 6 à partir du site Web d'Apple est que SUN n'a pas proposé JDK 6 pour MAC, donc Apple a créé / modifié sa propre version de déploiement.

  5. De même, installez JDK7 et JDK8.

  6. Ajoutez des JDK à jEnv.

    JDK 6:

    JDK 7: http: //javahabi@javahabit.com/wp-content/uploads/2015/03/img_5518ab9bc47d4.png

    JDK 8: http: //javahabi@javahabit.com/wp-content/uploads/2015/03/img_5518abb2c1217.png

  7. Vérifiez les versions de java installées à l'aide de jenv

    http: //javahabi@javahabit.com/wp-content/uploads/2015/03/img_5518abceb0deb.png

  8. Nous avons donc maintenant 3 versions de Java sur notre système. Pour définir une version par défaut, utilisez la commande

    jenv local <jenv version>

    Ex - Je voulais que Jdk 1.6 démarre IntelliJ

    jenv local oracle64-1.6.0.65
  9. vérifier la version java

    java -version http: //javahabi@javahabit.com/wp-content/uploads/2015/03/img_5518abe376dd0.png

C'est tout. Nous avons maintenant plusieurs versions de java et nous pouvons basculer facilement entre elles. jEnv a également d'autres fonctionnalités, telles que des wrappers pour Gradle, Ant, Maven, etc., et la possibilité de définir des options JVM globalement ou localement. Consultez la documentation pour plus d'informations.

Dinesh Arora
la source
5
Ne mettez pas d'images de vos commandes, il est difficile de les copier / coller. Pour mettre des commandes en surbrillance, utilisez les backticks "` "pour un seul mot ou une commande courte, ou indentez votre commande avec 4 espaces sur sa propre ligne (ou des multiples de 4 dans les listes).
Seki
1
Merci Seki. J'avais du mal à publier des images et j'ai passé beaucoup de temps à essayer de formater, mais je n'ai pas pu le faire correctement. Merci d'avoir partagé les informations sur les backticks.
Dinesh Arora
4
Je pense que vous avez peut-être utilisé la même image quatre fois.
Ellen Spertus,
5

Je trouve récemment ce gestionnaire de versions Java appelé Jabba et l'utilisation est très similaire aux gestionnaires de versions d'autres langages comme rvm (ruby), nvm (nœud), pyenv (python), etc. Mac.

Après l'installation, il créera un répertoire dans ~ / .jabba pour mettre toutes les versions Java que vous installez. Il "Prend en charge l'installation d'Oracle JDK (par défaut) / Server JRE, Zulu OpenJDK (depuis 0.3.0), IBM SDK, Java Technology Edition (depuis 0.6.0) et à partir d'URL personnalisées.".

L'utilisation de base est répertoriée sur leur Github. Un résumé rapide pour commencer:

curl -sL https://github.com/shyiko/jabba/raw/master/install.sh | bash && . ~/.jabba/jabba.sh

# install Oracle JDK
jabba install 1.8 # "jabba use 1.8" will be called automatically  
jabba install 1.7 # "jabba use 1.7" will be called automatically 

# list all installed JDK's
jabba ls

# switch to a different version of JDK
jabba use 1.8
York Yang
la source
4

J'utilise Mac OS X 10.9.5. C'est ainsi que je gère plusieurs JDK / JRE sur ma machine lorsque j'ai besoin d'une version pour exécuter l'application A et utiliser une autre version pour l'application B.

J'ai créé le script suivant après avoir obtenu de l'aide en ligne.

#!bin/sh
function setjdk() {
  if [ $# -ne 0 ]; then
   removeFromPath '/Library/Java/JavaVirtualMachines/'
   if [ -n "${JAVA_HOME+x}" ]; then
    removeFromPath $JAVA_HOME
   fi
   export JAVA_HOME=/Library/Java/JavaVirtualMachines/$1/Contents/Home
   export PATH=$JAVA_HOME/bin:$PATH
  fi
 }
 function removeFromPath() {
  export PATH=$(echo $PATH | sed -E -e "s;:$1;;" -e "s;$1:?;;")
 }
#setjdk jdk1.8.0_60.jdk
setjdk jdk1.7.0_15.jdk

J'ai mis le script ci-dessus dans un fichier .profile. Ouvrez simplement le terminal, tapez vi .profile, ajoutez le script avec l'extrait ci-dessus et enregistrez-le. Une fois votre type de sortie terminé source .profile, cela exécutera votre script de profil sans que vous ayez à redémarrer le terminal. Tapez maintenant java -versionil devrait afficher 1.7 comme votre version actuelle. Si vous avez l'intention de le changer en 1.8, commentez la ligne setjdk jdk1.7.0_15.jdket décommentez la ligne setjdk jdk1.8.0_60.jdk. Enregistrez le script et exécutez-le à nouveau avec la commande source. J'utilise ce mécanisme pour gérer plusieurs versions de JDK / JRE lorsque je dois compiler 2 projets Maven différents qui nécessitent des versions java différentes.

ChaitanyaBhatt
la source
3

Jenv sur Mac Sierra:

si cela ne fonctionne pas après l'installation, effectuez cette correction de bogue pour ajouter l'exécutable Java au chemin

export PATH="$HOME/.jenv/shims:$PATH"

même si eval "$(jenv init -)"pourrait faire ce travail. La raison en est que le dossier / bin n'est plus là comme décrit dans sa page d'accueil, mais le dossier shim est utilisé comme / bin à la place.

  • Assurez-vous que ~ / .jenv est là
  • which java peut imprimer / Bibliothèque / ...
  • jenv global 1.8
  • shell jenv 1.8

Finalement, which javavous donne:

/Users/xxxx/.jenv/shims/java

CodeFarmer
la source
3

Dans le même esprit que @Vegard (léger):

  • Installez les JDK souhaités avec Homebrew
  • Mettez cette jdkfonction bash et une valeur par défaut dans votre.profile

    jdk() {
        version=$1
        export JAVA_HOME=$(/usr/libexec/java_home -v"$version");
        java -version
     }
    
    export JAVA_HOME=$(/usr/libexec/java_home -v11); # Your default version
  • puis, pour changer votre jdk, vous pouvez faire

     jdk 9
     jdk 11
     jdk 13

Basé sur https://github.com/AdoptOpenJDK/homebrew-openjdk .

hulius
la source
0

Voici une version plus sèche pour bash (basé sur la réponse de Vegard)

Remplacez 1.7 et 1.8 par les versions qui vous intéressent et vous obtiendrez un alias appelé «javaX»; où 'X' est la version java (7/8 dans l'extrait ci-dessous) qui vous permettra de changer facilement de version

for version in 1.7 1.8; do
    v="${version: -1}"
    h=JAVA_"$v"_HOME

    export "$h"=$(/usr/libexec/java_home -v $version)

    alias "java$v"="export JAVA_HOME=\$$h"
done
elad.chen
la source
0

Pour installer des versions plus récentes d'OpenJDK, j'utilise ceci. Exemple pour OpenJDK 14:

brew info adoptopenjdk
brew tap adoptopenjdk/openjdk
brew cask install adoptopenjdk14

Voir https://github.com/AdoptOpenJDK/homebrew-openjdk pour les informations actuelles.

Matthias Bohlen
la source