Что я должен установить переменную среды JAVA_HOME на macOS X 10.6?

436

Многие приложения Java, использующие сценарии оболочки для настройки своей среды, используют JAVA_HOMEпеременную среды для запуска правильной версии Java, поиска JAR-файлов JRE и т. Д.

В macOS X 10.6 следующие пути являются допустимыми для этой переменной

/Library/Java/Home
/System/Library/Frameworks/JavaVM.framework/Home
/System/Library/Frameworks/JavaVM.framework/Versions/Current

Некоторые из них являются символическими ссылками на фактическую текущую виртуальную машину (как определено на панели настроек Java).

Но какой из них следует использовать - или можно использовать любой из них?

Роберт Кристи
источник

Ответы:

849

Я просто установил JAVA_HOMEвывод этой команды, который должен дать вам путь Java, указанный в ваших настройках Java. Вот фрагмент из моего .bashrcфайла, который устанавливает эту переменную:

export JAVA_HOME=$(/usr/libexec/java_home)

Я не испытывал никаких проблем с этой техникой.

Иногда мне приходится менять значение JAVA_HOMEна более раннюю версию Java. Например, для одной поддерживаемой мной программы требуется 32-разрядная версия Java 5 в OS X, поэтому при использовании этой программы я установил JAVA_HOME:

export JAVA_HOME=$(/usr/libexec/java_home -v 1.5)

Для тех из вас, у кого нет java_homeна вашем пути, добавьте это так.

sudo ln -s /System/Library/Frameworks/JavaVM.framework/Versions/Current/Commands/java_home /usr/libexec/java_home

Рекомендации :

mipadi
источник
20
У Mountain Lion это тоже есть
sghill
57
Все еще действителен для Mavericks
Паскаль
42
Все еще действует для Йосемити. ;)
Джеффри Уайзман
42
Эль-Капитан. Проверьте!
gattshjoty
11
Все еще действует для Мохаве
Кейха
40

Кроме того, интересно, чтобы ваш PATH отражал JDK. После добавления JAVA_HOME (что можно сделать с примером, приведенным в 'mipadi'):

export JAVA_HOME=$(/usr/libexec/java_home)

Добавьте также в ~ / .profile:

export PATH=${JAVA_HOME}/bin:$PATH

PS: для OSX я обычно использую .profile в директории HOME вместо .bashrc

lucasarruda
источник
Для OSX под управлением bash по умолчанию я обычно использую bash .bash_profile- почему вы используете, кроме generic .profile?
LeeGee
1
Так как он .profileявляется общим, он будет работать с shили bash, пока .bash_profileявляется эксклюзивным для bash. Также это изолирует настройки от приложений, которые используют .bash_profile, как MacPorts. Но вы можете смело использовать любой из двух. Подробнее об этом здесь
lucasarruda
1
- К вашему сведению, предоставленная вами ссылка подтверждает мое подозрение, что в bash (т.е. по умолчанию) используется .bash_profileпереопределение .profile.
LeeGee
@ LeeGee, да, и делает это потому, что .bash_profileявляется специфическим, тогда .profileкак универсальным, для всех shвариантов.
lucasarruda
1
Поскольку OS / X помещает ссылку javaв ваш /usr/binкаталог, не нужно явно добавлять $JAVA_HOMEваш путь.
Зак
20

я имею MAC OS X (Sierra) 10.12.2 .

Я установил JAVA_HOME для работы с React Native (для приложений Android), выполнив следующие шаги.

  • Откройте Терминал (Command + R, введите Терминал, нажмите ENTER).

  • Добавьте следующие строки в ~ / .bash_profile . export JAVA_HOME=$(/usr/libexec/java_home)

  • Теперь выполните следующую команду. source ~/.bash_profile

  • Вы можете проверить точное значение JAVA_HOME , введя следующую команду. echo $JAVA_HOME

Возвращаемое значение (вывод) будет примерно таким, как показано ниже. /Library/Java/JavaVirtualMachines/jdk1.8.0_131.jdk/Contents/Home

Вот и все.

hygull
источник
Это полезно, спасибо. Но я полагаю, что вы пропустили последний шаг, который затем устанавливает JAVA_HOME на возвращаемое значение в .bashrc / .bash_profile / .zshrc / и т. Д. Пожалуйста, исправьте меня, если я ошибаюсь.
TheProletariat
2
Это не обязательно. В моем случае $JAVA_HOMEотносится $(/usr/libexec/java_home)и $(/usr/libexec/java_home) внутренне упоминается как /Library/Java/JavaVirtualMachines/jdk1.8.0_131.jdk/Contents/HomeСистема.
Hygull
1
Понял. Это требовалось в моем случае. Спасибо.
TheProletariat
14

Я на Mac OS 10.6.8

Самое простое решение работает для меня, просто положить в

$ export JAVA_HOME=$(/usr/libexec/java_home)

Чтобы проверить, работает ли он, вставьте

$ echo $JAVA_HOME

это показывает

/System/Library/Java/JavaVirtualMachines/1.6.0.jdk/Contents/Home

Вы также можете проверить

$ which java
Рей
источник
9

Я склонен использовать /Library/Java/Home. То, как работает панель настроек, должно соответствовать вашей предпочтительной версии.

Clint
источник
/ бен. и убедитесь, что он указывает на / Library / java, а не на / System / Library / .., поскольку он может быть устаревшим.
JRun
1
Это уже не точно. На OS X 10.5 и позже, используйте / usr / libexec / java_home, чтобы найти путь.
Кристофер Джонсон
8

Это выше не работает в YOSEMITE для графических приложений! Как затмение или что-то началось с Spotlight. (.bash_profile, launchd.conf работает только для терминальных сессий.) Перед запуском eclipse просто откройте окно терминала и введите следующую команду:

launchctl setenv JAVA_HOME /Library/Java/JavaVirtualMachines/jdk1.7.0_45.jdk/Contents/Home

(С вашим путем установки! Возможно, работает и с $ (/ usr / libexec / java_home) вместо полного пути.)

Прочитайте всю отличную статью о постоянном решении здесь: Установка переменных среды через launchd.conf больше не работает в OS X Yosemite / El Capitan / macOS Sierra?

Палосси Ласло
источник
2

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

Мой путь Java был здесь:

/Library/Internet Plug-Ins/JavaAppletPlugin.plugin/Contents/Home

и нужно было положить в мою .bash_profile:

export JAVA_HOME=\"/Library/Internet Plug-Ins/JavaAppletPlugin.plugin/Contents/Home\"

Надеюсь помочь

Широ
источник
2

Пропуск настройки терминала, поскольку вы упомянули приложения, постоянная настройка системной переменной среды (работает для macOS Sierra; должна работать и для El Capitan):

launchctl setenv JAVA_HOME $(/usr/libexec/java_home -v 1.8)

(это установит JAVA_HOME на последнюю версию 1.8 JDK, есть вероятность, что вы прошли через несколько обновлений, например, javac 1.8.0_101, javac 1.8.0_131)
Конечно, измените 1.8 на 1.7 или 1.6 (правда?) в соответствии с вашими потребностями и вашей системой

ericn
источник
1

Как отмечают другие ответы, правильный способ найти домашний каталог Java - использовать /usr/libexec/java_home.

Официальная документация для этого находится в Технических вопросах и ответах Apple QA1170: Важные каталоги Java на OS X : https://developer.apple.com/library/mac/qa/qa1170/_index.html

Кристофер Джонсон
источник
Это дубликат!
Франклин Ю
Я думаю, что включение ссылки на официальную документацию Apple делает ее не лишней. Но если это так, правильное действие - пометить его как дубликат, а не комментировать.
Кристофер Джонсон
Я сделал комментарий, потому что не могу пометить ответ как дубликат. Переполнение стека позволяет только пользователю пометить вопрос как дубликат (к сожалению). Ссылка полезна, но я думаю, что комментарий к текущему ответу (или просто отредактируйте его с помощью ссылки, поскольку у вас уже есть такая возможность) был бы лучше, поскольку он концентрирует всю полезную информацию в одном единственном ответе. Я полагаю, что где-то было правило, что переполнение стека предпочитает фиксировать текущие ответы, а не писать новые.
Франклин Ю.
1

Для меня Maven, кажется, работает от .mavenrcфайла:

echo "export JAVA_HOME=$(/usr/libexec/java_home -v 1.8)" > ~/.mavenrc

Я уверен, что я поднял это на SO тоже, просто не могу вспомнить, где.

Maksimov
источник
1

Создать файл ~/.mavenrc

затем вставьте это в файл

export JAVA_HOME=$(/usr/libexec/java_home)

тестовое задание

mvn -v

KhaledMohamedP
источник
Мне нравится этот подход, потому что он позволяет мне очень легко изменить версию Java в файле .mavenrc.
Spindizzy
1

Рекомендуется проверить оболочку терминала по умолчанию перед установкой переменной среды JAVA_HOME с помощью следующих команд:

$ echo $SHELL
/bin/bash

Если ваш терминал по умолчанию - / bin / bash (Bash), то вам следует использовать метод @hygull

Если ваш терминал по умолчанию - / bin / zsh (Z Shell), то вы должны установить эти переменные среды в файле ~ / .zshenv со следующим содержимым:

export JAVA_HOME="$(/usr/libexec/java_home)"

Точно так же, для любого другого типа терминала, не упомянутого выше, вы должны установить переменную окружения в соответствующем файле терминала.

Этот метод проверен на работоспособность в macOS Mojave версии 10.14.6 .

Джерри Чонг
источник
-1

Для пользователей Fish Shell используйте что-то вроде следующего: alias java7 "set -gx JAVA_HOME (/usr/libexec/java_home -v1.7)"

Ичуань Ван
источник