Comment pouvez-vous changer la version par défaut de Java sur un mac?
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.
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 ).
/Library/Java/JavaVirtualMachines
. Le système choisira la version la plus élevée par défaut. 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.
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)
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
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
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.
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
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
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:?;;")
}
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
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`
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.
Commencez par trouver où stockez-vous les variables d'environnement-
Étapes pour configurer la variable d'environnement: -
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
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.
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;
}
$ 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)
$ 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)
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
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
Voici comment je le fais sur mon Linux (Ubuntu/Mint mate), je suppose que Mac peut le faire de la même manière.
Pas:
/mnt/star/program/Java/jdk-1.8
ln -s /mnt/star/program/Java/jdk-1.8 /mnt/star/program/Java/java
/mnt/star/program/Java/java
est le lien symbolique.Java_HOME
dans un script de démarrage./etc/profile.d/eric.sh
ou simplement ~/.bashrc
.Java_HOME=/mnt/star/program/Java/java
Java -version
devrait imprimer la version Java./mnt/star/program/Java/jdk-11
~/.bashrc
, définissez une variable pour différentes versions de Java._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
~/.bashrc
, définissez la commande pour changer de version Java.## 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"
source ~/.bashrc
pour que les modifications prennent effet.Commandes:
jv11
jv8
jvd
_E_Java_HOME_D
définie ci-dessus.jv
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:~$
Java_HOME
.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
).
ajoute la commande suivante au fichier ~/.zshenv
export Java_HOME=`/usr/libexec/Java_home -v 1.8`
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
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.
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.