Mac OS X y múltiples versiones de Java

333

¿Cómo puedo instalar un Java adicional en MacOS? Instalé jdk8 y eso funciona bien. pero ahora necesito una instalación jdk7 para fines de desarrollo. Cuando intento instalar la versión anterior a través del archivo DMG, recibo una advertencia de que ya hay una versión más nueva de Java instalada y el instalador se cierra.

/usr/libexec/java_home -verbose
Matching Java Virtual Machines (1):
    1.8.0_20, x86_64:   "Java SE 8" /Library/Java/JavaVirtualMachines/jdk1.8.0_20.jdk/Contents/Home

   /Library/Java/JavaVirtualMachines/jdk1.8.0_20.jdk/Contents/Home

¿Cómo instalar jdk7 además de este?

Gracias
Dakky

Dakkar
fuente

Respuestas:

493

La forma más limpia de administrar múltiples versiones de Java en Mac es usarla Homebrew.

Y dentro Homebrew, use:

  • homebrew-cask instalar las versiones de java
  • jenv para gestionar las versiones instaladas de java

Como se ve en http://hanxue-it.blogspot.ch/2014/05/installing-java-8-managing-multiple.html , estos son los pasos a seguir.

  1. instalar homebrew
  2. instalar homebrew jenv
  3. instalar homebrew-cask
  4. instale una versión específica de Java utilizando cask (consulte el párrafo "versiones de homebrew-cask" a continuación)
  5. agregue esta versión para que jenv la administre
  6. compruebe que la versión está gestionada correctamente por jenv
  7. repita los pasos 4 a 6 para cada versión de java que necesite

versiones homebrew-cask

Agregue el homebrew/cask-versionstoque a homebrew usando:

brew tap homebrew/cask-versions

Luego puede ver todas las versiones disponibles:

brew search java

Luego puede instalar las versiones que desee:

brew cask install java7
brew cask install java6

Y agréguelos para que jenv los administre como de costumbre.

jenv add <javaVersionPathHere>

Creo que esta es la forma más limpia y sencilla de hacerlo.


Otra cosa importante a tener en cuenta, como se menciona en Mac OS X 10.6.7 Java Path Current JDK confuso :

Para diferentes tipos de JDK o instalaciones, tendrá diferentes rutas

Puede verificar las rutas de las versiones instaladas utilizando /usr/libexec/java_home -V, consulte ¿Cómo verifico si Java JDK está instalado en Mac?

En Mac OS X Mavericks, encontré lo siguiente:

1) Valor predeterminado de JRE incorporado: /Library/Internet\ Plug-Ins/JavaAppletPlugin.plugin/Contents/Home

2) JDK descargados de Apple: /System/Library/Java/JavaVirtualMachines/1.6.0.jdk/Contents/Home/

3) JDK descargados de Oracle: /Library/Java/JavaVirtualMachines/jdk1.8.0_11.jdk/Contents/Home


Recursos

Adrien Be
fuente
16
Sería bueno mencionar que homebrew-cask se puede instalar con un comando en brew install caskroom/cask/brew-casklugar de brew install caskun complemento de Emacs.
Unnawut
77
Me encontré con algunos problemas al implementar esta solución, uno de los cuales fue jenvdevolver el No such file or directory.error. Este wiki me ayudó a resolverlo. github.com/gcuisinier/jenv/wiki/Trouble-Shooting
juil
10
Agregaría que todas las instalaciones de Java se realizarían /Library/Java/JavaVirtualMachines/y, al agregarlas con jenv addusted, agregue la ruta de esta manera /Library/Java/JavaVirtualMachines/[specific-version]/Contents/Home/. ¡Salud!
Nikolay Tsenkov
14
A partir del 23 de junio de 2017, brew cask search java7corrí , pero no encontré Cask para "java7".
Mingliang Liu
44
@MingliangLIU, sí, yo también ... realmente apesta. Encontré problemas sobre esto en Github donde mencionaron algunas soluciones, pero no pude hacerlo funcionar. Así que terminé teniendo que hacerlo "de forma manual" a través de las páginas web de "descarga e instalación" de Apple y Oracle de las versiones de Java. Luego, /usr/libexec/java_home -Vpara verificar dos veces las rutas donde se instalaron.
Adrien Be
304

Desinstale jdk8, instale jdk7, luego reinstale jdk8.

Mi enfoque para cambiar entre ellos (en .profile):

export JAVA_7_HOME=$(/usr/libexec/java_home -v1.7)
export JAVA_8_HOME=$(/usr/libexec/java_home -v1.8)
export JAVA_9_HOME=$(/usr/libexec/java_home -v9)

alias java7='export JAVA_HOME=$JAVA_7_HOME'
alias java8='export JAVA_HOME=$JAVA_8_HOME'
alias java9='export JAVA_HOME=$JAVA_9_HOME'

#default java8
export JAVA_HOME=$JAVA_8_HOME

Luego, simplemente puede escribir java7o java8en un terminal para cambiar de versión.

(editar: actualizado para agregar la mejora de Dylans para Java 9)

Vegard
fuente
18
Hasta ahora, esta es la mejor opción para mí. puede cambiar fácilmente a cualquier versión con un simple comando "java8" o "java7". Gracias por la ayuda
MMHMasud
44
Excelente ! :) Y para otros como yo puedes usar: ls / Library / Java / JavaVirtualMachines para ver qué versiones están disponibles. Luego puede encender diferentes versiones 1.8.x. Y también tiene que agregar export PATH = $ JAVA_HOME / bin: $ PATH
Nico
44
Gracias por este Solo quería mencionar que he logrado hacer esto instalando jdk7 después de jdk8 (no hay necesidad de desinstalar jdk8).
Titus
66
No sé por qué perdí mi tiempo con jenv, ya que esto simplemente funciona y no satura tu inicio de shell en 0,5 segundos con jenv init.
cvakiitho
2
Si está intentando que Java 9 funcione de esta manera, el argumento de la versión de java_home para Java 9 debería ser simplemente, por 9ejemploexport JAVA_9_HOME=$(/usr/libexec/java_home -v9)
Dylan Nissley
125

Para macOS Sierra 420

Esta guía fue improvisada de varias fuentes (respuestas anteriores, así como otras publicaciones), y funciona perfectamente.

0. Si aún no lo has hecho, instala homebrew.

Ver https://brew.sh/

1. Instalar jenv

brew install jenv

2. Agregue jenv al perfil bash

if which jenv > /dev/null; then eval "$(jenv init -)"; fi

3. Agregue jenv a su camino

export PATH="$HOME/.jenv/shims:$PATH"

4. Toque "caskroom / versiones"

FYI: "Tap" extiende la lista de repositorios disponibles de brew que puede instalar, más allá de la lista predeterminada de repositorios disponibles de brew.

brew tap caskroom/versions

5. Instale la última versión de java

brew cask install java

6. Instale java 6 (o 7 u 8 lo que necesite)

brew cask install java6
#brew cask install java7
#brew cask install java8

? Tal vez cierre y reinicie Terminal para ver cualquier nuevo ENV que se haya configurado.

7. Revisar las instalaciones

Todas las versiones de Java se instalan aquí: /Library/Java/JavaVirtualMachinesechemos un vistazo.

ls -la /Library/Java/JavaVirtualMachines

8. Agregue cada ruta a jenv una a la vez.

Necesitamos agregar "/ Contenido / Inicio" a la carpeta de la versión. ADVERTENCIA: El uso de los caminos reales de la máquina ... estos son sólo EJEMPLO s'

jenv add /Library/Java/JavaVirtualMachines/1.6.0___EXAMPLE___/Contents/Home
jenv add /Library/Java/JavaVirtualMachines/jdk-9.0.1.jdk___EXAMPLE___/Contents/Home

9. Compruebe si jenv se registró OK

jenv versions

10. Establecer la versión de Java para usar (globalmente)

Donde XX coincide con uno de los elementos de la lista de versiones anterior.

jenv global XX

Verifique la versión de Java

java -version

Verifique las versiones de jenv

También debe indicar la versión actual que se utiliza con un asterisco.

jenv versions

HECHO


Referencia rápida futura

Para cambiar las versiones de java

... Vea la lista de versiones java disponibles

jenv versions

... entonces, donde XX coincide con un elemento de la lista anterior

jenv global XX
Beto
fuente
1
Además, reiniciar el terminal despuésbrew cask install java*
squeeish
1
Explicación clara y genial paso a paso.
Ritesh Singh
1
Error: el barril 'java8' no está disponible: no existe un barril con este nombre.
Alexey Sh.
66
java8 / 9/10 ya no están disponibles como barriles. Pruebe esto en su lugar: "brew cask install adoptopenjdk / openjdk / adoptopenjdk8"
supi
1
brew tap caskroom/versionsdebería serbrew tap homebrew/cask-versions
Vyacheslav Cotruta
42

SDKMAN! es una gran herramienta para usar múltiples versiones de Java, Gradle, Groovy, Kotlin y otras herramientas JVM en Mac OS. La instalación y el uso del documento están claramente en el sitio principal.

(No tengo afiliación, solo un usuario feliz).

Como ejemplo de uso, si escribo lo siguiente en una ventana de Terminal, hay una lista de versiones de Java SDK disponibles (editadas por brevedad):

$ sdk list java
Available Java Versions
   + 9ea170                                                                        
 > + 8u131                                                                         
     7u141-zulu                     

Aquí +denota que la versión está instalada.>denota qué versión está actualmente en uso. Para instalar una versión:

$ sdk install java 7u141-zulu

Para usar una versión en esta ventana de Terminal:

$ sdk use java 9ea170
Michael Easter
fuente
sdkman admite versiones que comienzan con java 1.7. Si está dispuesto a usar Java 1.6, esta solución puede no ser adecuada para usted.
Aykut Akıncı
SDKMAN es genial, pero no admiten lanzamientos específicos dentro de una versión. Por ejemplo, Datastax Dev Center solo funciona con 1.8.0_151 pero no puedo especificar eso con sdkman. Esperemos que agreguen más versiones.
Eduardo Dennis
Si tiene una versión local, creo que puede instalarla en SDKMan - sdkman.io/usage#localversion (pero no la he probado)
Michael Easter
6

Como se encuentra en este sitio web , comencemos instalando jEnv

  1. Ejecuta esto en la terminal

    brew install https://raw.github.com/gcuisinier/jenv/homebrew/jenv.rb
  2. Agregar jEnv al perfil bash

    if which jenv > /dev/null; then eval "$(jenv init -)"; fi
  3. Cuando instala por primera vez, jEnv no tendrá ningún JDK asociado.

    Por ejemplo, acabo de instalar JDK 8 pero jEnv no lo sabe. Para verificar las versiones de Java en jEnv

    Por el momento, solo encontró la versión Java (jre) en el sistema. Los *espectáculos seleccionado actualmente la versión. A diferencia de rvm y rbenv, jEnv no puede instalar JDK por usted. Debe instalar JDK manualmente desde el sitio web de Oracle.

  4. Instale JDK 6 desde el sitio web de Apple. Esto instalará Java en /System/Library/Java/JavaVirtualMachines/. La razón por la que estamos instalando Java 6 desde el sitio web de Apple es que SUN no creó JDK 6 para MAC, por lo que Apple creó / modificó su propia versión de implementación.

  5. Del mismo modo, instale JDK7 y JDK8.

  6. Agregue JDK a jEnv.

    JDK 6:

    JDK 7: http: //javahabi@javahabit.com/wp-content/uploads/2015/03/img_5518ab9bc47d4.png

    JDK 8: http: //javahabi@javahabit.com/wp-content/uploads/2015/03/img_5518abb2c1217.png

  7. Verifique las versiones de Java instaladas usando jenv

    http: //javahabi@javahabit.com/wp-content/uploads/2015/03/img_5518abceb0deb.png

  8. Así que ahora tenemos 3 versiones de Java en nuestro sistema. Para establecer una versión predeterminada, use el comando

    jenv local <jenv version>

    Ex: quería que Jdk 1.6 iniciara IntelliJ

    jenv local oracle64-1.6.0.65
  9. verifica la versión de java

    java -version http: //javahabi@javahabit.com/wp-content/uploads/2015/03/img_5518abe376dd0.png

Eso es. Ahora tenemos varias versiones de java y podemos cambiar entre ellas fácilmente. jEnv también tiene algunas otras características, como envoltorios para Gradle, Ant, Maven, etc., y la capacidad de configurar las opciones de JVM global o localmente. Consulte la documentación para más información.

Dinesh Arora
fuente
55
No coloque imágenes de sus comandos, es difícil copiarlos / pegarlos. Para resaltar comandos, use las teclas de retroceso "` "para una sola palabra o un comando corto, o aplique sangría a su comando con 4 espacios en su propia línea (o múltiplos de 4 en las listas).
Seki
1
Gracias Seki Estaba luchando por publicar imágenes y pasé mucho tiempo tratando de formatear, pero no pude hacerlo bien. Gracias por compartir la información de backticks.
Dinesh Arora
44
Creo que puede haber usado la misma imagen cuatro veces.
Ellen Spertus
5

Encuentro este administrador de versiones de Java llamado Jabba recientemente y el uso es muy similar a los administradores de versiones de otros idiomas como rvm (ruby), nvm (nodo), pyenv (python), etc. También es multiplataforma, por lo que definitivamente se puede usar en Mac.

Después de la instalación, creará un directorio en ~ / .jabba para colocar todas las versiones de Java que instale. "Admite la instalación de Oracle JDK (predeterminado) / Server JRE, Zulu OpenJDK (desde 0.3.0), IBM SDK, Java Technology Edition (desde 0.6.0) y desde URL personalizadas".

El uso básico se enumera en su Github. Un resumen rápido para comenzar:

curl -sL https://github.com/shyiko/jabba/raw/master/install.sh | bash && . ~/.jabba/jabba.sh

# install Oracle JDK
jabba install 1.8 # "jabba use 1.8" will be called automatically  
jabba install 1.7 # "jabba use 1.7" will be called automatically 

# list all installed JDK's
jabba ls

# switch to a different version of JDK
jabba use 1.8
York Yang
fuente
4

Estoy usando Mac OS X 10.9.5. Así es como administro múltiples JDK / JRE en mi máquina cuando necesito una versión para ejecutar la aplicación A y usar otra versión para la aplicación B.

Creé el siguiente script después de obtener ayuda en línea.

#!bin/sh
function setjdk() {
  if [ $# -ne 0 ]; then
   removeFromPath '/Library/Java/JavaVirtualMachines/'
   if [ -n "${JAVA_HOME+x}" ]; then
    removeFromPath $JAVA_HOME
   fi
   export JAVA_HOME=/Library/Java/JavaVirtualMachines/$1/Contents/Home
   export PATH=$JAVA_HOME/bin:$PATH
  fi
 }
 function removeFromPath() {
  export PATH=$(echo $PATH | sed -E -e "s;:$1;;" -e "s;$1:?;;")
 }
#setjdk jdk1.8.0_60.jdk
setjdk jdk1.7.0_15.jdk

Puse el script anterior en el archivo .profile. Simplemente abra la terminal, escriba vi .profile, agregue el script con el fragmento anterior y guárdelo. Una vez que salga source .profile, ejecutará su script de perfil sin que tenga que reiniciar el terminal. Ahora escriba java -version, debería mostrar 1.7 como su versión actual. Si tiene la intención de cambiarlo a 1.8, comente la línea setjdk jdk1.7.0_15.jdky descomente la línea setjdk jdk1.8.0_60.jdk. Guarde el script y ejecútelo nuevamente con el comando de origen. Utilizo este mecanismo para administrar múltiples versiones de JDK / JRE cuando tengo que compilar 2 proyectos diferentes de Maven que necesitan diferentes versiones de Java.

ChaitanyaBhatt
fuente
3

Jenv en Mac Sierra:

si no funciona después de la instalación, realice esta corrección de errores para agregar el ejecutable de Java a la ruta

export PATH="$HOME/.jenv/shims:$PATH"

aunque eval "$(jenv init -)"podría hacer este trabajo. La razón es que la carpeta / bin ya no está allí como se describe en su página de inicio, pero en su lugar se usa la carpeta shim como / bin.

  • Asegúrese de que ~ / .jenv esté allí
  • which java puede imprimir / Biblioteca / ...
  • jenv global 1.8
  • jenv shell 1.8

Finalmente, which javate da:

/Users/xxxx/.jenv/shims/java

CodeFarmer
fuente
3

En el mismo espíritu que @Vegard (ligero):

  • Instale los JDK deseados con Homebrew
  • Ponga esta jdkfunción bash y un valor predeterminado en su.profile

    jdk() {
        version=$1
        export JAVA_HOME=$(/usr/libexec/java_home -v"$version");
        java -version
     }
    
    export JAVA_HOME=$(/usr/libexec/java_home -v11); # Your default version
  • y luego, para cambiar tu jdk, puedes hacer

     jdk 9
     jdk 11
     jdk 13

Basado en https://github.com/AdoptOpenJDK/homebrew-openjdk .

hulius
fuente
0

Aquí hay una versión más SECA para bash (según la respuesta de Vegard)

Reemplace 1.7 y 1.8 con las versiones que le interesen y obtendrá un alias llamado 'javaX'; donde 'X' es la versión de Java (7/8 en el fragmento a continuación) que le permitirá cambiar fácilmente las versiones

for version in 1.7 1.8; do
    v="${version: -1}"
    h=JAVA_"$v"_HOME

    export "$h"=$(/usr/libexec/java_home -v $version)

    alias "java$v"="export JAVA_HOME=\$$h"
done
elad.chen
fuente
0

Para instalar versiones más recientes de OpenJDK, uso esto. Ejemplo para OpenJDK 14:

brew info adoptopenjdk
brew tap adoptopenjdk/openjdk
brew cask install adoptopenjdk14

Consulte https://github.com/AdoptOpenJDK/homebrew-openjdk para obtener información actualizada.

Matthias Bohlen
fuente