Що потрібно встановити змінною середовища JAVA_HOME на macOS X 10.6?


436

Багато додатків Java, які використовують сценарії оболонки для налаштування свого середовища, використовують JAVA_HOMEзмінну оточення для запуску правильної версії Java, знаходження JRE JAR тощо.

У macOS X 10.6 наступні контури здаються дійсними для цієї змінної

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

Деякі з них є посиланнями на фактичний поточний VM (як визначено в області налаштувань 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

Список літератури :


20
Має гірський лев
sghill

57
Досі діє Маверикс
Паскаль

42
Досі діє для Yosemite. ;)
Джеффрі Вісман

42
El capitan. Перевір!
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


Для OSX, що працює за замовчуванням, я зазвичай використовую bash .bash_profile- чому ви використовуєте, ніж загальний .profile?
LeeGee

1
Оскільки .profileє загальним, він буде працювати з shабо bash, поки .bash_profileвиключно для bash. Також це виокремлює налаштування від програм, які використовують .bash_profile, наприклад MacPorts. Але ви можете сміливо використовувати будь-яке з двох. Детальніше про це дивіться тут
lucasarruda

1
- FYI, надане вами посилання підтверджує мою підозру, що в bash (тобто за замовчуванням) використовується .bash_profileпереопрацювання .profile.
LeeGee

@LeeGee так, і це робиться тому, що .bash_profileє специфічним, тоді як .profileє загальним для всіх shваріантів.
lucasarruda

1
Оскільки OS / X додає посилання на javaваш, /usr/binне повинно бути явно додавати $JAVA_HOMEдо вашого шляху.
Зак

20

Я маю MAC OS X (Сьєрра) 10.12.2 .

Я налаштував JAVA_HOME працювати над React Native (для додатків Android), виконавши наступні кроки.

  • Відкрийте термінал (Command + R, введіть Terminal, натисніть 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

Це воно.


Це корисно, дякую. Але я вважаю, що ви пропустили включно останній крок, а потім встановити 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системою.
чайка

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. Те, як це працює панель налаштувань, повинно бути в курсі потрібної версії.


/ бін. і перевірте, чи вказує він на / Бібліотека / java, а не / Система / Бібліотека / .., оскільки ця може бути застарілою.
JRun

1
Це вже не точно. В OS X 10.5 і новіших версіях використовуйте / usr / libexec / java_home, щоб знайти шлях.
Крістофер Джонсон

8

Це вище вже не працює в YOSEMITE для ГРАФІЧНИХ ЗАЯВ! Як затьмарення, або все, що починалося з Spotlight. (.bash_profile, launchd.conf працює лише для термінальних сеансів.) Перед запуском затемнення просто відкрийте вікно терміналу і видайте таку команду:

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

(З вашим контуром встановлення! Можливо, працює з $ (/ usr / libexec / java_home) замість повного шляху теж.)

Перегляньте всю чудову статтю про постійне рішення тут: Налаштування змінних умов середовища через startd.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 (справді?) відповідно до ваших потреб та вашої системи


1

Як зазначають інші відповіді, правильним способом пошуку домашнього каталогу Java є використання /usr/libexec/java_home.

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


Це дублікат!
Франклін Ю

Я думаю, що включення посилання на офіційну документацію Apple робить це не зайвим. Але якщо це так, правильна дія полягає в тому, щоб позначити це як дублікат, а не робити коментарі.
Крістофер Джонсон

Я зробив коментар, оскільки не можу позначити відповідь як дублікат. Переповнення стека дозволяє лише користувачеві позначати питання як дублікат (на жаль). Посилання корисне, але я вважаю, що коментар до поточної відповіді (або просто відредагуйте її за допомогою посилання, оскільки у вас вже є можливість) було б краще, оскільки вона концентрує всю корисну інформацію в одній одній відповіді. Я вважаю, що десь було правило, що Stack Overflow віддає перевагу виправленню поточних відповідей над написанням нового.
Франклін Ю

1

Для мене Maven, здається, працює з .mavenrcфайлом:

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

Я впевнений, що я його також взяв на SO, просто не пам'ятаю, де.


1

Створити файл ~/.mavenrc

потім вставте це у файл

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

тест

mvn -v


Мені подобається такий підхід, тому що він дозволяє мені легко змінювати версію Java у файлі .mavenrc.
Спіндізі

1

Рекомендується перевірити оболонку терміналу за замовчуванням перед встановленням змінної середовища JAVA_HOME за допомогою наступних команд:

$ echo $SHELL
/bin/bash

Якщо терміналом за замовчуванням є / bin / bash (Bash), то слід скористатися методом @hygull

Якщо терміналом за замовчуванням є / bin / zsh (Z Shell), вам слід встановити цю змінну середовища у файлі ~ / .zshenv із наступним вмістом:

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

Аналогічно, будь-який інший тип терміналу, не згаданий вище, слід встановити змінну середовища у відповідному файлі env-терміналу.

Цей метод перевірений, працюючи в macOS Mojave Версія 10.14.6 .


-1

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

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.