Почему /usr/libexec/java_home не распознает JDK 1.8?

Я пытаюсь установить JDK 8 на OS X Mountain Lion (чтобы поэкспериментировать с новыми функциями лямбда).

Отправная точка

Машина, недавно обновленная с OS X 10.6 до 10.8, с

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

и эта папка из эпохи OS X 10.6:

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

В ~/.bashrc я установил

export JAVA_HOME=/Library/Java/JavaVirtualMachines/Home

Так что я

$ 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

Как я установил JDK 8

  1. Скачал файл .tar.gz с http://jdk8.java.net/lambda/ и распаковал его в

    • /Библиотека/Java/Виртуальные машины Java/jdk1.8.0.jdk/Содержание/Главная

    (Я создал папки jdk1.8.0.jdk/Contents/Homeвручную)

  2. Изменена символическая ссылка /Library/Java/JavaVirtualMachines/Home, указывающая на jdk1.8.

Теперь у меня есть

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

Но java_homeутилиту, похоже, это не волнует:

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

Он даже не знает, что есть JDK 8:

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

Вопрос

Я хочу, /usr/libexec/java_homeчтобы утилита нашла мои установленные JDK, поэтому я могу использовать что-то вроде этого:

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

и избавиться от Homeсимволической ссылки. Кто-нибудь знает

  • как я могу правильно установить JDK 8?
  • как я могу /usr/libexec/java_homeузнать это?

Ответы (1)

Вам также необходимо скопировать каталог Contents/MacOS и Info.plist из SDK 1.7 и адаптировать их (изменив в нем строки версии).

Тогда ты можешь:

$ 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

Обратите внимание, что это хак, и я не пробовал ничего, кроме запуска java... Я просто опирался на ваш совет по созданию пакета.

Спасибо за ответ, Анжо. Я попробую, как только починю свою систему OS X 10.8 (которая сейчас сломана: [ apple.stackexchange.com/questions/86601/… ).