¿Cómo configurar o cambiar la versión predeterminada de Java (JDK) en macOS?

1036

¿Cómo se puede cambiar la versión predeterminada de Java en una mac?

6
  • 3
    ¿Qué te dice la ejecución /usr/libexec/java_home?
    Bart
    23 feb 2014 a las 6:00
  • 2
    / usr / libexec / java_home devuelve /System/Library/Java/JavaVirtualMachines/1.6.0.jdk/Contents/Home
    Venkat
    23 feb 2014 a las 6:01
  • Podría ser que solo necesite reiniciar. ¿Has probado eso?
    Bart
    23 feb 2014 a las 6:04
  • 1
    Sí reinició la computadora y la terminal ... sin cambios.
    Venkat
    23/0214 a las 6:55
  • 6
    ¿Podría aceptar la respuesta altamente votada de @markhellewell a continuación? Me habría ayudado a encontrarlo un poco más rápido, y es simplemente agradable. :)
    Taytay
    16 de nov. De 2016 a las 1:10
1867

Primera ejecución /usr/libexec/java_home -Vque dará como resultado 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-462por 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 declarado por 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 sus cambios

source ~/.zshrc
echo $JAVA_HOME
java -version
24
  • 2
    @ MattO'Brien es algo que depende del shell que estés usando y de la configuración que tengas, así que no puedo dar una solución completa para eso ... 14/11/2014 a las 2:25
  • 13
    esos realmente son marcas invertidas en la exportlínea 27/11/14 a las 19:38
  • 7
    Esto no funcionó para mí. Tome la ruta de ejecución de java_home -V y agregue esto al comando de exportación, como este export JAVA_HOME = "/ System / Library / Java / JavaVirtualMachines / 1.6.0.jdk / Contents / Home"
    oden
    28 nov 2014 a las 1:04
  • 74
    Esto funciona en Bash - 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.
    antonyh
    24/12/14 a las 15:28
  • dieciséis
    Asegúrese de utilizar `` not '' para exportar. 12/01/15 a las 10:49
498

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 con fines de desarrollo en macOS El Capitan o más reciente (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. 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 temprano" que tengo por ahora. Quiero controlar el valor predeterminado del sistema, y ​​eso debería ser el último estable.

El siguiente enfoque funciona con Java 7 a 12 al menos (acceso anticipado en el 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 ser elegido de forma predeterminada, cámbiele el nombre Contents/Info.plistaInfo.plist.disabled . Ese JDK aún se puede usar cuando $JAVA_HOMEapunta a él, o se hace referencia explícitamente en un script o configuración. Simplemente será ignorado por el javacomando del sistema .

El iniciador del sistema utilizará el JDK con la versión más alta entre los que tienen un Info.plistarchivo.

Cuando trabaje en un shell con JDK alternativo, elija su método entre las respuestas existentes ( jenvo 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 solo JDK, o no abordan el aspecto de todo el sistema. Muchos explican cómo cambiar $JAVA_HOME, pero esto solo afecta al shell actual y lo que se lanza desde allí. No afectará a 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.

22
  • 21
    Esta es la respuesta que estaba buscando, ya que jenvno JAVA_HOMEpuedo configurar la versión de Java para todo el sistema, es decir, la que usaría Eclipse. 2 de junio de 2017 a las 6:52
  • 3
    @Rodrigo Sí, como se menciona en "Detalles de la investigación" (enlace arriba): "La instalación de un JDK también sobrescribe /Library/Internet Plug-Ins/JavaAppletPlugin.plugin/Contents/Home/. Aparentemente, este es el que se abrirá el nuevo panel de Preferencias; esta es la única excepción que encontré en mi solución: que thingy seguirá usando JDK9 (la última que instalé), pero ninguna otra aplicación Java lo hace ". 26/07/17 a las 13:09
  • 2
    Vale la pena señalar que las versiones de Java se encuentran en / Library / Java / JavaVirtualMachines, y que la excelente solución de trabajo anterior se encuentra dentro de ese contexto. 8 dic 2017 a las 16:53
  • 3
    Exactamente, esta es la mejor y más funcional solución para esta pregunta. Desafortunadamente. 19/02/18 a las 13:22
  • 3
    No puedo agradecerles lo suficiente por esta respuesta. Esto solucionó el lanzamiento de aplicaciones desde el lanzador del sistema operativo.
    k427h1c
    14 nov 2018 a las 20:05
318

Agregando a las respuestas anteriores, puse las siguientes líneas en mi .bash_profile(o .zshrcpara 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, ejecute $ 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)
8
  • 5
    Esta es la sintaxis de Java 9: alias j9="export JAVA_HOME=`/usr/libexec/java_home -v 9`; java -version" 3 oct 2017 a las 6:37
  • 3
    Alias ​​simples impresionantes para un cambio rápido. 11/11/2017 a las 22:59
  • Usar alias j10="export JAVA_HOME=`/usr/libexec/java_home`; java -version"y luego escribir le j10permite volver a la versión actual de Java (en mi caso, Java 10)
    intagli
    1 de mayo de 2018 a las 12:58
  • Haría una herramienta cli similar a nvmpara cambiar las versiones de Java, pero el acrónimo jvmya significa algo más :)
    Andy
    22 de septiembre de 2018 a las 18:48
  • Recibo este error al comprar: /Users/me/.zshrc:8: permission denied: /Library/Java/JavaVirtualMachines/openjdk-12.jdk/Contents/Home 4/04/19 a las 22:28
58

Una función de pez pequeño 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 usa pescado, puede hacer algo similar en bash:

#!/bin/bash

jhome () {
  export JAVA_HOME=`/usr/libexec/java_home [email protected]`
  echo "JAVA_HOME:" $JAVA_HOME
  echo "java -version:"
  java -version
}

Luego, para cambiar entre javas, haga lo siguiente:

$> jhome           #switches to latest java
$> jhome -v 1.7    #switches to java 1.7
$> jhome -v 1.6    #switches to java 1.6

ref: https://gist.github.com/kenglxn/1843d552dff4d4233271

2
  • 1
    esto solo cambia para la sesión de terminal específica. ¿Hay alguna forma de actualizar esto para cambiarlo en todo el sistema?
    ENG618
    23 de marzo de 2016 a las 12:19
  • 1
    Tuve que escribir en export JAVA_HOME=(/usr/libexec/java_home $argv)lugar de la segunda línea de tu jhomefunción. 13/09/18 a las 9:26
41

Usar jenv es una forma fácil.

  1. Instale jenv, consulte Introducción

  2. Configurar jenv

    cd ~/.jenv/candidates/
    mkdir java
    cd java
    mkdir 1.7
    mkdir 1.8
    
  3. Enlace simbólico a la ruta jdk

    ln -s /Library/Java/JavaVirtualMachines/jdk1.7.0_79.jdk/Contents/Home/bin ~/.jenv/candidates/java/1.7
    ln -s /Library/Java/JavaVirtualMachines/jdk1.8.0_45.jdk/Contents/Home/bin ~/.jenv/candidates/java/1.8
    
  4. Estas listo

comando de cambio:

jenv use java 1.8

establecer predeterminado:

jenv default java 1.7
6
  • Solución limpia y agradable. 6 de junio de 2016 a las 11:58
  • En lugar de "jenv use java 1.8", tuve que usar "jenv shell 1.8". "shell" también podría ser "global" o "local" dependiendo de la necesidad. 9 de septiembre de 2016 a las 14:44
  • 3
    jenv es bueno cuando funciona. Sin embargo, recomendaría no hacerlo, ya que "realmente" no cambia la versión predeterminada de Java utilizada, evidente al ejecutar el comando "/ usr / libexec / java_home -V", solo JAVA_HOME. Esto causa problemas extraños con algunas aplicaciones, por ejemplo, Eclipse.
    simon
    17 de enero de 2018 a las 10:01
  • 1
    Además de que esa parte paranoica de mí sugiere no rizar nada para golpear. Incluso si cree que el sitio es de confianza, nadie puede garantizarle que no se puede piratear. Utilice el administrador de paquetes de su sistema operativo. 7 de agosto de 2018 a las 9:43
  • Esa información está desactualizada. Consulta la documentación oficial o instrucciones más detalladas . 13/12/18 a las 7:25
37

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 a java.

Paso a paso:

Después de instalar JDK 1.7, deberá hacer lo necesario sudo ln -snfpara cambiar el enlace a actual java. Para hacerlo, abra la 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.jdkpuede cambiar según la versión de SDK que haya instalado.

Ahora, debe establecer JAVA_HOMEque apunte a dónde jdk_1.7.0_xx.jdkse instaló. Abra de nuevo la Terminal y escriba:

export JAVA_HOME="/Library/Java/JavaVirtualMachines/jdk1.7.0_51.jdk/Contents/Home"

Puede agregar la export JAVA_HOMElínea de arriba en su .bashrcarchivo para tener java permanentemente en su Terminal

10
  • 1
    ¿Cómo configuro la variable JAVA_HOME? ¿Hay algún lugar en particular en el que lo coloque?
    Venkat
    23/0214 a las 5:53
  • ¿Dónde estoy exportando JAVA_HOME? ¿y dónde se guardará eso?
    Venkat
    23/0214 a las 5:59
  • 1
    Actualicé la respuesta. ¿Conoce la versión de SDK que ha instalado? El nombre de la carpeta toma el número de versión del SDK, por lo que los comandos anteriores pueden cambiar un poco.
    Trein
    23/0214 a las 5:59
  • Instalé el último, creo que es 51.
    Venkat
    23 feb 2014 a las 6:01
  • La variable JAVA_HOMEse exportará en la sesión de Terminal actual. Puede agregarlo a nuestro .bashrcsi lo desea. Adaptaré los comandos a la última versión.
    Trein
    23 feb 2014 a las 6:02
32

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)

luego source ~/.bash_profile

0
31

instale 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
0
27

Utilice jenv, es como un administrador de entorno Java. Es superfácil de usar y limpiar.

Para Mac, siga 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 utilizar mediante:

jenv global oracle64-1.6.0
1
  • Estoy usando una herramienta similar: sdkman.io/usage - En mi humilde opinión, mucho mejor enfoque que los alias manuales, etc.
    SathOkh
    30 abr.20 a las 8:30
13

macOS El Capitan o una versión posterior elegirá la versión superior del JDK disponible en /Library/Java/JavaVirtualMachines, por lo que, para degradar, puede cambiar el nombre del archivo Info.plista algo más Info.plist.disabledpara que el sistema operativo elija una versión anterior.

2
  • La forma más fácil de (: Gracias 10/02/20 a las 11:28
  • Esta solución permite ejecutar VisualVM (actualmente no es compatible con JDK 16) con JDK 15 y 16 instalados.
    pyb
    22 mar a las 16:42
13

Cuatro sencillos pasos con terminal para personas que utilizan el proceso predeterminado .. :)

  1. echo $JAVA_HOMEle da inicio de Java actual. Por ejemplo:/Library/Java/JavaVirtualMachines/jdk1.8.0_191.jdk/Contents/Home/

  2. cd /Library/Java/JavaVirtualMachines/ lo llevará a la carpeta donde normalmente instala jdks (puede ser diferente para sus máquinas)

  3. lsaparecen las carpetas disponibles (normalmente tendrá los números de versión, por ejemplo: jdk1.8.0_191.jdk openjdk-11.0.2.jdk)
  4. export JAVA_HOME='/Library/Java/JavaVirtualMachines/openjdk-11.0.2.jdk/Contents/Home' cambiará la casa de Java ..
13

Compartiré mis experiencias con macOS Big Sur v11.4, la mejor manera de lidiar con estos problemas es instalando java usando Homebrew:

1 - Instale Homebrew.

$ ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)"

2 - Instale Homebrew Cask.

$ brew tap homebrew/cask-versions 
$ brew update 
$ brew tap homebrew/cask

3 - Instale la última versión de Java

$ brew cask install java

4 - Instale las otras versiones necesarias de Java (Java8, Java11, Java13).

$ brew tap adoptopenjdk/openjdk

$ brew cask install adoptopenjdk8
$ brew cask install adoptopenjdk11
$ brew cask install adoptopenjdk13
$ brew cask install adoptopenjdk14

5 - Cambiar entre diferentes versiones de Java

Al cambiar entre diferentes versiones de Java, solo necesita agregar lo siguiente a su .bash_profileo .zshrc.

En este caso, queremos poder cambiar entre Java8, Java11, Java13 y Java14:

export JAVA_8_HOME=$(/usr/libexec/java_home -v1.8)
export JAVA_11_HOME=$(/usr/libexec/java_home -v11)
export JAVA_13_HOME=$(/usr/libexec/java_home -v13)
export JAVA_14_HOME=$(/usr/libexec/java_home -v14)

alias java8='export JAVA_HOME=$JAVA_8_HOME'
alias java11='export JAVA_HOME=$JAVA_11_HOME'
alias java13='export JAVA_HOME=$JAVA_13_HOME'
alias java14='export JAVA_HOME=$JAVA_14_HOME'

# default to Java 14
java14

6 - Vuelva a cargar .bash_profileo .zshrcpara que los alias surtan efecto:

$ source ~/.bash_profile

o

$ source ~/.zshrc

7 - Finalmente, puede usar los alias para cambiar entre diferentes versiones de Java.

$ java8
$ java -version
java version "1.8.0_261"

Para obtener más información, puede ver esta publicación: Cómo usar Brew para instalar Java en Mac

2
  • ¿Te importaría hacer una pequeña edición @hermeslm? Viendo esto:brew tap caskroom/cask Error: caskroom/cask was moved. Tap homebrew/cask instead. 2 de septiembre a las 17:55
  • Buena captura @hafichuk, esto funcionó en el momento de esta respuesta. Lo editaré, gracias. 3 de septiembre a las 20:44
12
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 [email protected]`
    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 9etc, etc ...

Si no lo tiene, removeFromPathentonces es:

function removeFromPath() { export PATH=$(echo $PATH | sed -E -e "s;:$1;;" -e "s;$1:?;;") }

10

Puede agregarlo a su .bash_profile para tener la versión configurada por defecto.

//Open bash profile
open ~/.bash_profile

export JAVA_HOME=`/usr/libexec/java_home -v 1.8`

// run bash profile
source ~/.bash_profile
1
  • ¡Gracias! Cosas notables, debe incluir las `marcas. y obviamente, reemplace 1.8 con cualquier versión que pueda necesitar. En mi caso 13.0.2
    Jamie S
    21 mar.20 a las 0:35
9

agregar el siguiente comando al ~/.zshenvarchivo

export JAVA_HOME=`/usr/libexec/java_home -v 1.8` 
0
8
  1. Agregue la siguiente línea de código a su .zshrc (o bash_profile ):

alias j='f(){ export JAVA_HOME=/usr/libexec/java_home -v $1 };f'

  1. Guardar en sesión:

$ source .zshrc

  1. Ejecutar comando (por ejemplo, j 13, j14, j1.8 ...)

$ j 1.8

Explicación Esto está parametrizado por lo que no necesita actualizar el script como otras soluciones publicadas. Si no tiene la JVM instalada, se le indicará. Ejemplos de casos a continuación:

/Users/user/IDE/project $ j 1.8
/Users/user/IDE/project $ java -version
openjdk version "1.8.0_265"
OpenJDK Runtime Environment (AdoptOpenJDK)(build 1.8.0_265-b01)
OpenJDK 64-Bit Server VM (AdoptOpenJDK)(build 25.265-b01, mixed mode)
/Users/user/IDE/project $ j 13
/Users/user/IDE/project $ java -version
openjdk version "13.0.2" 2020-01-14
OpenJDK Runtime Environment (build 13.0.2+8)
OpenJDK 64-Bit Server VM (build 13.0.2+8, mixed mode, sharing)
/Users/user/IDE/project $ j 1.7
Unable to find any JVMs matching version "1.7".
7

Considere el siguiente enfoque solo para cambiar el JDK para cada pestaña específica de su terminal (es decir:) iTerm.

Teniendo en el /Library/Java/JavaVirtualMachinescamino los dos siguientes jdks

  • openjdk8u275-b01
  • openjdk-11.0.9.1+1

Y en el .bash_profilearchivo lo siguiente:

export JAVA_HOME=/Library/Java/JavaVirtualMachines/openjdk-11.0.9.1+1/Contents/Home
export PATH=$JAVA_HOME/bin:$PATH

Si abre Itermcon una primera pestaña A y ejecuta lo siguiente:

javac -version
javac 11.0.9.1

java -version
openjdk version "11.0.9.1" 2020-11-04
OpenJDK Runtime Environment AdoptOpenJDK (build 11.0.9.1+1)
OpenJDK 64-Bit Server VM AdoptOpenJDK (build 11.0.9.1+1, mixed mode)

El resultado es correcto y esperado

Pero si abre una segunda pestaña B y anula ese JDK, haga lo siguiente:

export JAVA_HOME=/Library/Java/JavaVirtualMachines/openjdk8u275-b01/Contents/Home/
export PATH=$JAVA_HOME/bin:$PATH

Luego

javac -version
javac 1.8.0_275

java -version
openjdk version "1.8.0_275"
OpenJDK Runtime Environment (AdoptOpenJDK)(build 1.8.0_275-b01)
OpenJDK 64-Bit Server VM (AdoptOpenJDK)(build 25.275-b01, mixed mode)

Funciona bien. Por supuesto, si la pestaña B está cerrada o abre una nueva pestaña C, todo funciona de acuerdo con la .bash_profileconfiguración

6

Desde la página de manual oficial de 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`
6

Script de conmutador JDK

He adaptado la respuesta de @Alex anterior y escribí lo siguiente para corregir 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;
}

Cambiar a Java 8

$ 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)

Cambiar a Java 9

$ 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)
6

Si aún no puede configurarlo. usando este comando.

exportar JAVA_HOME =/usr/libexec/java_home -v 1.8

entonces tienes que usar este.

exportar JAVA_HOME =$(/usr/libexec/java_home -v 1.8)

seguramente funcionará.

6

Primero averigüe dónde almacena las variables de entorno

  1. emacs
  2. bash_profile
  3. archivo zshrc

Pasos para configurar la variable de entorno: -

  1. Descarga el jdk de JAVA

  2. instalarlo haciendo doble clic

  3. Ahora configure las variables de entorno en su archivo

    una. Para emacs.profile puede usar este enlace O ver la captura de pantalla a continuación

ingrese la descripción de la imagen aquí

B. 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 ..

4

Si está usando fish y está usando 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 configuró -g, ¡que es global!

Ponga 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 secundaria 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
3

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
0
3

Anteriormente usé alias en .zshrc para cambiar fácilmente entre versiones, pero hoy uso SDKMAN. SDKMAN también puede manejar la configuración de Java predeterminado para el sistema y la descarga e instalación de nuevas versiones de Java.

Una vez que sdkman está instalado, puede ejecutar comandos similares a lo que es posible con la herramienta nvm para manejar versiones de nodos.

sdk list javaenumerará las versiones de Java disponibles en su sistema, así como las disponibles en línea para la instalación, incluido su identificador que puede usar en los comandos sdk use, sdk defaulty sdk install.

por ejemplo, para instalar Amazon Corretto 11.0.8 y preguntar si debería ser el nuevo predeterminado, haga esto: sdk install java 11.0.8-amzn

Una característica que también utilizo habitualmente es el .sdkmanrcarchivo. Si lo coloca en un directorio de su máquina y ejecuta el sdk envcomando en el directorio, puede configurar las versiones de la herramienta que se usan solo en ese directorio. También es posible hacer que sdkman cambie las versiones de la herramienta automáticamente usando la sdkman_auto_env=trueconfiguración.

sdkman también admite el manejo de otras herramientas para la JVM como gradle, kotlin, maven y más.

Para obtener más información, consulte https://sdkman.io/usage#env

2

Basado en la respuesta de @markhellewell, creé un par de funciones de alias que lo harán por usted. Solo agrégalos a tu 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

2

Así es como lo hago en mi Linux (Ubuntu / Mint mate) , supongo que Mac puede hacerlo de manera similar.


Instalar y configurar

Pasos:

  • [Básico - parte]
  • Descargue jdk (el archivo .tgz ) a mano.
  • Descomprima y cambie el nombre correctamente, en una ubicación adecuada.
    p.ej /mnt/star/program/java/jdk-1.8
  • Haga un enlace suave, que se cambiará para cambiar la versión de Java más adelante. Por
    ejemplo, ln -s /mnt/star/program/java/jdk-1.8 /mnt/star/program/java/java
    así /mnt/star/program/java/javaes el enlace suave.
  • Establecer JAVA_HOMEen un guión de inicio.
    Podría usar file like /etc/profile.d/eric.sh, o simplemente usar ~/.bashrc.
    p.ejJAVA_HOME=/mnt/star/program/java/java
  • Luego abra un nuevo shell bash. java -versiondebería imprimir la versión de Java.
  • [Más versión - parte]
  • Descargue e instale más versión de Java, según sea necesario, similar a los pasos anteriores.
    p.ej
    /mnt/star/program/java/jdk-11
  • [Interruptor - parte]
  • En ~/.bashrc, defina la variable para varias versiones de Java.
    p.ej
    _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
  • En ~/.bashrc, define el comando para cambiar la versión de Java.
    p.ej
    ## 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"
  • En terminal, source ~/.bashrcpara que los cambios surtan efecto.
  • Entonces podría cambiar usando los comandos definidos.

Comandos: desde la configuración anterior

Comandos:

  • jv11
    Cambiar a Java 11
  • jv8
    Cambiar a Java 8
  • jvd
    Cambie a la versión predeterminada de Java, que se indica con la _E_JAVA_HOME_Ddefinición anterior.
  • jv
    Muestra la versión de Java.

Salida de ejemplo:

[email protected]:~$ 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)

[email protected]:~$ jv11
[email protected]:~$ 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)

[email protected]:~$ jvd
[email protected]:~$ 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)

[email protected]:~$ 

Mecanismo

  • Cambia cambiando el enlace suave, que se usa como JAVA_HOME.

Consejos

  • 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

    // esto es un enlace simbólico al directorio jdk-8ojdk-11
    java

  • Defino el alias de comando en ~/.bashrc, pero defino la variable en un archivo separado.
    Estoy usando ~/.eric_varpara definir las variables y las ~/.bashrcobtendré (por ejemplo source $HOME/.eric_var).

2

Una forma fácil de incluir un JDK instalado por separado en la lista proporcionada por /usr/libexec/java_home -Ves enlazar simbólicamente 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 escribir este artículo), use:

sudo ln -s /Applications/Android\ Studio.app/Contents/jre/jdk /Library/Java/JavaVirtualMachines/jdk-android-studio.jdk

Ahora java_homeenumerará el JDK debajo Matching Java Virtual Machinesy puede seleccionarlo como se describe anteriormente.

0

agregue esta función a bashrc o zshrc, java-change [version]para elegir el JDK

# set and change java versions
function java-change() {
  echo "----- old java version -----"
  java -version
  if [ $# -ne 0 ]; then
    export JAVA_HOME=`/usr/libexec/java_home -v [email protected]`
    export PATH=$JAVA_HOME/bin:$PATH
  fi
  echo "----- new java version -----"
  java -version
}
-1

Estoy usando esta función de pescado que escribí :

function javav
  set min_version 8
  set max_version 99
  set java_home_cmd '/usr/libexec/java_home 2>/dev/null --failfast --version'

  if ! test (eval $java_home_cmd $argv)
    echo "Version not found"
    return 1
  end

  for current_version in (seq $min_version $max_version)
    set path_to_remove (eval $java_home_cmd $current_version)
    if ! test -z $path_to_remove
      echo 'Removing' $path_to_remove 'from PATH'
      set PATH (string match --invert $path_to_remove/bin $PATH)
    end
  end

  echo 'Setting up env for Java' $argv
  set -x JAVA_HOME (eval $java_home_cmd $argv)
  set PATH $JAVA_HOME/bin $PATH
end

Básicamente, automatiza el paso en esta respuesta , de manera similar a esta , pero también se encarga de configurar el PATH.

Simplemente colóquelo .config/fish/functions/y luego úselo así:

javav 11 # Sets to Java 11
javav 16 # Sets to Java 16
-6

SOLUCIÓN DEMASIADO FÁCIL: Qué dolor de cabeza, esta fue una solución rápida y fácil que funcionó para mí.

Mac OS Sierra Version 10.12.13

  1. Utilice las teclas de método abreviado: CMD + MAYÚS + G - escriba "/ Biblioteca /"

  2. Encuentra la carpeta JAVA

  3. Haga clic con el botón derecho en la carpeta Java = Mover a la papelera (se requiere contraseña)

  4. Instalar: Java SE Development Kit 8 jdk-8u131-macosx-x64.dmg | Descargar el SDK de JavaScript

  5. Asegúrese de que la nueva carpeta JAVA aparezca en / BIBLIOTECA /
  6. Instalar Eclipse | Instalar Eclipse IDE para desarrolladores de Java
  7. Boom hecho