Cambiar entre Java 7 y 8 en OS X

25

He instalado Java-8. Ahora quería volver a Java-7 por defecto, así que escribí ...

/usr/libexec/java_home -v 1.7.0_40 --exec java -version
/usr/libexec/java_home -v 1.7.0_40 --exec javac -version

Pero aún veo ...

java -version
java version "1.8.0-ea"
Java(TM) SE Runtime Environment (build 1.8.0-ea-b108)
Java HotSpot(TM) 64-Bit Server VM (build 25.0-b50, mixed mode)

Esto funciona ...

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

Pero me gustaría una solución más permanente.

Alguien ve lo que estoy haciendo mal?

Jackie
fuente

Respuestas:

50

Cambie fácilmente las versiones

  1. Instale las versiones 1.6, 1.7, 1.8 en cualquier orden. Nota: Creo que el último instalado determina cuál se usará para los complementos del navegador, no me importará cambiar los siguientes.

  2. Luego, agregue a su ~/.bashrco ~/.bash_profile, o donde sea:

    #!/bin/bash
    export JAVA_HOME=$(/usr/libexec/java_home -v 1.7)
    
    setjdk() {
       export JAVA_HOME=$(/usr/libexec/java_home -v $1)
    }
    
  3. Verifique el cambio a través de java -version

    $ java -version
    java version "1.7.0_51"
    Java(TM) SE Runtime Environment (build 1.7.0_51-b13)
    Java HotSpot(TM) 64-Bit Server VM (build 24.51-b03, mixed mode)
    
    $ setjdk 1.6
    $ java -version
    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)
    
    $ setjdk 1.8
    $ java -version
    java version "1.8.0"
    Java(TM) SE Runtime Environment (build 1.8.0-b132)
    Java HotSpot(TM) 64-Bit Server VM (build 25.0-b70, mixed mode)
    

Obviamente, el cambio es solo por la duración del shell. Pero ahora puede ver dónde puede configurarlo globalmente.

nkadwa
fuente
2
Un problema: JDK7 se niega a instalar si ya tiene JDK8. Le señala a una URL en oracle.com para obtener más información que le da un 404. Y, por supuesto, las instrucciones de desinstalación para JDK8 no funcionan en absoluto, por lo que ahora estoy básicamente perdido.
Eric W
1
solo use jenv jenv.be
madzohan
9

Puede usar jEnv ( http://www.jenv.be/ ), que es "una herramienta de línea de comandos para ayudarlo a olvidar cómo configurar la variable de entorno JAVA_HOME para cambiar entre diferentes versiones del JDK" (tomado de la página de inicio del proyecto )

Si está familiarizado con Ruby, JEnv es como usar RVM o rbenv. Le ayuda a manejar varios JDK diferentes instalados en su máquina sin tener que escribir su propio script para cambiar de un JDK a otro. Puede cambiar la versión actual de Java basándose, por ejemplo, en el directorio actual o en un archivo de configuración.

Pietro Di Bello
fuente
¿Puedes ampliar esto? Esto parece un comentario, no una respuesta.
Austin T French
Si está familiarizado con Ruby es como usar RVM o rbenv para cambiar la versión actual de Java basada, por ejemplo, en el directorio actual o en un archivo de configuración. Si vas a la página de inicio de JENV, hay un buen tutorial.
Pietro Di Bello
Esta publicación debe ser para todos los que buscan respuestas, por lo que se espera que más detalles en la publicación se consideren una respuesta completa y buena.
Austin T francés
Agregué más información y amplié un poco la respuesta ... espero que esto se vea mejor ahora. Gracias por la respuesta.
Pietro Di Bello
4

No puede cambiar entre versiones de Java. En la documentación ves:

Solo se puede instalar un JRE a la vez. El sistema no instalará un JRE que tenga una versión inferior a la versión actual. Si desea instalar una versión inferior de JRE, primero desinstale la versión actual.

Si desea volver a una versión anterior, debe desinstalar Java 8.

Christian Wörz
fuente
Gracias, pero esto no ayuda a mi opinión sobre OSX.
Jackie
44
@Jackie: En realidad, esto tiene poco que ver con OS X pero más con Oracle. Cuando Apple mantenía el JDK para OS X, era perfecto y fácil cambiar entre las versiones activas de Java. Culpe a Oracle por su mal instalador y no por OS X.
Alessandro Vermeulen
@AlessandroVermeulen con el debido respeto. No es el "instalador". Desearía que no viniera con una versión preinstalada como mis cajas de Linux. Entonces podría "instalarlo" de cualquier forma que quisiera con el binario de Unix. Y luego estaban las versiones anteriores de OSX donde incluso se requería arrancar. En mi humilde opinión, son absolutamente las convenciones utilizadas en OSX que causan el problema.
Jackie
44
Hay varios JDK instalados correctamente en mi máquina; es el complemento de preferencias de Oracles que no permite cambiar de 1.8 a 1.7, desde la línea de comandos con una ruta completa, todos funcionan con éxito. / usr / libexec / java_home -V los enumera a todos - y el panel de preferencias de Java 7 permitió la elección de los JRE de Java 7
user151019
0

Quiero complementar la respuesta de @ nkadwa. Su sugerencia funcionó, pero solo después de cambiar también el enlace simbólico para CurrentSDK. Así que aquí está el código modificado:

setjdk() {
    export JAVA_HOME=$(/usr/libexec/java_home -v $1)
    sudo ln -nsf ${JAVA_HOME%/*} /System/Library/Frameworks/JavaVM.framework/Versions/CurrentJDK
}
setjdk 1.8
imdahmd
fuente