Warum erkennt /usr/libexec/java_home JDK 1.8 nicht?

Ich versuche, ein JDK 8 auf OS X Mountain Lion zu installieren (um mit den neuen Lambda-Funktionen zu experimentieren).

Startpunkt

Eine Maschine, die kürzlich von OS X 10.6 auf 10.8 aktualisiert wurde, mit

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

und dieser Ordner aus der OS X 10.6-Ära:

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

In ~/.bashrc habe ich gesetzt

export JAVA_HOME=/Library/Java/JavaVirtualMachines/Home

Also habe ich

$ 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

Wie ich JDK 8 installiert habe

  1. Laden Sie die .tar.gz-Datei von http://jdk8.java.net/lambda/ herunter und entpacken Sie sie in

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

    (Ich habe die Ordner jdk1.8.0.jdk/Contents/Homemanuell erstellt)

  2. Der Symlink wurde so geändert /Library/Java/JavaVirtualMachines/Home, dass er auf jdk1.8 zeigt

Jetzt habe ich

$ 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/
  ...

Aber das java_homeDienstprogramm scheint sich nicht darum zu kümmern:

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

Es weiß nicht einmal, dass ein JDK 8 verfügbar ist:

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

Frage

Ich möchte, dass das /usr/libexec/java_homeDienstprogramm meine installierten JDKs findet, damit ich so etwas verwenden kann:

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

und entferne den HomeSymlink. Weiß jemand

  • Wie kann ich JDK 8 richtig installieren?
  • wie kann ich /usr/libexec/java_homees erkennen lassen?

Antworten (1)

Sie müssen auch das Verzeichnis Contents/MacOS und Info.plist aus dem 1.7 SDK kopieren und anpassen (indem Sie die Versionszeichenfolgen darin ändern).

Dann kannst du:

$ 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

Beachten Sie, dass dies ein Hack ist und ich nichts anderes versucht habe, als Java zu starten ... Ich habe nur auf Ihrem Tipp zum Erstellen des Pakets aufgebaut.

Danke für deine Antwort, Anjo. Ich werde es versuchen, sobald ich mein OS X 10.8-System repariert habe (das jetzt kaputt ist: [ apple.stackexchange.com/questions/86601/… ).