¿Cómo se puede cambiar la versión predeterminada de Java en una Mac?
¿Cómo se puede cambiar la versión predeterminada de Java en una Mac?
Respuestas:
Primera ejecución /usr/libexec/java_home -V
que generará algo como lo siguiente:
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
Elija la versión que desea que sea la predeterminada ( 1.6.0_65-b14-462
por el bien de los argumentos) y luego:
export JAVA_HOME=`/usr/libexec/java_home -v 1.6.0_65-b14-462`
o puede especificar solo la versión principal, como:
export JAVA_HOME=`/usr/libexec/java_home -v 1.8`
Ahora cuando corras java -version
verás:
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)
Agregue la export JAVA_HOME…
línea al archivo de inicio de su shell.
Para Bash (según lo indicado por antonyh ):
export JAVA_HOME=$(/usr/libexec/java_home -v 1.8)
Para pescado (según lo establecido por ormurin)
set -x JAVA_HOME (/usr/libexec/java_home -d64 -v1.8)
export
línea
export JAVA_HOME=$(/usr/libexec/java_home -v 1.8)
también tenga en cuenta que java_home permite coincidencias parciales para que no tenga que incluir la versión completa, ya que encontrará la última instalada. Esto facilita las actualizaciones.
Esta respuesta es un intento de abordar: cómo controlar la versión de Java en todo el sistema (no solo en el shell que se está ejecutando actualmente) cuando se instalan varias versiones de JDK para fines de desarrollo en macOS El Capitan o posterior (Sierra, High Sierra, Mojave) . Por lo que puedo decir, ninguna de las respuestas actuales hace eso (*).
Como desarrollador, uso varios JDK y quiero cambiar fácilmente de uno a otro. Por lo general, tengo el último estable para uso general, y otros para pruebas. Pero no quiero que el sistema (por ejemplo, cuando inicio mi IDE) use la última versión de "acceso temprano" que tengo por ahora. Quiero controlar el valor predeterminado del sistema, y eso debería ser lo último estable.
El siguiente enfoque funciona con Java 7 a 12 al menos (acceso temprano al momento de escribir este artículo), con Oracle JDK u OpenJDK (incluidas las compilaciones de AdoptOpenJDK producidas después de mediados de octubre de 2018 ).
/Library/Java/JavaVirtualMachines
. El sistema elegirá la versión más alta por defecto. Contents/Info.plist
aInfo.plist.disabled
. Ese JDK todavía se puede usar cuando $JAVA_HOME
apunta a él, o se hace referencia explícita en un script o configuración. Simplemente será ignorado por el java
comando del sistema .El iniciador del sistema utilizará el JDK con la versión más alta entre los que tienen un Info.plist
archivo.
Cuando trabaje en un shell con JDK alternativo, elija su método entre las respuestas existentes ( jenv
o alias / scripts personalizados /usr/libexec/java_home
, etc.).
Detalles de la investigación en esta esencia .
(*) Las respuestas actuales son obsoletas (ya no son válidas para macOS El Capitan o Sierra), o solo abordan un solo JDK, o no abordan el aspecto de todo el sistema. Muchos explican cómo cambiar $JAVA_HOME
, pero esto solo afecta el shell actual y lo que se inicia desde allí. No afectará una aplicación iniciada desde el iniciador del sistema operativo (a menos que cambie el archivo correcto y cierre la sesión / inicio de sesión, lo cual es tedioso). Lo mismo para jenv, es genial y todo, pero por lo que puedo decir, simplemente cambia las variables de entorno, por lo que tiene la misma limitación.
jenv
tampoco JAVA_HOME
puedo configurar la versión Java de todo el sistema, es decir, la que usaría Eclipse.
/Library/Internet Plug-Ins/JavaAppletPlugin.plugin/Contents/Home/
. Aparentemente este es el que lanzará el nuevo panel de Preferencias; esta es la única excepción que encontré para mi solución: que thingy seguirá usando JDK9 (la última que instalé), pero ninguna otra aplicación Java lo hace ".
Agregando a las respuestas anteriores, puse las siguientes líneas en mi .bash_profile
(o .zshrc
para MacOS 10.15+) lo que hace que sea realmente conveniente cambiar (incluido el comentario de @ elektromin para 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"
Después de insertar, ejecutar $ source .bash_profile
Puedo cambiar a Java 8 escribiendo lo siguiente:
$ 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"
y luego escribir le j10
permite volver a la versión actual de Java (en mi caso, Java 10)
nvm
de cambiar las versiones de Java, pero el acrónimo jvm
ya significa algo más :)
/Users/me/.zshrc:8: permission denied: /Library/Java/JavaVirtualMachines/openjdk-12.jdk/Contents/Home
Una función de peces pequeños basada en / 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 no usas pescado, puedes hacer algo similar en bash:
#!/bin/bash
jhome () {
export JAVA_HOME=`/usr/libexec/java_home $@`
echo "JAVA_HOME:" $JAVA_HOME
echo "java -version:"
java -version
}
Luego para cambiar entre javas hacer:
$> 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)
lugar de la segunda línea de su jhome
función.
Es un poco complicado, pero intente seguir los pasos descritos en Instalación de Java en OS X 10.9 (Mavericks) . Básicamente, tendrás que actualizar tu alias java
.
Paso a paso:
Después de instalar JDK 1.7, deberá hacer esto sudo ln -snf
para cambiar el enlace a actual java
. Para hacerlo, abra Terminal y emita el comando:
sudo ln -nsf /Library/Java/JavaVirtualMachines/jdk1.7.0_51.jdk/Contents \
/System/Library/Frameworks/JavaVM.framework/Versions/CurrentJDK
Tenga en cuenta que el directorio jdk1.7.0_51.jdk
puede cambiar según la versión del SDK que haya instalado.
Ahora, debe configurar JAVA_HOME
para señalar dónde jdk_1.7.0_xx.jdk
se instaló. Abra nuevamente la Terminal y escriba:
export JAVA_HOME="/Library/Java/JavaVirtualMachines/jdk1.7.0_51.jdk/Contents/Home"
Puede agregar la export JAVA_HOME
línea de arriba en su .bashrc
archivo para tener Java permanentemente en su Terminal
JAVA_HOME
se exportará en la sesión actual de Terminal. Puede agregarlo a nuestro .bashrc
si lo desea. Adaptaré los comandos a la última versión.
Usar jenv es una manera fácil.
1.Instalar jenv
curl -s get.jenv.io | golpetazo
2.Config jenv
cd ~ / .jenv / candidatos / mkdir java cd java mkdir 1.7 mkdir 1.8
3.Symlink la ruta jdk
ln -s /Library/Java/JavaVirtualMachines/jdk1.7.0_79.jdk/Contents/Home/bin ~ / .jenv / candidatos / java / 1.7 ln -s /Library/Java/JavaVirtualMachines/jdk1.8.0_45.jdk/Contents/Home/bin ~ / .jenv / candidatos / java / 1.8
4.Estás listo
comando de cambio:
jenv use java 1.8
establecer predeterminado:
jenv default java 1.7
instalar JDK, no solo JRE
/usr/libexec/java_home -v 1.8
da
/Library/Java/JavaVirtualMachines/jdk1.8.0_111.jdk/Contents/Home
siguiente
touch .bash_profile
open -a TextEdit.app .bash_profile
TextEdit le mostrará una página en blanco que puede completar.
agregar al documento:
export JAVA_HOME=/Library/Java/JavaVirtualMachines/jdk1.8.0_111.jdk/Contents/Home
en terminal:
export JAVA_HOME="$(/usr/libexec/java_home -v 1.8)"
prueba el comando:
javac -version
debería dar salida:
javac 1.8.0_111
tl; dr
Agrega la línea:
export JAVA_HOME='/Library/Java/JavaVirtualMachines/jdk1.8.0_144.jdk/Contents/Home'
al archivo
~/.bash_profile
(reemplace jdk1.8.0_144.jdk con su versión descargada)
entonces source ~/.bash_profile
Use jenv, es como un administrador de entorno Java. Es súper fácil de usar y limpiar.
Para Mac, sigue los pasos:
brew install jenv
git clone https://github.com/gcuisinier/jenv.git ~/.jenv
Instalación: si está utilizando bash, siga estos pasos:
$ echo 'export PATH="$HOME/.jenv/bin:$PATH"' >> ~/.bash_profile
echo 'eval "$(jenv init -)"' >> ~/.bash_profile
$ exec $SHELL -l
Agregue las versiones deseadas de JVM a 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
Verifique las versiones instaladas:
jenv versions
Configure la versión de Java que desea usar:
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
}
poner esto en su ~ / .profile y usarlo en su terminal como tal setjdk 1.8
, setjdk 1.7
, setjdk 9
etc, etc ...
Si no tienes, removeFromPath
entonces es:
function removeFromPath() {
export PATH=$(echo $PATH | sed -E -e "s;:$1;;" -e "s;$1:?;;")
}
Cuatro sencillos pasos para usar la terminal para las personas que usan el proceso predeterminado .. :)
echo $JAVA_HOME
te da el hogar actual de java. Por ejemplo:/Library/Java/JavaVirtualMachines/jdk1.8.0_191.jdk/Contents/Home/
cd /Library/Java/JavaVirtualMachines/
lo llevará a la carpeta donde normalmente instala jdks (puede ser diferente para sus máquinas)
ls
aparecen las carpetas disponibles (normalmente tendrá los números de versión, por ejemplo: jdk1.8.0_191.jdk openjdk-11.0.2.jdk
)export JAVA_HOME='/Library/Java/JavaVirtualMachines/openjdk-11.0.2.jdk/Contents/Home'
cambiará la casa de Java ..macOS El Capitan o una versión más reciente elegirán la versión superior del JDK disponible /Library/Java/JavaVirtualMachines
, por lo que para cambiar la versión anterior, puede cambiar el nombre del archivo Info.plist
a otra cosa Info.plist.disabled
para que el sistema operativo elija una versión anterior.
Desde la página de comando man oficial java_home (1) de 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 aún no puede configurarlo. utilizando este comando
export JAVA_HOME =/usr/libexec/java_home -v 1.8
entonces tienes que usar este.
export JAVA_HOME =$(/usr/libexec/java_home -v 1.8)
Seguramente funcionará.
Primero averigüe dónde almacena las variables de entorno.
Pasos para configurar la variable de entorno: -
Ahora configure las variables de entorno en su archivo
a. Para emacs.profile puede usar este enlace O ver la captura de pantalla a continuación
si. Para la configuración del perfil 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)
Todo listo Ahora puede actualizar o degradar fácilmente la versión JAVA.
He adaptado la respuesta de @Alex arriba y escribí lo siguiente para arreglar el código para 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)
Puede agregarlo a su .bash_profile para configurar la versión de manera predeterminada.
//Open bash profile
open ~/.bash_profile
export JAVA_HOME=`/usr/libexec/java_home -v 1.8`
// run bash profile
source ~/.bash_profile
Si está utilizando fish y está utilizando mac y desea poder cambiar entre JDK, a continuación me funciona en mac.
La respuesta de @ kenglxn no funcionó para mí y descubrí que bcos no estableció -g, ¡que es global!
Ponga debajo debajo de ~ / .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
Para saber qué versión / versión menor ha instalado, puede hacer:
/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 tiene varias versiones y desea ejecutar algo usando una versión específica, use este ejemplo:
/usr/libexec/java_home -v 1.7.0_75 --exec java -jar you-file.jar
Basado en la respuesta de @markhellewell, creé un par de funciones de alias que lo harán por usted. Simplemente agréguelos a su archivo de inicio de 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
Así es como lo hago en mi Linux (Ubuntu / Mint mate) , supongo que Mac puede hacerlo de manera similar.
Pasos:
/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
es el enlace suave.JAVA_HOME
en un script de inicio. /etc/profile.d/eric.sh
, o simplemente usar ~/.bashrc
. JAVA_HOME=/mnt/star/program/java/java
java -version
debería imprimir la versión de java./mnt/star/program/java/jdk-11
~/.bashrc
, definir variable para varias versiones 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
, defina el comando para cambiar la versión de 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
para que los cambios surtan efecto.Comandos:
jv11
jv8
jvd
_E_JAVA_HOME_D
definición anterior.jv
Salida de ejemplo:
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
.En mi máquina cuando instalo jdk a mano, mantengo la versión menor, luego hago un enlace suave con la versión principal pero sin la versión menor.
por ejemplo,
// este es el directorio real,
jdk1.8.0_191
// este es un enlace suave a jdk1.8.0_191
jdk-8
// este es un enlace suave a jdk-8
ojdk-11
java
Defino el alias de comando en ~/.bashrc
, pero defino la variable en un archivo separado.
Estoy usando ~/.eric_var
para definir las variables, y ~/.bashrc
lo fuente (por ejemplo source $HOME/.eric_var
).
Una manera fácil de incluir un JDK instalado por separado en la lista dada por /usr/libexec/java_home -V
es vincular el directorio de la siguiente manera:
sudo ln -s path/to/jdk /Library/Java/JavaVirtualMachines/jdk-[some-identifier].jdk
Por ejemplo, para registrar el JDK incluido con Android Studio (1.8.0_152 en el momento de la escritura), use:
sudo ln -s /Applications/Android\ Studio.app/Contents/jre/jdk /Library/Java/JavaVirtualMachines/jdk-android-studio.jdk
Ahora java_home
enumerará el JDK debajo Matching Java Virtual Machines
y puede seleccionarlo como se describe anteriormente.
Lo he hecho para la terminal local con
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
Esta herramienta hará el trabajo por usted:
http://www.guigarage.com/2013/02/change-java-version-on-mac-os/
Es un JavaOne simple que se puede usar para definir la versión actual de Java. La versión se puede usar en un shell que se abre después de seleccionar una versión en la herramienta.
SOLUCIÓN MUY FÁCIL: Qué dolor de cabeza, esta fue una solución rápida y fácil que funcionó para mí.
Mac OS Sierra versión 10.12.13
Use las teclas de acceso directo: CMD + MAYÚS + G - escriba "/ Library /"
Encuentra la carpeta JAVA
Haga clic derecho en la carpeta Java = Mover a la papelera (se requiere contraseña)
Instalar: Kit de desarrollo Java SE 8 jdk-8u131-macosx-x64.dmg | Descargar Javascript SDK
/usr/libexec/java_home
?