Статьи

Жонглирование нескольких версий Java на OS X Mountain Lion

До появления Mountain Lion Java была в комплекте с OSX. Похоже, что во время обновления версия Java 6, которая была у меня на компьютере, была удалена, по-видимому, из-за проблемы безопасности во время выполнения Java. Это означает, что вы вынуждены установить последнюю версию, которая исправила эту проблему безопасности.

Поэтому я пошел в / Applications / Utilities / открыть Терминал и выполнил следующую команду:
java -version ==> «Нет времени выполнения Java…». Появилось окно с просьбой установить Java. Нажмите «Установить» и получите последнюю версию. установил его, но сразу после того, как я скачал и установил JDK SE 7 из Oracle.

После установки откройте настройки Java (Launchapad / Others), и вы увидите:

Теперь я знал, что у меня есть две версии Java, но какую я использую?

$ java -version
java version "1.6.0_35"
Java(TM) SE Runtime Environment (build 1.6.0_35-b10-428-11M3811)
Java HotSpot(TM) 64-Bit Server VM (build 20.10-b01-428, mixed mode)

Так что, если я хочу использовать JDK SE 7 от Oracle?

Затем мне просто пришлось перетащить Java SE 7 в окне настроек Java на первую позицию в списке.

Этот раз:

$ java -version
java version "1.7.0_05"
Java(TM) SE Runtime Environment (build 1.7.0_05-b06)
Java HotSpot(TM) 64-Bit Server VM (build 23.1-b03, mixed mode)

Я сказал себе: «Давайте узнаем больше, как Java установлена ​​в OS X». Поэтому я вырыл для большего.

Есть несколько очень полезных команд: whereis и which и ls -l .

whereis java ==> /usr/bin/java
ls -l /usr/bin/java ==> /System/Library/Frameworks/JavaVM.framework/Versions/Current/Commands/java

Когда я увидел это, мне стало немного любопытно, поэтому я пошел, чтобы просмотреть каталог версий:

cd /System/Library/Frameworks/JavaVM.framework/Versions
ls ==>
1.4 1.5 1.6 A CurrentJDK
1.4.2 1.5.0 1.6.0 Current

Теперь, почему у меня есть эти старые версии Java на моей машине? Я спрашивал о Спросите Разное:
http://apple.stackexchange.com/questions/57986/multiple-java-versions-support-on-os-x-and-java-home-location

$ sw_vers
ProductName:	Mac OS X
ProductVersion:	10.8.1
BuildVersion:	12B19
$ ls -l /System/Library/Frameworks/JavaVM.framework/Versions
total 64
lrwxr-xr-x  1 root  wheel   10 Sep 16 15:55 1.4 -> CurrentJDK
lrwxr-xr-x  1 root  wheel   10 Sep 16 15:55 1.4.2 -> CurrentJDK
lrwxr-xr-x  1 root  wheel   10 Sep 16 15:55 1.5 -> CurrentJDK
lrwxr-xr-x  1 root  wheel   10 Sep 16 15:55 1.5.0 -> CurrentJDK
lrwxr-xr-x  1 root  wheel   10 Sep 16 15:55 1.6 -> CurrentJDK
lrwxr-xr-x  1 root  wheel   10 Sep 16 15:55 1.6.0 -> CurrentJDK
drwxr-xr-x  7 root  wheel  238 Sep 16 16:08 A
lrwxr-xr-x  1 root  wheel    1 Sep 16 15:55 Current -> A
lrwxr-xr-x  1 root  wheel   59 Sep 16 15:55 CurrentJDK -> /System/Library/Java/JavaVirtualMachines/1.6.0.jdk/Contents

Кажется, что все старые версии являются ссылками на версию CurrentJDK, которая является версией Apple, кроме A и Current, которая связана с A. Я читал кое-что об этом по этому вопросу . Для меня A действует как временная переменная. Если в настройках Java вы установите это в первую позицию, Java 6 от Apple A будет иметь Java 6 от Apple. Если вы поставите на первую позицию Java SE 7 от Oracle, A укажет на эту версию. Ток указывает на А.

/java -version
java version "1.6.0_35"
Java(TM) SE Runtime Environment (build 1.6.0_35-b10-428-11M3811)
Java HotSpot(TM) 64-Bit Server VM (build 20.10-b01-428, mixed mode)
./java -version
java version "1.7.0_05"
Java(TM) SE Runtime Environment (build 1.7.0_05-b06)
Java HotSpot(TM) 64-Bit Server VM (build 23.1-b03, mixed mode)

Это означает, что этот текущий каталог будет указывать на первую версию Java, найденную в настройках Java. Теперь взгляните на следующее:

lrwxr-xr-x  1 root  wheel   59 Sep 16 15:55 CurrentJDK -> /System/Library/Java/JavaVirtualMachines/1.6.0.jdk/Contents

Это означает, что Java от Apple фактически установлена ​​здесь: «/System/Library/Java/JavaVirtualMachines/1.6.0.jdk/»

Как насчет Java SE 7? Я мог поискать в файловой системе, но нашел более простой способ:

Если в настройках Java Java SE 7 находится на первой позиции ==>

$ /usr/libexec/java_home
/Library/Java/JavaVirtualMachines/1.7.0.jdk/Contents/Home

Если Java SE 6 (System) находится на первой позиции ==>

$ /usr/libexec/java_home
/System/Library/Java/JavaVirtualMachines/1.6.0.jdk/Contents/Home

Так что Java на Mountain Lion (OSX) более вероятно будет установлена ​​в одном из следующих мест:

  • / System / Library / Java / JavaVirtualMachines
  • / Library / Java / JavaVirtualMachines
  • ~ / Library / Java / JavaVirtualMachines

Как насчет /System/Library/Frameworks/JavaVM.framework/Versions? Кажется, что это связано с так называемым « мостом Java ». Здесь это, кажется, является родной частью установки Java на OSX.