Comment pouvez-vous changer la version par défaut de Java sur un Mac?
Comment pouvez-vous changer la version par défaut de Java sur un Mac?
Réponses:
Première exécution /usr/libexec/java_home -V
qui produira quelque chose comme ceci:
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 souhaitez être la valeur 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, quand vous courrez, 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 la export JAVA_HOME…
ligne au fichier init de votre shell.
Pour Bash (comme indiqué par antonyh ):
export JAVA_HOME=$(/usr/libexec/java_home -v 1.8)
Pour le poisson (comme indiqué par ormurin)
set -x JAVA_HOME (/usr/libexec/java_home -d64 -v1.8)
export
ligne
export JAVA_HOME=$(/usr/libexec/java_home -v 1.8)
- notez également que java_home permet des correspondances partielles afin que vous n'ayez pas à inclure la version complète car elle trouvera la dernière installée. Cela facilite les mises à jour.
Cette réponse est une tentative d'aborder: comment contrôler la version java à l'échelle du système (pas seulement dans le shell en cours d'exécution) lorsque plusieurs versions de JDK sont installées à des fins de développement sur macOS El Capitan ou plus récent (Sierra, High Sierra, Mojave) . Pour 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. Habituellement, j'ai la dernière version stable pour une utilisation générale et d'autres pour les tests. Mais je ne veux pas que le système (par exemple lorsque je démarre mon IDE) utilise la dernière version "Early Access" que j'ai pour l'instant. Je veux contrôler le défaut du système, et cela devrait être le dernier stable.
L'approche suivante fonctionne avec Java 7 à 12 au moins (accès anticipé au moment d'écrire ces lignes ), avec Oracle JDK ou OpenJDK (y compris les builds par AdoptOpenJDK produits après la mi-octobre 2018 ).
/Library/Java/JavaVirtualMachines
. Le système choisira la version la plus élevée par défaut. Contents/Info.plist
enInfo.plist.disabled
. Ce JDK peut toujours être utilisé lorsqu'il $JAVA_HOME
pointe dessus, ou référencé explicitement dans un script ou une configuration. Il sera simplement ignoré par la java
commande du système .Le lanceur système utilisera le JDK avec la version la plus élevée parmi ceux qui ont un Info.plist
fichier.
Lorsque vous travaillez dans un shell avec un autre JDK, choisissez votre méthode parmi les réponses existantes ( jenv
, ou des alias / scripts personnalisés /usr/libexec/java_home
, etc.).
Détails de l'enquête dans cet essentiel .
(*) Les réponses actuelles sont soit obsolètes (ne sont plus valables pour macOS El Capitan ou Sierra), soit ne concernent qu'un seul JDK, ou ne traitent pas l'aspect à l'échelle du 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 démarrée à partir du lanceur de système d'exploitation (sauf si vous modifiez le bon fichier et la déconnexion / connexion, ce qui est fastidieux). Idem pour jenv, c'est cool et tout, mais pour autant que je sache, cela change simplement les variables d'environnement, donc il a la même limitation.
jenv
pas en JAVA_HOME
mesure de définir la version Java à l'échelle du système, c'est-à-dire celle qu'Eclipse utiliserait.
/Library/Internet Plug-Ins/JavaAppletPlugin.plugin/Contents/Home/
. Apparemment, c'est celui que le nouveau volet Préférences lancera - c'est la seule exception que j'ai trouvée à ma solution: que thingy utilisera toujours JDK9 (le dernier que j'ai installé), mais aucune autre application Java ne le fait. "
En ajoutant aux réponses ci-dessus, j'ai mis les lignes suivantes dans mon .bash_profile
(ou .zshrc
pour MacOS 10.15+) ce qui le rend vraiment pratique pour changer (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 l'insertion, 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)
alias j9="export JAVA_HOME=`/usr/libexec/java_home -v 9`; java -version"
alias j10="export JAVA_HOME=`/usr/libexec/java_home`; java -version"
puis taper j10
vous permet de revenir à la version actuelle de Java (dans mon cas Java 10)
nvm
pour changer de version Java, mais l'acronyme jvm
signifie déjà autre chose :)
/Users/me/.zshrc:8: permission denied: /Library/Java/JavaVirtualMachines/openjdk-12.jdk/Contents/Home
Une petite fonction poisson 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 en bash:
#!/bin/bash
jhome () {
export JAVA_HOME=`/usr/libexec/java_home $@`
echo "JAVA_HOME:" $JAVA_HOME
echo "java -version:"
java -version
}
Ensuite, pour basculer entre les javas, procédez comme suit:
$> jhome #switches to latest java
$> jhome -v 1.7 #switches to java 1.7
$> jhome -v 1.6 #switches to java 1.6
export JAVA_HOME=(/usr/libexec/java_home $argv)
place de la deuxième ligne de votre jhome
fonction.
C'est un peu délicat, mais essayez de suivre les étapes décrites dans Installation de Java sur OS X 10.9 (Mavericks) . Fondamentalement, vous devrez mettre à jour votre alias java
.
Pas à pas:
Après avoir installé JDK 1.7, vous devrez faire le sudo ln -snf
afin de changer le lien en courant java
. Pour ce faire, ouvrez Terminal et exécutez 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 pointer vers où a jdk_1.7.0_xx.jdk
é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 export JAVA_HOME
ligne ci-dessus dans votre .bashrc
fichier pour avoir java en permanence dans votre Terminal
JAVA_HOME
sera exportée sur la session Terminal en cours. Vous pouvez l'ajouter à notre .bashrc
si vous le souhaitez. J'adapterai les commandes à la dernière version.
Utiliser jenv est un moyen simple.
1. installez jenv
curl -s get.jenv.io | frapper
2.Config jenv
cd ~ / .jenv / candidats / mkdir java cd java mkdir 1.7 mkdir 1.8
3.Lier 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 prêt
commande de commutation:
jenv use java 1.8
définir par defaut:
jenv default java 1.7
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 vous montrera une page vierge que vous pourrez remplir.
ajouter au 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
Ajoutez la ligne:
export JAVA_HOME='/Library/Java/JavaVirtualMachines/jdk1.8.0_144.jdk/Contents/Home'
au dossier
~/.bash_profile
(remplacez jdk1.8.0_144.jdk par votre version téléchargée)
puis source ~/.bash_profile
Utilisez jenv, c'est comme un gestionnaire d'environnement Java. Il est super facile à utiliser et à nettoyer
Pour Mac, suivez les étapes:
brew install jenv
git clone https://github.com/gcuisinier/jenv.git ~/.jenv
Installation: si vous utilisez bash, procédez comme suit:
$ 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:
jenv global oracle64-1.6.0
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
}
mettre dans votre ~ / .profile et de l' utiliser dans votre terminal comme si setjdk 1.8
, setjdk 1.7
, setjdk 9
etc etc ...
Si vous n'en avez pas, removeFromPath
c'est:
function removeFromPath() {
export PATH=$(echo $PATH | sed -E -e "s;:$1;;" -e "s;$1:?;;")
}
Quatre étapes faciles à l'aide du terminal pour les personnes qui utilisent le processus par défaut .. :)
echo $JAVA_HOME
vous donne la maison java actuelle. Par exemple:/Library/Java/JavaVirtualMachines/jdk1.8.0_191.jdk/Contents/Home/
cd /Library/Java/JavaVirtualMachines/
vous amènera dans le dossier où vous installez normalement jdks (cela peut être différent pour vos machines)
ls
Des spectacles dossiers disponibles (normalement il aura les numéros de version, pour par exemple: jdk1.8.0_191.jdk openjdk-11.0.2.jdk
)export JAVA_HOME='/Library/Java/JavaVirtualMachines/openjdk-11.0.2.jdk/Contents/Home'
va changer la maison java ..macOS El Capitan ou plus récent choisira la version supérieure du JDK disponible dans /Library/Java/JavaVirtualMachines
, afin de rétrograder, vous pouvez renommer le fichier Info.plist
en quelque chose de similaire Info.plist.disabled
afin que le système d'exploitation choisisse une version précédente.
Depuis la page de manuel officielle java_home (1) d' Apple :
**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 n'êtes toujours pas en mesure de 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)
cela fonctionnera sûrement.
Découvrez d'abord 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 lien OU 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 de 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)
Vous pouvez l'ajouter à votre .bash_profile pour que la version soit définie par défaut.
//Open bash profile
open ~/.bash_profile
export JAVA_HOME=`/usr/libexec/java_home -v 1.8`
// run bash profile
source ~/.bash_profile
Si vous utilisez du poisson et que vous utilisez un Mac et que vous souhaitez pouvoir basculer entre les JDK, alors ci-dessous 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 -g qui est global!
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 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
Si vous avez plusieurs versions et que vous souhaitez 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
Sur la base de la réponse @markhellewell, j'ai créé quelques fonctions d'alias qui le feront pour vous. Ajoutez-les simplement à votre fichier de démarrage du 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 doux.JAVA_HOME
dans un script de démarrage. /etc/profile.d/eric.sh
, ou simplement utiliser ~/.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éfinition 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 lors de l'installation de jdk à la main, je garde la version mineure, puis fais un lien logiciel avec la version majeure mais sans la version mineure.
par exemple
// c'est le répertoire réel,
jdk1.8.0_191
// c'est un lien logiciel vers jdk1.8.0_191
jdk-8
// c'est un lien logiciel vers jdk-8
oujdk-11
java
Je définis l'alias de commande dans ~/.bashrc
, mais je définis la variable dans un fichier séparé.
J'utilise ~/.eric_var
pour définir les variables et ~/.bashrc
je les fournirai (par exemple source $HOME/.eric_var
).
Un moyen simple d'inclure un JDK installé séparément dans la liste donnée par /usr/libexec/java_home -V
est de créer un lien symbolique vers le répertoire comme suit:
sudo ln -s path/to/jdk /Library/Java/JavaVirtualMachines/jdk-[some-identifier].jdk
Par exemple, pour enregistrer le JDK inclus 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
Maintenant java_home
, listera le JDK sous Matching Java Virtual Machines
et vous pouvez le sélectionner comme décrit ci-dessus.
Je l'ai fait pour le terminal local avec
export JAVA_8_HOME=(/Library/Java/JavaVirtualMachines/jdk1.8.0_221.jdk/Contents/Home/)
export JAVA_13_HOME=(/Library/Java/JavaVirtualMachines/jdk-13.0.1.jdk/Contents/Home/)
alias java8='export JAVA_HOME=$JAVA_8_HOME; alias java="$JAVA_8_HOME/bin/java"; $JAVA_8_HOME/bin/java -version'
alias java13='export JAVA_HOME=$JAVA_13_HOME; alias java="$JAVA_13_HOME/bin/java"; $JAVA_13_HOME/bin/java -version'
export JAVA_HOME=$JAVA_13_HOME
Cet outil fera le travail pour vous:
http://www.guigarage.com/2013/02/change-java-version-on-mac-os/
Il s'agit d'un simple JavaOne qui peut être utilisé pour définir la version Java actuelle. La version peut être utilisée dans un shell qui est ouvert après qu'une version a été sélectionnée dans l'outil.
SOLUTION TROP FACILE: Quel mal de tête - c'était une solution rapide et facile qui a fonctionné pour moi.
Mac OS Sierra version 10.12.13
Utilisez les touches de raccourci: CMD + MAJ + G - tapez "/ Bibliothèque /"
Trouvez le dossier JAVA
Clic droit sur le dossier Java = Déplacer vers la corbeille (mot de passe requis)
Installer: Kit de développement Java SE 8 jdk-8u131-macosx-x64.dmg | Télécharger le SDK Javascript
/usr/libexec/java_home
vous dit?