web-dev-qa-db-fra.com

Comment définir ou modifier la version par défaut de Java (JDK) sur OS X?

Comment pouvez-vous changer la version par défaut de Java sur un mac?

470
Venkat

Première exécution, /usr/libexec/Java_home -V, qui produira quelque chose comme:

Matching Java Virtual Machines (3):
1.8.0_05, x86_64:   "Java SE 8" /Library/Java/JavaVirtualMachines/jdk1.8.0_05.jdk/Contents/Home
1.6.0_65-b14-462, x86_64:   "Java SE 6" /System/Library/Java/JavaVirtualMachines/1.6.0.jdk/Contents/Home
1.6.0_65-b14-462, i386: "Java SE 6" /System/Library/Java/JavaVirtualMachines/1.6.0.jdk/Contents/Home

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

Choisissez la version que vous voulez utiliser par défaut (1.6.0_65-b14-462 pour les arguments), puis:

export Java_HOME=`/usr/libexec/Java_home -v 1.6.0_65-b14-462`

ou vous pouvez spécifier uniquement la version principale, comme:

export Java_HOME=`/usr/libexec/Java_home -v 1.8`

Maintenant, lorsque vous exécutez Java -version, vous verrez:

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)

Ajoutez simplement la ligne export Java_HOME… au fichier init de votre shell.

854
markhellewell

Cette réponse tente de répondre aux questions suivantes: comment contrôler la version de Java au niveau du système (pas uniquement dans Shell en cours d'exécution) lorsque plusieurs versions de JDK sont installées à des fins de développement sur macOS El Capitan ou une version plus récente (Sierra, Haute Sierra, Mojave). Autant que je sache, aucune des réponses actuelles ne le fait (*).

En tant que développeur, j'utilise plusieurs JDK et je souhaite passer facilement de l'un à l'autre. D'habitude, j'ai le dernier stable pour un usage général, et d'autres pour les tests. Mais je ne veux pas que le système (par exemple, lorsque je lance mon IDE) utilise la dernière version "accès anticipé" que j'ai pour le moment. Je veux contrôler les valeurs par défaut du système, et cela devrait être la dernière version stable.

L’approche suivante fonctionne au moins avec Java 7 à 12 (accès anticipé au moment de la rédaction de cet article), avec Oracle JDK ou OpenJDK (y compris les constructions de AdoptOpenJDK produites après Octobre 2018 ).

Solution sans outils tiers:

  • laissez tous les JDK à leur emplacement par défaut, sous /Library/Java/JavaVirtualMachines. Le système choisira la version la plus élevée par défaut. 
  • Pour exclure un JDK de la sélection par défaut, renommez son Contents/Info.plist en Info.plist.disabled. Ce JDK peut toujours être utilisé lorsque $Java_HOME le désigne ou explicitement référencé dans un script ou une configuration. Il sera simplement ignoré par la commande Java du système.

Le programme de lancement du système utilisera le JDK avec la version la plus récente parmi ceux qui possèdent un fichier Info.plist.

Lorsque vous travaillez dans un shell avec un JDK alternatif, choisissez votre méthode parmi les réponses existantes (jenv ou alias/scripts personnalisés autour de /usr/libexec/Java_home, etc.).


Détails de l'enquête dans ce Gist .


(*) Les réponses actuelles sont soit obsolètes (ne sont plus valables pour macOS El Capitan ou Sierra), ou ne traitent que d'un seul JDK, ou ne traitent pas de l'aspect système. Beaucoup expliquent comment changer $Java_HOME, mais cela n'affecte que le shell actuel et ce qui est lancé à partir de là. Cela n'affectera pas une application lancée à partir du programme de lancement du système d'exploitation (à moins que vous ne changiez le bon fichier et que vous vous déconnectiez/vous connectiez, ce qui est fastidieux). Pareil pour jenv, c'est cool et tout, mais pour autant que je sache, cela ne fait que changer les variables d'environnement, de sorte qu'il a les mêmes limites.

247
Hugues M.

Ajoutant aux réponses ci-dessus, j’ai mis les lignes suivantes dans mon .bash_profile, ce qui le rend très pratique pour passer (y compris le commentaire de @ elektromin pour Java 9):

alias j12="export Java_HOME=`/usr/libexec/Java_home -v 12`; Java -version"
alias j11="export Java_HOME=`/usr/libexec/Java_home -v 11`; Java -version"
alias j10="export Java_HOME=`/usr/libexec/Java_home -v 10`; Java -version"
alias j9="export Java_HOME=`/usr/libexec/Java_home -v 9`; Java -version"
alias j8="export Java_HOME=`/usr/libexec/Java_home -v 1.8`; Java -version"
alias j7="export Java_HOME=`/usr/libexec/Java_home -v 1.7`; Java -version"

Après avoir inséré, exécutez $ source .bash_profile

Je peux passer à Java 8 en tapant ce qui suit:

$ j8
Java version "1.8.0_102"
Java(TM) SE Runtime Environment (build 1.8.0_102-b14)
Java HotSpot(TM) 64-Bit Server VM (build 25.102-b14, mixed mode)
150
Justin Zhang

Une petite fonction fish basée sur/usr/libexec/Java_home

function jhome
    set Java_HOME (/usr/libexec/Java_home $argv)
    echo "Java_HOME:" $Java_HOME
    echo "Java -version:"
    Java -version
end

Si vous n'utilisez pas de poisson, vous pouvez faire quelque chose de similaire dans bash:

#!/bin/bash

jhome () {
  export Java_HOME=`/usr/libexec/Java_home $@`
  echo "Java_HOME:" $Java_HOME
  echo "Java -version:"
  Java -version
}

Ensuite, pour passer d'un java à l'autre:

$> jhome           #switches to latest Java
$> jhome -v 1.7    #switches to Java 1.7
$> jhome -v 1.6    #switches to Java 1.6

ref: https://Gist.github.com/kenglxn/1843d552dff4d4233271

49
kenglxn

Utiliser jenv est un moyen facile.

1. installer jenv

     curl -s get.jenv.io | frapper

2.Config jenv

 cd ~/.jenv/candidats /
 mkdir Java 
 cd Java 
 mkdir 1.7 
 mkdir 1,8 

3.Symlink le chemin jdk

 ln -s /Library/Java/JavaVirtualMachines/jdk1.7.0_79.jdk/Contents/Home/bin ~/.jenv/candidats/Java/1.7 
 ln -s /Library/Java/JavaVirtualMachines/jdk1.8.0_45.jdk/Contents/Home/bin ~/.jenv/candidats/Java/1.8 

4.Vous êtes tous ensemble

commande de commutation: 

jenv utilise Java 1.8

définir par defaut: 

jenv default Java 1.7

30
Yuantao

C'est un peu délicat, mais essayez de suivre les étapes décrites dans Installation de Java sous OS X 10.9 (Mavericks) . Fondamentalement, vous devrez mettre à jour votre alias à Java.

Pas à pas:

Après avoir installé JDK 1.7, vous devrez créer le Sudo ln -snf afin de changer le lien en Java actuel. Pour ce faire, ouvrez Terminal et lancez la commande:

Sudo ln -nsf /Library/Java/JavaVirtualMachines/jdk1.7.0_51.jdk/Contents \
/System/Library/Frameworks/JavaVM.framework/Versions/CurrentJDK

Notez que le répertoire jdk1.7.0_51.jdk peut changer en fonction de la version du SDK que vous avez installée.

Maintenant, vous devez définir Java_HOME pour qu'il pointe vers l'endroit où jdk_1.7.0_xx.jdk a été installé. Ouvrez à nouveau le terminal et tapez:

export Java_HOME="/Library/Java/JavaVirtualMachines/jdk1.7.0_51.jdk/Contents/Home"

Vous pouvez ajouter la ligne export Java_HOME ci-dessus dans votre fichier .bashrc pour avoir Java en permanence dans votre terminal.

26
Trein

installer JDK, pas seulement JRE

/usr/libexec/Java_home -v 1.8

donne

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

suivant

touch .bash_profile

open -a TextEdit.app .bash_profile

TextEdit va vous montrer une page vierge que vous pouvez remplir.

ajouter à la doc: export Java_HOME=/Library/Java/JavaVirtualMachines/jdk1.8.0_111.jdk/Contents/Home

dans le terminal:

export Java_HOME="$(/usr/libexec/Java_home -v 1.8)"

essayez la commande:

javac -version

devrait produire:

javac 1.8.0_111
20
user2708060

tl; dr

Ajouter la ligne: 

export Java_HOME='/Library/Java/JavaVirtualMachines/jdk1.8.0_144.jdk/Contents/Home'

au dossier

~/.bash_profile

remplacez par votre version téléchargée.

alors source ~/.bash_profile

15
dustinevan
function setjdk() {
  if [ $# -ne 0 ]; then
    removeFromPath '/System/Library/Frameworks/JavaVM.framework/Home/bin'
    if [ -n "${Java_HOME+x}" ]; then
      removeFromPath $Java_HOME
    fi
    export Java_HOME=`/usr/libexec/Java_home -v $@`
    export PATH=$Java_HOME/bin:$PATH
  fi
}

mettez ceci dans votre ~/.profile et utilisez-le dans votre terminal comme ceci setjdk 1.8, setjdk 1.7, setjdk 9 etc etc ...

Si vous n'avez pas removeFromPath, alors c'est: 

function removeFromPath() { export PATH=$(echo $PATH | sed -E -e "s;:$1;;" -e "s;$1:?;;") }

10
Gabriel Reiser

Utilisez jenv, c'est comme un gestionnaire d'environnement Java. C'est super facile à utiliser et à nettoyer

Pour Mac, suivez les étapes suivantes:

brew install jenv

git clone https://github.com/gcuisinier/jenv.git ~/.jenv

Installation: Si vous utilisez bash, suivez ces étapes:

$ echo 'export PATH="$HOME/.jenv/bin:$PATH"' >> ~/.bash_profile

echo 'eval "$(jenv init -)"' >> ~/.bash_profile

$ exec $Shell -l

Ajoutez les versions souhaitées de JVM à jenv:

jenv add /System/Library/Java/JavaVirtualMachines/1.6.0.jdk/Contents/Home

jenv add/System/Library/Java/JavaVirtualMachines/1.8.0.jdk/Contents/Home

Vérifiez les versions installées:

jenv versions

Définissez la version Java que vous souhaitez utiliser par:

jenv global Oracle64-1.6.0
5
slal

Extrait de la page de manuel officielle de Apple Java_home (1) :

**USAGE**

   /usr/libexec/Java_home  helps  users  set a $Java_HOME in their login rc files, or provides a way for
   command-line Java tools to use the most appropriate JVM which can satisfy a minimum version or archi-
   tecture  requirement.  The --exec argument can invoke tools in the selected $Java_HOME/bin directory,
   which is useful for starting Java command-line tools from launchd plists without hardcoding the  full
   path to the Java command-line tool.

   Usage for bash-style shells:
          $ export Java_HOME=`/usr/libexec/Java_home`

   Usage for csh-style shells:
          % setenv Java_HOME `/usr/libexec/Java_home`
5
Antonio

Si vous ne pouvez toujours pas le régler. en utilisant cette commande.

export Java_HOME = /usr/libexec/Java_home -v 1.8

alors vous devez utiliser celui-ci.

export Java_HOME = $(/usr/libexec/Java_home -v 1.8)

ça va sûrement marcher.

3
RohitKumar

Commencez par trouver où stockez-vous les variables d'environnement- 

  1. emacs 
  2. bash_profile 
  3. fichier zshrc

Étapes pour configurer la variable d'environnement: -

  1. Téléchargez le jdk à partir de Java
  2. installez le par double clic
  3. Maintenant, configurez les variables d'environnement dans votre fichier

    une. Pour emacs.profile, vous pouvez utiliser ce link OR voir la capture d'écran ci-dessous 

 enter image description here

b. Pour la configuration du profil ZSH -

1. export Java_HOME=/Library/Java/JavaVirtualMachines/jdk1.8.0_112.jdk/Contents/Home

2. source ~/.zshrc - Restart zshrc to reflect the changes.

3. echo $Java_HOME - make sure path is set up properly 
   ----> /Library/Java/JavaVirtualMachines/jdk1.8.0_112.jdk/Contents/Home

4. Java -version 

   -->  Java version "1.8.0_112"  Java(TM) SE Runtime Environment (build 1.8.0_112-b16)Java HotSpot(TM) 64-Bit Server VM (build 25.112-b16, mixed mode)

Maintenant, vous pouvez facilement mettre à niveau ou dégrader la version Java.

3
Vrushali Raut

Script de commutation JDK

J'ai adapté la réponse de @Alex ci-dessus et écrit ce qui suit pour corriger le code pour Java 9.

$ cat ~/.jdk
#!/bin/bash

#list available jdks
alias jdks="/usr/libexec/Java_home -V"
# jdk version switching - e.g. `jdk 6` will switch to version 1.6
function jdk() {
  echo "Switching Java version $1";

  requestedVersion=$1
  oldStyleVersion=8
  # Set the version
  if [ $requestedVersion -gt $oldStyleVersion ]; then
    export Java_HOME=$(/usr/libexec/Java_home -v $1);
  else
    export Java_HOME=`/usr/libexec/Java_home -v 1.$1`;
  fi

  echo "Setting Java_HOME=$Java_HOME"

  which Java
  Java -version;
}

Passer à Java 8

$ jdk 8
Switching Java version 8
Setting Java_HOME=/Library/Java/JavaVirtualMachines/jdk1.8.0_131.jdk/Contents/Home
/usr/bin/Java
java version "1.8.0_131"
Java(TM) SE Runtime Environment (build 1.8.0_131-b11)
Java HotSpot(TM) 64-Bit Server VM (build 25.131-b11, mixed mode)

Passer à Java 9

$ jdk 9
Switching Java version 9
Setting Java_HOME=/Library/Java/JavaVirtualMachines/jdk-9.0.1.jdk/Contents/Home
/usr/bin/Java
java version "9.0.1"
Java(TM) SE Runtime Environment (build 9.0.1+11)
Java HotSpot(TM) 64-Bit Server VM (build 9.0.1+11, mixed mode)
3
Marcello de Sales

Si vous utilisez du poisson et que vous utilisez mac et que vous voulez pouvoir changer de JDK, alors, ci-dessous, cela fonctionne pour moi sur mac.

La réponse de @ kenglxn n'a pas fonctionné pour moi et j'ai compris que bcos n'avait pas défini l'option -g, qui est globale!

Mettez ci-dessous sous ~/.config/fish/config.fish

alias j8="jhome  -v 1.8.0_162"
alias j9="jhome  -v 9.0.1"

function jhome
    set -g -x Java_HOME (/usr/libexec/Java_home $argv)
    echo "Java_HOME:" $Java_HOME
    echo "Java -version:"
    Java -version
end

funcsave jhome

Pour savoir quelle version/version mineure que vous avez installée, vous pouvez faire:

/usr/libexec/Java_home -V                                                                              579ms  Wed 14 Feb 11:44:01 2018
Matching Java Virtual Machines (3):
    9.0.1, x86_64:  "Java SE 9.0.1" /Library/Java/JavaVirtualMachines/jdk-9.0.1.jdk/Contents/Home
    1.8.0_162, x86_64:  "Java SE 8" /Library/Java/JavaVirtualMachines/jdk1.8.0_162.jdk/Contents/Home
    1.8.0_121, x86_64:  "Java SE 8" /Library/Java/JavaVirtualMachines/jdk1.8.0_121.jdk/Contents/Home
2
Gob00st

Sur la base de @markhellewell answer, j'ai créé deux fonctions d'alias qui le feront pour vous. Ajoutez-les simplement à votre fichier de démarrage Shell

#list available jdks
alias jdks="/usr/libexec/Java_home -V"
# jdk version switching - e.g. `jdk 6` will switch to version 1.6
function jdk() { 
  echo "Switching Java version"; 
  export Java_HOME=`/usr/libexec/Java_home -v 1.$1`; 
  Java -version; 
}

https://Gist.github.com/Noyabronok/0a90e1f3c52d1aaa941013d3caa8d0e4

1
Alex

Voici comment je le fais sur mon Linux (Ubuntu/Mint mate), je suppose que Mac peut le faire de la même manière.


Installer et config

Pas:  

  • [Basic - part]
  • Téléchargez jdk (le fichier .tgz ) à la main. 
  • Décompressez et renommez correctement, au bon endroit.
    Par exemple /mnt/star/program/Java/jdk-1.8
  • Créez un lien symbolique, qui sera modifié pour changer de version Java ultérieurement.
    Par exemple ln -s /mnt/star/program/Java/jdk-1.8 /mnt/star/program/Java/java
    Ainsi, /mnt/star/program/Java/java est le lien symbolique.
  • Définissez Java_HOME dans un script de démarrage.
    Peut utiliser un fichier comme /etc/profile.d/eric.sh ou simplement ~/.bashrc.
    Par exemple Java_HOME=/mnt/star/program/Java/java
  • Ensuite, ouvrez un nouveau shell bash. Java -version devrait imprimer la version Java.
  • [Plus de version - partie]
  • Téléchargez et installez plus de version Java, selon les besoins, comme ci-dessus.
    par exemple
    /mnt/star/program/Java/jdk-11
  • [Switch - part]
  • Dans ~/.bashrc, définissez une variable pour différentes versions de Java.
    par exemple
    _E_Java_HOME_11='/mnt/star/program/Java/jdk-11'
    _E_Java_HOME_8='/mnt/star/program/Java/jdk-8'
    # dir of default version,
    _E_Java_HOME_D=$_E_Java_HOME_8
  • Dans ~/.bashrc, définissez la commande pour changer de version Java.
    par exemple
    ## switch Java version,
    alias jv11="rm $Java_HOME; ln -s $_E_Java_HOME_11 $Java_HOME"
    alias jv8="rm $Java_HOME; ln -s $_E_Java_HOME_8 $Java_HOME"
    # default Java version,
    alias jvd="rm $Java_HOME; ln -s $_E_Java_HOME_D $Java_HOME"
    alias jv="Java -version"
  • Dans le terminal, source ~/.bashrc pour que les modifications prennent effet.
  • Puis pourrait basculer en utilisant les commandes définies. 

Commandes - depuis la config ci-dessus

Commandes:  

  • jv11
    Passer à Java 11
  • jv8
    Basculer vers Java 8
  • jvd
    Basculez vers la version Java par défaut, notée _E_Java_HOME_D définie ci-dessus.
  • jv
    Afficher la version de Java.

Exemple de sortie:  

eric@eric-pc:~$ jv
Java version "1.8.0_191"
Java(TM) SE Runtime Environment (build 1.8.0_191-b12)
Java HotSpot(TM) 64-Bit Server VM (build 25.191-b12, mixed mode)

eric@eric-pc:~$ jv11
eric@eric-pc:~$ jv
Java version "11.0.1" 2018-10-16 LTS
Java(TM) SE Runtime Environment 18.9 (build 11.0.1+13-LTS)
Java HotSpot(TM) 64-Bit Server VM 18.9 (build 11.0.1+13-LTS, mixed mode)

eric@eric-pc:~$ jvd
eric@eric-pc:~$ jv
Java version "1.8.0_191"
Java(TM) SE Runtime Environment (build 1.8.0_191-b12)
Java HotSpot(TM) 64-Bit Server VM (build 25.191-b12, mixed mode)

eric@eric-pc:~$ 

Mécanisme

  • Cela change en changeant le lien logiciel qui est utilisé comme Java_HOME.

Conseils

  • Sur ma machine lorsque jdk est installé à la main, je conserve la version mineure, puis crée un lien symbolique avec la version majeure mais sans la version mineure.
    par exemple
    // c'est le répertoire actuel,
    jdk1.8.0_191 

    // ceci est un lien symbolique vers jdk1.8.0_191
    jdk-8 

    // ceci est un lien symbolique vers jdk-8 ou jdk-11
    Java 

  • Je définis un alias de commande dans ~/.bashrc, mais je définis une variable dans un fichier séparé.
    J'utilise ~/.eric_var pour définir les variables, et ~/.bashrc le trouvera (par exemple, source $HOME/.eric_var).

1
Eric Wang

ajoute la commande suivante au fichier ~/.zshenv

export Java_HOME=`/usr/libexec/Java_home -v 1.8` 
1
xsilen T

Si vous avez plusieurs versions et que vous voulez exécuter quelque chose en utilisant une version spécifique, utilisez cet exemple:

/usr/libexec/Java_home -v 1.7.0_75 --exec Java -jar you-file.jar
0
MonstroDev

Un moyen simple d’inclure un JDK installé séparément dans la liste donnée par /usr/libexec/Java_home -V consiste à établir un lien symbolique avec le répertoire, comme suit:

Sudo ln -s path/to/jdk /Library/Java/JavaVirtualMachines/jdk-[some-identifier].jdk

Par exemple, pour enregistrer le JDK fourni avec Android Studio (1.8.0_152 au moment de la rédaction), utilisez:

Sudo ln -s /Applications/Android\ Studio.app/Contents/jre/jdk /Library/Java/JavaVirtualMachines/jdk-Android-studio.jdk

Désormais, Java_home listera le JDK sous Matching Java Virtual Machines et vous pourrez le sélectionner comme décrit ci-dessus.

0
friederbluemle

Cet outil fera le travail pour vous: 

http://www.guigarage.com/2013/02/change-Java-version-on-mac-os/

C'est un simple JavaOne qui peut être utilisé pour définir la version Java actuelle. La version peut être utilisée dans un shell ouvert après la sélection d'une version dans l'outil.

0
Hendrik Ebbers