¿Cómo configurar o cambiar la versión predeterminada de Java (JDK) en macOS?
¿Cómo se puede cambiar la versión predeterminada de Java en una Mac?
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 ejecutes 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 (como lo indica antonyh ):
export JAVA_HOME=$(/usr/libexec/java_home -v 1.8)
Para pescado (según lo indicado por ormurin)
set -x JAVA_HOME (/usr/libexec/java_home -d64 -v1.8)
La actualización del archivo .zshrc debería funcionar:
nano ~/.zshrc
export JAVA_HOME=$(/usr/libexec/java_home -v 1.8.0)
Presione CTRL+X para salir del editor Presione Y para guardar los cambios
source ~/.zshrc
echo $JAVA_HOME
java -version
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 ejecuta actualmente) cuando se instalan varias versiones de JDK con 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 de uno a otro fácilmente. Normalmente tengo el último estable para uso general y otros para pruebas. Pero no quiero que el sistema (por ejemplo, cuando inicio mi IDE) utilice la última versión de "acceso anticipado" que tengo por ahora. Quiero controlar el valor predeterminado del sistema, y debería ser el último estable.
El siguiente enfoque funciona al menos con Java 7 a 12 (acceso anticipado 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 ).
Solución sin herramientas de terceros:
- Deje todos los JDK en su ubicación predeterminada, en
/Library/Java/JavaVirtualMachines
. El sistema elegirá la versión más alta de forma predeterminada. - Para excluir un JDK de la selección predeterminada, cámbiele el nombre
Contents/Info.plist
aInfo.plist.disabled
. Ese JDK aún se puede usar cuando$JAVA_HOME
apunta a él o se puede hacer referencia explícita a él en un script o configuración. Simplemente será ignorado porjava
el 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), solo abordan un único JDK o no abordan el aspecto de todo el sistema. Muchos explican cómo cambiar $JAVA_HOME
, pero esto sólo afecta al shell actual y a lo que se inicia desde allí. No afectará a una aplicación iniciada desde el iniciador del sistema operativo (a menos que cambie el archivo correcto y cierre sesión/inicie sesión, lo cual es tedioso). Lo mismo ocurre con jenv, es genial y todo, pero hasta donde sé, simplemente cambia las variables de entorno, por lo que tiene la misma limitación.
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 j20="export JAVA_HOME=`/usr/libexec/java_home -v 20`; java -version"
alias j19="export JAVA_HOME=`/usr/libexec/java_home -v 19`; java -version"
alias j18="export JAVA_HOME=`/usr/libexec/java_home -v 18`; java -version"
alias j17="export JAVA_HOME=`/usr/libexec/java_home -v 17`; java -version"
alias j16="export JAVA_HOME=`/usr/libexec/java_home -v 16`; java -version"
alias j15="export JAVA_HOME=`/usr/libexec/java_home -v 15`; java -version"
alias j14="export JAVA_HOME=`/usr/libexec/java_home -v 14`; java -version"
alias j13="export JAVA_HOME=`/usr/libexec/java_home -v 13`; java -version"
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)
Usar jenv es una manera fácil. (Actualización 2022)
Instale jenv: consulte Primeros pasos
Instalar java con cerveza
brew install openjdk@11 ln -s /usr/local/opt/openjdk@11/libexec/openjdk.jdk /Library/Java/JavaVirtualMachines/openjdk-11.jdk #other java brew install openjdk@8 brew install openjdk@17
Agregar java a jenv
jenv add /Library/Java/JavaVirtualMachines/openjdk-11.jdk/Contents/Home
Uso: consulte jenv
instalar JDK, no solo JRE
/usr/libexec/java_home -v 1.8
da
/Library/Java/JavaVirtualMachines/jdk1.8.0_111.jdk/Contents/Home
próximo
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 terminales:
export JAVA_HOME="$(/usr/libexec/java_home -v 1.8)"
prueba el comando:
javac -version
debería generar:
javac 1.8.0_111