¿Por qué /usr/libexec/java_home no reconoce JDK 1.8?

Estoy tratando de instalar un JDK 8 en OS X Mountain Lion (para experimentar con las nuevas características de lambda).

Punto de partida

Una máquina actualizada recientemente de OS X 10.6 a 10.8, con

$ sw_vers
  ProductName:    Mac OS X
  ProductVersion: 10.8.2
  BuildVersion:   12C60

$ ls -l /Library/Java/JavaVirtualMachines/
  Home@ -> jdk1.7.0_09.jdk/Contents/Home/
  jdk1.7.0_09.jdk/

$ ls -l /System/Library/Java/JavaVirtualMachines/
  1.6.0.jdk/

y esta carpeta de la era OS X 10.6:

/System/Library/Frameworks/JavaVM.framework/Versions/

En ~/.bashrc he configurado

export JAVA_HOME=/Library/Java/JavaVirtualMachines/Home

Así que tengo

$ java -version
  java version "1.7.0_09"
  Java(TM) SE Runtime Environment (build 1.7.0_09-b05)
  Java HotSpot(TM) 64-Bit Server VM (build 23.5-b02, mixed mode)

$ /usr/libexec/java_home
  /Library/Java/JavaVirtualMachines/jdk1.7.0_09.jdk/Contents/Home

Cómo instalé JDK 8

  1. Descargó el archivo .tar.gz de http://jdk8.java.net/lambda/ y lo descomprimió en

    • /Biblioteca/Java/JavaVirtualMachines/jdk1.8.0.jdk/Contenido/Inicio

    (Creé las carpetas jdk1.8.0.jdk/Contents/Homemanualmente)

  2. Cambió el enlace simbólico /Library/Java/JavaVirtualMachines/Homepara apuntar a jdk1.8

Ahora tengo

$ java -version
  openjdk version "1.8.0-ea"
  OpenJDK Runtime Environment (build 1.8.0-ea-lambda-nightly-h2135-20121203-b67-b00)
  OpenJDK 64-Bit Server VM (build 25.0-b05, mixed mode)

$ echo $JAVA_HOME
  /Library/Java/JavaVirtualMachines/Home

$ ls /Library/Java/JavaVirtualMachines
  Home@ -> jdk1.8.0.jdk/Contents/Home/
  ...

Pero a la java_homeutilidad no parece importarle:

$ /usr/libexec/java_home 
  /Library/Java/JavaVirtualMachines/jdk1.7.0_09.jdk/Contents/Home

Ni siquiera sabe que hay un JDK 8 disponible:

$ /usr/libexec/java_home -v 1.8*
  Unable to find any JVMs matching version "1.8*".

Pregunta

Me gustaría que la /usr/libexec/java_homeutilidad encuentre mis JDK instalados, para poder usar algo como esto:

alias setjdk17='export JAVA_HOME=$(/usr/libexec/java_home -v 1.7*)'
alias setjdk18='export JAVA_HOME=$(/usr/libexec/java_home -v 1.8*)'

y deshacerse del Homeenlace simbólico. Alguien sabe

  • ¿Cómo puedo instalar correctamente JDK 8?
  • ¿Cómo puedo hacer /usr/libexec/java_homeque lo reconozca?

Respuestas (1)

También debe copiar el directorio Contents/MacOS e Info.plist del SDK 1.7 y adaptarlos (cambiando las cadenas de versión en él).

Entonces tú puedes:

$ export JAVA_HOME=/Library/Java/JavaVirtualMachines/jdk1.8.0.jdk/Contents/Home
$ java -version
openjdk version "1.8.0-ea"
$ /usr/libexec/java_home -v 1.8*
/Library/Java/JavaVirtualMachines/jdk1.8.0.jdk/Contents/Home

Tenga en cuenta que esto es un truco y no intenté nada más que iniciar Java ... Solo estaba construyendo sobre su sugerencia de crear el paquete.

Gracias por tu respuesta, Ajo. Lo intentaré tan pronto como repare mi sistema OS X 10.8 (que ahora está roto: [ apple.stackexchange.com/questions/86601/… ).