Solución:
Nota: Estas soluciones funcionan para varias versiones de Java, incluidas Java 8, Java 11 y el nuevo Java 15, y para cualquier otra versión de Java anterior cubierta por los administradores de versiones enumerados. Esto incluye JDK alternativos de OpenJDK, Oracle, IBM, Azul, Amazon Correto, Graal y más. ¡Trabaje fácilmente con Java 7, Java 8, Java 9, Java 10, Java 11, Java 12, Java 13, Java 14 y Java 15!
Tiene algunas opciones sobre cómo realizar la instalación, así como administrar la conmutación de JDK. La instalación puede realizarse mediante Homebrew, SDKMAN, Jabba o una instalación manual. El cambio se puede realizar mediante JEnv, SDKMAN, Jabba o manualmente configurando JAVA_HOME
. Todos estos se describen a continuación.
Instalación
Primero, instale Java usando el método que prefiera, incluido Homebrew, SDKMAN o una instalación manual del archivo tar.gz. La ventaja de una instalación manual es que la ubicación del JDK se puede colocar en una ubicación estandarizada para Mac OSX. De lo contrario, existen opciones más sencillas como SDKMAN que también instalarán otras herramientas importantes y comunes para la JVM.
Instalación y cambio de versiones con SDKMAN
SDKMAN es un poco diferente y maneja tanto la instalación como el cambio. SDKMAN también coloca los JDK instalados en su propio árbol de directorios, que normalmente es ~/.sdkman/candidates/java
. SDKMAN permite configurar una versión predeterminada global y una versión específica para el shell actual.
-
Instale SDKMAN desde https://sdkman.io/install
-
Enumere las versiones de Java disponibles para asegurarse de conocer el ID de la versión
sdk list java
-
Instale una de esas versiones, por ejemplo, Java 15:
sdk install java 15-open
-
Hacer 15 la versión predeterminada:
sdk default java 15-open
O cambie a 15 para la sesión:
sdk use java 15-open
Cuando enumere las versiones disponibles para la instalación con el comando list, verá una amplia variedad de distribuciones de Java:
sdk list java
E instale versiones adicionales, como JDK 8:
sdk install java 8.0.181-oracle
SDKMAN puede trabajar con versiones existentes previamente instaladas. Simplemente realice una instalación local con su propia etiqueta de versión y la ubicación del JDK:
sdk install java my-local-13 /Library/Java/JavaVirtualMachines/jdk-13.jdk/Contents/Home
Y utilícelo libremente:
sdk use java my-local-13
Hay más información disponible en la Guía de uso de SDKMAN junto con otros SDK que puede instalar y administrar.
SDKMAN administrará automáticamente su PATH
y JAVA_HOME
para usted a medida que cambia de versión.
Instale manualmente desde la página de descarga de OpenJDK:
-
Descargue OpenJDK para Mac OSX desde http://jdk.java.net/ (por ejemplo, Java 15)
-
Desarchive el tar de OpenJDK y coloque la carpeta resultante (es decir,
jdk-15.jdk
) en tu/Library/Java/JavaVirtualMachines/
carpeta ya que esta es la ubicación estándar y esperada de las instalaciones de JDK. También puede instalar en cualquier lugar que desee en la realidad.
Instalar con Homebrew
La versión de Java disponible en Homebrew Cask antes del 3 de octubre de 2018 era, de hecho, Oracle JVM. Ahora, sin embargo, ahora se ha actualizado a OpenJDK. Asegúrese de actualizar Homebrew y luego verá la última versión disponible para instalar.
-
instale Homebrew si aún no lo ha hecho. Asegúrate de que esté actualizado:
brew update
-
Agregue el grifo de barriles, si desea usar las versiones AdoptOpenJDK (que tienden a ser más actuales):
brew tap adoptopenjdk/openjdk
Estos barriles cambian sus versiones de Java con frecuencia, y puede haber otros grifos con versiones adicionales de Java.
-
Busque versiones instalables:
brew search java
o para las versiones AdoptOpenJDK:
brew search jdk
-
Verifique los detalles de la versión que se instalará:
brew info java
o para la versión AdoptOpenJDK:
brew info adoptopenjdk
-
Instale una versión específica del JDK como
java11
,adoptopenjdk8
, oadoptopenjdk13
, o solojava
oadoptopenjdk
para el más actual de esa distribución. Por ejemplo:brew install java brew cask install adoptopenjdk13
Y estos se instalarán en /Library/Java/JavaVirtualMachines/
que es la ubicación tradicional esperada en Mac OSX.
Otras opciones de instalación:
Algunos otros sabores de OpenJDK son:
Azul Systems Java Zulu Las compilaciones certificadas de OpenJDK se pueden instalar siguiendo las instrucciones en su sitio.
Zulu® es una compilación certificada de OpenJDK que cumple totalmente con el estándar Java SE. Zulu es 100% de código abierto y se puede descargar gratuitamente. Ahora, los desarrolladores de Java, los administradores de sistemas y los usuarios finales pueden disfrutar de todos los beneficios de Java de código abierto con flexibilidad de implementación y control sobre el tiempo de actualización.
Amazonas Correto Las compilaciones de OpenJDK tienen un paquete de instalación fácil de usar para Java 8 o Java 11, y se instala según el estándar /Library/Java/JavaVirtualMachines/
directorio en Mac OSX.
Amazon Corretto es una distribución sin costo, multiplataforma y lista para producción del Open Java Development Kit (OpenJDK). Corretto viene con soporte a largo plazo que incluirá mejoras de rendimiento y correcciones de seguridad. Amazon ejecuta Corretto internamente en miles de servicios de producción y Corretto está certificado como compatible con el estándar Java SE. Con Corretto, puede desarrollar y ejecutar aplicaciones Java en sistemas operativos populares, incluidos Linux, Windows y macOS.
¿Dónde está mi JDK?!?!
Para encontrar ubicaciones de Java JDK instalados previamente en las ubicaciones predeterminadas del sistema, use:
/usr/libexec/java_home -V
Máquinas virtuales Java a juego (8):
15, x86_64: “OpenJDK 15” /Library/Java/JavaVirtualMachines/jdk-15.jdk/Contents/Home 14, x86_64: “OpenJDK 14” /Library/Java/JavaVirtualMachines/jdk-14.jdk/Contents/Home 13, x86_64: “OpenJDK 13” /Library/Java/JavaVirtualMachines/openjdk-13.jdk/Contents/Home 12, x86_64: “OpenJDK 12” /Library/Java/JavaVirtualMachines/jdk-12.jdk/Contents/Home
11, x86_64: “Java SE 11” /Library/Java/JavaVirtualMachines/jdk-11.jdk/Contents/Home
10.0.2, x86_64: “Java SE 10.0.2” /Library/Java/JavaVirtualMachines/jdk-10.0.2.jdk/Contents/Home
9, x86_64: “Java SE 9” /Library/Java/JavaVirtualMachines/jdk-9.jdk/Contents/Home
1.8.0_144, x86_64: “Java SE 8” /Library/Java/JavaVirtualMachines/jdk1.8.0_144.jdk/Contents/Home
También puede informar solo la ubicación de una versión específica de Java usando -v
. Por ejemplo, para Java 15:
/usr/libexec/java_home -v 15
/Library/Java/JavaVirtualMachines/jdk-15.jdk/Contents/Home
Conocer la ubicación de los JDK instalados también es útil cuando se utilizan herramientas como JEnv, o cuando se agrega una instalación local a SDKMAN, o se vincula un JDK del sistema en Jabba, y necesita saber dónde encontrarlos.
Si necesita encontrar los JDK instalados por otras herramientas, verifique estas ubicaciones:
- SDKMAN se instala en
~/.sdkman/candidates/java/
- Jabba se instala en
~/.jabba/jdk
Cambio de versiones manualmente
El ejecutable de Java es un contenedor que usará cualquier JDK que esté configurado en JAVA_HOME
, por lo que puede cambiar eso para cambiar también qué JDK está en uso.
Por ejemplo, si instaló o desmarcó JDK 15 para /Library/Java/JavaVirtualMachines/jdk-15.jdk
si es el número de versión más alto, ya debería ser el predeterminado, de lo contrario, simplemente podría configurar:
export JAVA_HOME=/Library/Java/JavaVirtualMachines/jdk-15.jdk/Contents/Home
Y ahora, cualquier ejecutable de Java que esté en la ruta verá esto y usará el JDK correcto.
Utilizando el /usr/libexec/java_home
La utilidad como se describió anteriormente le ayuda a crear alias o ejecutar comandos para cambiar las versiones de Java identificando las ubicaciones de las diferentes instalaciones de JDK. Por ejemplo, creando alias de shell en su .profile
o .bash_profile
cambiar JAVA_HOME
para ti:
export JAVA_8_HOME=$(/usr/libexec/java_home -v1.8)
export JAVA_9_HOME=$(/usr/libexec/java_home -v9)
export JAVA_10_HOME=$(/usr/libexec/java_home -v10)
export JAVA_11_HOME=$(/usr/libexec/java_home -v11)
export JAVA_12_HOME=$(/usr/libexec/java_home -v12)
export JAVA_13_HOME=$(/usr/libexec/java_home -v13)
export JAVA_14_HOME=$(/usr/libexec/java_home -v14)
export JAVA_15_HOME=$(/usr/libexec/java_home -v15)
alias java8='export JAVA_HOME=$JAVA_8_HOME'
alias java9='export JAVA_HOME=$JAVA_9_HOME'
alias java10='export JAVA_HOME=$JAVA_10_HOME'
alias java11='export JAVA_HOME=$JAVA_11_HOME'
alias java12='export JAVA_HOME=$JAVA_12_HOME'
alias java13='export JAVA_HOME=$JAVA_13_HOME'
alias java14='export JAVA_HOME=$JAVA_14_HOME'
alias java15='export JAVA_HOME=$JAVA_15_HOME'
# default to Java 15
java15
Luego, para cambiar las versiones, simplemente use el alias.
java8
java -version
versión de Java “1.8.0_144”
Por supuesto, estableciendo JAVA_HOME
¡también funciona manualmente!
Cambio de versiones con JEnv
JEnv espera que los JDK de Java ya existan en la máquina y puedan estar en cualquier ubicación. Por lo general, encontrará los JDK de Java instalados en /Library/Java/JavaVirtualMachines/
. JEnv permite configurar la versión global de Java, una para el shell actual y una versión local por directorio que es útil cuando algunos proyectos requieren versiones diferentes a otras.
-
Instale JEnv si aún no lo ha hecho, las instrucciones en el sitio http://www.jenv.be/ para la instalación manual o el uso de Homebrew.
-
Agregue cualquier versión de Java a JEnv (ajustar el directorio si lo colocó en otro lugar):
jenv add /Library/Java/JavaVirtualMachines/jdk-15.jdk/Contents/Home
-
Configure su versión global usando este comando:
jenv global 15
También puede agregar otras versiones existentes usando jenv add
de manera similar, y enumere los que están disponibles. Por ejemplo, Java 8:
jenv add /Library/Java/JavaVirtualMachines/jdk1.8.0_144.jdk/Contents/Home
jenv versions
Consulte los documentos de JEnv para obtener más comandos. Ahora puede cambiar entre cualquier versión de Java (Oracle, OpenJDK, otras) en cualquier momento, ya sea para todo el sistema, para shells o por directorio local.
Para ayudar a administrar JAVA_HOME
mientras usa JEnv, puede agregar el complemento de exportación para hacer esto por usted.
$ jenv enable-plugin export
You may restart your session to activate jenv export plugin echo export plugin activated
Es posible que el complemento de exportación no se ajuste JAVA_HOME
si ya está configurado, es posible que deba borrar esta variable en su perfil para que pueda ser administrada por JEnv.
También puedes usar jenv exec <command> <parms...>
para ejecutar comandos individuales con JAVA_HOME
y PATH
configurado correctamente para ese comando, que podría incluir la apertura de otro shell.
Instalación y cambio de versiones con Jabba
Jabba también maneja tanto la instalación como la conmutación. Jabba también coloca los JDK instalados en su propio árbol de directorios, que normalmente es ~/.jabba/jdk
.
-
Instale Jabba siguiendo las instrucciones de la página de inicio.
-
Lista de JDK disponibles
jabba ls-remote
-
Instalar Java JDK 12
instalación de jabba [email protected]
-
Úselo:
uso de jabba [email protected]
También puede alias nombres de versión, vincular a JDK existentes ya instalados y encontrar una combinación de JDK interesantes como GraalVM, Adopt JDK, IBM JDK y más. La guía de uso completa también está disponible en la página de inicio.
Jabba gestionará automáticamente su PATH
y JAVA_HOME
para usted a medida que cambia de versión.
Así es como lo hice.
Paso 1: Instalar Java 11
Puede descargar Java 11 dmg para mac desde aquí: https://www.oracle.com/technetwork/java/javase/downloads/jdk11-downloads-5066655.html
Paso 2: Después de la instalación de Java 11. Confirme la instalación de todas las versiones. Escriba el siguiente comando en su terminal.
/usr/libexec/java_home -V
Paso 3: Editar .bash_profile
sudo nano ~/.bash_profile
Paso 4: Agregue 11.0.1 como predeterminado. (Agregue la siguiente línea al archivo bash_profile).
export JAVA_HOME=$(/usr/libexec/java_home -v 11.0.1)
para cambiar a cualquier versión
export JAVA_HOME=$(/usr/libexec/java_home -v X.X.X)
Ahora presione CTRL + X para salir del bash. Presione ‘Y’ para guardar los cambios.
Paso 5: Recargar bash_profile
source ~/.bash_profile
Paso 6: Confirmar la versión actual de Java
java -version
Cambio manual de la versión predeterminada del sistema sin herramientas de terceros:
Como se detalla en esta respuesta anterior, en macOS /usr/bin/java
es una herramienta contenedora que utilizará la versión de Java señalada por JAVA_HOME
o si esa variable no está configurada, buscará instalaciones de Java en /Library/Java/JavaVirtualMachines/
y usará el que tenga la versión más alta. Determina versiones mirando Contents/Info.plist
debajo de cada paquete.
Armado con este conocimiento, puede:
- controlar qué versión usará el sistema cambiando el nombre
Info.plist
en las versiones que no desea usar como predeterminadas (ese archivo no es usado por el tiempo de ejecución de Java). - controlar qué versión usar para tareas específicas configurando
$JAVA_HOME
Acabo de verificar que esto sigue siendo cierto con OpenJDK y Mojave.
En un sistema nuevo, no hay una versión de Java instalada:
$ java -version
No Java runtime present, requesting install.
Cancele esto, descargue OpenJDK 11 y 12ea en https://jdk.java.net; instalar OpenJDK11:
$ cd /Library/Java/JavaVirtualMachines/
$ sudo tar xzf ~/Downloads/openjdk-11.0.1_osx-x64_bin.tar.gz
System java ahora es 11:
$ java -version
openjdk version "11.0.1" 2018-10-16
[...]
Instale OpenJDK12 (acceso anticipado en este momento):
$ sudo tar xzf ~/Downloads/openjdk-12-ea+17_osx-x64_bin.tar.gz
Sistema java ahora tiene 12 años:
$ java -version
openjdk version "12-ea" 2019-03-19
[...]
Ahora “ocultemos” OpenJDK 12 del contenedor Java del sistema:
$ cd jdk-12.jdk/Contents/
$ sudo mv Info.plist Info.plist.disabled
Java del sistema ha vuelto a la versión 11:
$ java -version
openjdk version "11.0.1" 2018-10-16
[...]
Y aún puede usar la versión 12 puntualmente configurando manualmente JAVA_HOME
:
$ export JAVA_HOME=/Library/Java/JavaVirtualMachines/jdk-12.jdk/Contents/Home
$ java -version
openjdk version "12-ea" 2019-03-19
[...]