Горный лев только с Java 7

39

Я выполнил чистую установку Mountain Lion и установил JDK7.

java -versionв терминале возвращается java version "1.7.0_05"правильно, все еще настройки Java и некоторые другие программы Java (такие как Eclipse) приводят к запросам установить Java SE 6.

Я могу отлично запустить Eclipse из командной строки с Java 7.

Есть ли способ заставить это работать без необходимости установки Java 6?

никола
источник
1
Это действительно запутано. Почему это все еще не исправлено? Разве повышение безопасности не является основной мотивацией того, почему Apple отказалась от контроля над процедурой обновления Java? Почему тогда OSX все еще предлагает мне установить устаревшую Java? Хлоп!
Джентмат
@gentmatt Java 7 - это не простое обновление для Java 6, это больше похоже на смену ОС. Иногда вещи ломаются, используя большую версию, и обе основные версии обновляются для исправлений безопасности
user151019
@gentmatt Apple больше не хотела Java и, по сути, отказалась от нее. Оракул решил забрать мяч.
Торбьерн Равн Андерсен
1
Все еще глупо требовать Java 6, учитывая, что теперь он устарел ...
Донал Феллоуз

Ответы:

27

JDK 7 будет установлен в /Library/Java/JavaVirtualMachines/1.7.0.jdk, JDK 6 в / System / Library / Java / JavaVirtualMachines.

Чтобы заставить OS X принять Java 7 вместо предложения установить Java 6, достаточно простой символической ссылки:

sudo mkdir /System/Library/Java/JavaVirtualMachines
sudo ln -s /Library/Java/JavaVirtualMachines/1.7.0.jdk /System/Library/Java/JavaVirtualMachines/1.6.0.jdk

Большинство Java-программ будут работать с этим небольшим хакером без необходимости устанавливать Java 6. Настройки Java в OS X (и, возможно, некоторые другие) не будут работать, поскольку, как кажется, они явно проверяют версию JVM при запуске.

никола
источник
1
Во второй строке не должно быть «su», это должно быть «sudo ln -s .....»
Дэвид Моралес
3
Я только что сделал новую установку, включая JDK 7u9, и она была установлена ​​на /Library/Java/JavaVirtualMachines/jdk1.7.0_09.jdk; инструкции работали нормально в противном случае.
Джеффри Уайзман
3
Не упустите символическую ссылку ... Apple недавно выпустила обновление безопасности 1.6. Если вы примените это обновление от Apple, символическая ссылка, кажется, обманывает обновление и устанавливает обновление 1.6 туда, куда указывает символическая ссылка, то есть Oracle 1.7.
Это может сломать вещи, если Java-программе требуется Java 6, а не 7, это может сломаться при использовании другой версии.
user151019
Вот лучшее решение, если вы находитесь на Mavericks: stackoverflow.com/questions/19563766/…
jedesah
4

Примечание: если у вас есть что-то, что действительно нуждается в java6 и не работает с java7, то вы можете отложить установку java7. Причина в том, что может быть немного сложно держать оба 6 и 7 на одном и том же macintosh, так как 7 pkg немного портит некоторые элементы apple-6-java, как подробно описано ниже. Итак, я буду искать некоторые пошаговые инструкции по сохранению 6 и 7 на том же Mac, прежде чем выкатывать это ... См. Также http://reviews.cnet.com/8301-13727_7-57533880-263/ 18 октября 2012 года: обновление java-предпочтений-пропущенных после последней-os-x-java-update

ДЕТАЛИ Предварительно установленный сценарий оболочки в jre-7u9-macosx-x64.dmg просто удаляет преф-панель Apple (а также плагин) без предупреждения ниже.

#!/bin/bash
PLUGIN_BASEDIR=/Library/Internet\ Plug-Ins
PLUGIN_NAME=${PLUGIN_BASEDIR}/JavaAppletPlugin.plugin
MKDIR=`which mkdir`
RM=/bin/rm
# Remove the symlink before installation forcing ystem Preferences.app to refresh its cache
PREF_PANE_NAME=JavaControlPanel.prefpane
PREF_PANE_DEST=/Library/PreferencePanes/
# Actually removes the symlink
if [[ -h "${PREF_PANE_DEST}/${PREF_PANE_NAME}" ]]; then
     ${RM} -rf "${PREF_PANE_DEST}/${PREF_PANE_NAME}"
fi
# Create the /Library/Internet Plug-Ins if not present
if [[ ! -d "${PLUGIN_BASEDIR}" ]]; then
     ${MKDIR} -p "${PLUGIN_BASEDIR}"
fi
# If Apple's plugin is present, then delete it
if [[ -h "${PLUGIN_NAME}" ]] && [[ -d "${PLUGIN_NAME}" ]]; then
    ${RM} -rf "${PLUGIN_NAME}"
fi

=== А сценарий после установки устанавливает символическую ссылку ===

#!/bin/bash
LN=`which ln`
CHOWN=`which chown`
PLUGIN_FILEPATH=/Library/Internet\ Plug-Ins/JavaAppletPlugin.plugin
PREF_PANE_NAME=JavaControlPanel.prefpane
PREF_PANE_SRC=/Library/Internet\ Plug-       Ins/JavaAppletPlugin.plugin/Contents/Home/lib/deploy/JavaControlPanel.prefpane
PREF_PANE_DEST=/Library/PreferencePanes/
if [ ! -h "${PREF_PANE_DEST}/${PREF_PANE_NAME}" ]; then
    ${LN} -s "${PREF_PANE_SRC}" "${PREF_PANE_DEST}"
fi
${CHOWN} -R root:wheel "${PLUGIN_FILEPATH}"
ваниль
источник
-2

Горный лев с одной только Явой 7

Вы на правильном пути ... 

Без установки Java 6

… Ожидается установка, как описано в вопросе.

Итак, мой короткий ответ - да, вы можете использовать только Java 7; но не без установки Java 6.

Пытаться:

  1. разрешить Apple установку Java
  2. удалите из двух каталогов ниже те версии Java, которые больше не требуются:

    / Library / Java / JavaVirtualMachines

    / System / Library / Java / JavaVirtualMachines

(В таком случае, я полагаю, вы можете смело игнорировать обычный совет не мешать /Systemвещам.)

Грэм Перрин
источник
2
Java 7 устанавливается в / Library / Java / JavaVirtualMachines, в то время как Java 6 находится в / System / Library / Java / JavaVirtualMachines Удаление 1.6.0.jdk из / System / Library / Java / JavaVirtualMachines приводит к появлению диалогового окна установки. Кажется, что работает, чтобы сделать символическую ссылку 1.6.0.jdk (в / System / ...) на 1.7.0.jdk (в / Library / ...). Программы Java, которые не проверяют версию Java, работают нормально (блоки Java Preferences при запуске, как кажется, проверяют, установлена ​​ли Java 5 или 6)
Nicolas
Круто - ты бы хотел добавить свой ответ? Пожалуйста, проголосуйте за меня - я не буду обижаться - догадка была явно неверной для вопроса, голосование вниз поможет другим пользователям не делать подобных ошибочных предположений по вопросам, связанным с Java.
Грэм Перрин