Где находится JAVA_HOME в macOS от Мохаве (10,14) до Льва (10,7)?

559

Java является дополнительным пакетом в последних версиях macOS.

Тем не менее, после установки кажется, что переменная окружения JAVA_HOME установлена ​​неправильно .

Оливье Рефало
источник
1
Возможный дубликат того, что я должен установить JAVA_HOME на OSX
mipadi
На Mac Sierra у меня есть / Library / Java / JavaVirtualMachines с jdk и Системными настройками> Java, что отличается между этими двумя?
vikramvi
Другой
Не стоит недооценивать вероятность того, что ваша установка Java не была завершена должным образом. Если ни одно из приведенных ниже отличных предложений не работает, попробуйте [пере] установить!
MarkHu

Ответы:

1059

При установленном дополнительном пакете Java или Oracle JDK добавление одной из следующих строк в файл ~ / .bash_profile будет соответственно устанавливать переменную среды.

export JAVA_HOME="$(/usr/libexec/java_home -v 1.6)"
or
export JAVA_HOME="$(/usr/libexec/java_home -v 1.7)"
or
export JAVA_HOME="$(/usr/libexec/java_home -v 1.8)"

Обновление: добавлен флаг -v на основе Jilles ван Гурп ответ .

Оливье Рефало
источник
1
Хорошо знать. Я должен сказать, что я не слишком взволнован со списком возможностей для Lion. Там, кажется, не так много на пути улучшения для моего использования ...
prodigitalson
1
@Oliver: ewww :-) Это, пожалуй, наименее полезная вещь ... У меня всегда несколько окон открываются и располагаются на экране, поэтому я могу видеть несколько вещей одновременно ... как правило, разные макеты в каждом пространстве.
блудница
11
это не сработало для меня. /System/Library/Frameworks/JavaVM.framework/Home работал.
Chaostheory
7
Работает на Maverick тоже!
cbare
3
Для Java 11 и High Sierra экспортируйте JAVA_HOME = "$ (/ usr / libexec / java_home -v 11)"
Вилли Z
112

/usr/libexec/java_homeэто не каталог, а исполняемый файл. Он выводит текущий настроенный JAVA_HOME и фактически не меняет его. Это то, для чего предназначено приложение Java Preferences, которое в моем случае кажется неработоспособным и фактически не меняет JVM правильно. В нем есть список 1.7 JVM, но я могу переключать, снимать и перетаскивать все, что хочу, без изменения выходных данных /usr/libexec/java_home.

Даже после установки 1.7.0 u6 из Oracle на Lion и установки его по умолчанию в настройках, он все равно вернул домой яблочную версию 1.6. Единственное исправление, которое на самом деле работает для меня, это установка JAVA_HOME вручную:

export JAVA_HOME=/Library/Java/JavaVirtualMachines/jdk1.7.0_06.jdk/Contents/Home/

По крайней мере, таким образом при запуске из командной строки он будет использовать 1.7. /usr/libexec/java_homeвсе еще настаивает на 1.6.

Обновление : Понимание Java из командной строки в OSX имеет лучшее объяснение того, как это работает.

export JAVA_HOME=`/usr/libexec/java_home -v 1.7` 

это способ сделать это. Обратите внимание, что обновление до 1.8 работает просто отлично.

Жиль ван Гурп
источник
blog.hgomez.net/2012/07 не работает, но исправлено в ответе, который теперь ссылается на web.archive.org/web/20140813164713/http://blog.hgomez.net/blog/…
Matt C
export JAVA_HOME = "/ usr / libexec / java_home -v 1.8"
Лео Нгуен,
83

Для меня, Mountain Lion 10.8.2, решение с наибольшим количеством голосов не работает. Я установил JDK 1.7 через Oracle и Maven из доморощенного.

Мое решение взято из файла hadoop-env.sh, который я установил из homebrew. Я добавляю следующее предложение в ~ / .bash_profile, и это работает.

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

Это решение также работает для OS X Yosemite с Java 1.8, установленной из Oracle.

onpduo
источник
1
Это сработало бы, если бы вы установили Java 6 от Apple.
Дело в
2
Это работает для меня на Mavricks очень хорошо, но расположение скрипта java_home другое. export JAVA_HOME="$(/System/Library/Frameworks/JavaVM.framework/Versions/Current/Commands/java_home)"
Кристофер Фрост,
1
Я попытался настроить maven на Mac Yosemite, этот способ установки JAVA_HOME работает для меня.
Alocus
У меня работает на Sierra 10.12 и Java 8
Kanak Sony
41

Ни один из приведенных выше ответов не помог мне. Я полагаю, что все ответы для пожилыхOS X

Для OS X Yosemite 10.10 выполните следующие действия.

Используйте ваш любимый текстовый редактор, чтобы открыть: ~/.bash_profile

//This command will open the file using vim
$ vim ~/.bash_profile

Добавьте следующую строку в файл и сохраните ее (: с последующим «x» для vim):

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

Затем в терминале введите следующие две команды, чтобы увидеть вывод:

$ source ~/.bash_profile

$ echo $JAVA_HOME

Во второй строке вы обновляете содержимое .bash_profileфайла.

Гири
источник
Я думаю, что я получил ваш пб - вы используете кавычки вместо
обратных
Нет, я использую правильные цитаты, вместо этого я попытался вставить копию, это не сработало. Я обновил свой ответ, потому что он работал на меня.
Гири
@OlivierRefalo Я вижу, вы обновили свой ответ с двойными кавычками ("). Но даже без кавычек, это работает.
Гири
Большое спасибо . Это сработало для меня в Йосемити 10.10
Виджай
2
Это единственное решение, которое действительно работает. Добавление пути любым другим решением добавит временно, пока вы не завершите работу терминала, и путь не исчезнет. Чтобы быть добавленным навсегда, путь должен быть сохранен в файле .bash_profile. Тем временем я использовал nano, а не vim, для простоты.
Надим Джамали
31

Обновление для Java 9 и некоторые аккуратные псевдонимы.

В .bash_profile:

export JAVA_HOME8=`/usr/libexec/java_home --version 1.8`
export JAVA_HOME9=`/usr/libexec/java_home --version 9`

Обратите внимание, что для последней версии это 9и не так 1.9.

Установить активную Java:

export JAVA_HOME=$JAVA_HOME8
export PATH=$JAVA_HOME/bin:$PATH

Некоторые дополнительные псевдонимы для переключения между разными версиями:

alias j8='export JAVA_HOME=$JAVA_HOME8; export PATH=$JAVA_HOME/bin:$PATH'
alias j9='export JAVA_HOME=$JAVA_HOME9; export PATH=$JAVA_HOME/bin:$PATH'

Тест в терминале:

% j8
% java -version
java version "1.8.0_121"
Java(TM) SE Runtime Environment (build 1.8.0_121-b13)
Java HotSpot(TM) 64-Bit Server VM (build 25.121-b13, mixed mode)
% j9
% java -version
java version "9"
Java(TM) SE Runtime Environment (build 9+181)
Java HotSpot(TM) 64-Bit Server VM (build 9+181, mixed mode)

РЕДАКТИРОВАТЬ: обновление для Java 10

export JAVA_HOME10=`/usr/libexec/java_home --version 10`
alias j10='export JAVA_HOME=$JAVA_HOME10; export PATH=$JAVA_HOME/bin:$PATH'

РЕДАКТИРОВАТЬ: Обновление для Java 11

export JAVA_HOME11=`/usr/libexec/java_home --version 11`
alias j11='export JAVA_HOME=$JAVA_HOME11; export PATH=$JAVA_HOME/bin:$PATH'
Питер Келлер
источник
29

Вышесказанное не работает для меня с инструментами Amazon EC2, потому что это ожидает bin/javaи т.д. под ним JAVA_HOME. /System/Library/Frameworks/JavaVM.framework/Homeсделал работу.

Cawflands
источник
Был ли это лев? Вы получили официальный пакет Java от Apple или Java6 / 7 от Oracle?
Оливье Рефало
Я считаю, что это был пакет Java от Apple.
Cawflands
1
@ AndrewH да, я нашел то же самое, чтобы быть правдой. Установил пакет Java от Apple и обнаружил фактический путь к библиотеке (например, для установки -vm в eclipse.ini): /System/Library/Java/Support/Deploy.bundle/Contents/Home/lib/javaws.jar
noogrub
Спасибо за информацию. Может быть, я слишком прост, но почему OS X превращает такую ​​простую вещь в полный беспорядок?
Куберчаун
18

Для OS X вы можете сделать:

export JAVA_HOME=`/System/Library/Frameworks/JavaVM.framework/Versions/Current/commands/java_home`
sufinawaz
источник
Следует отметить, что HFS + нечувствителен к регистру.
sufinawaz
14

В Mac OS X Lion для запуска Visualgc я использовал:

export JAVA_HOME=/System/Library/Frameworks/JavaVM.framework/Versions/1.6.0/Home
EGHM
источник
1
Я не получил ваше предложение: чем это отличается от экспорта JAVA_HOME = /usr/libexec/java_home ? команда / usr / libexec / java_home возвращает /System/Library/Java/JavaVirtualMachines/1.6.0.jdk/Contents/Home
Оливье Рефало,
Для выходов visualgc / usr / libexec / java_home: java.exe, найденный по адресу: / usr / libexec / java_home, не находится в каталоге JDK. Установите и экспортируйте переменную среды JVMSTAT_JAVA_HOME, чтобы она ссылалась на каталог, содержащий JDK Sun J2SE 1.5.0 (не JRE), и повторите попытку.
EGHM
13

Следующее сработало для меня. Я использую ZSH на OSX Yosemite с установленной Java 8.

Следующая команда /usr/libexec/java_homeотправляет путь к JDK home:

/Library/Java/JavaVirtualMachines/jdk1.8.0_05.jdk/Contents/Home

В вашем ~/.zshrc,

export JAVA_HOME = "/Library/Java/JavaVirtualMachines/jdk1.8.0_05.jdk/Contents/Home"
Hemanta
источник
Чем это отличается от предлагаемого решения?
Оливье Рефало
Это не отличается от предложенного решения. Это решение предназначено для людей, использующих ZSH, Java 8 и OSX Yosemite.
Hemanta
Работал как шарм с java 1.8, установленной на OSX Yosemite, ура приятель.
Ashoor
Общее решение прекрасно работает для Java 8, zsh и Yosemite.
Яуай
10

Лучший (более обновляемый) способ - использовать следующее:

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

Это должно работать с AWS также, так как он находится binпод Home

czarcrab
источник
1
В некотором смысле не согласен с этим утверждением «более обновляемый» / usr / libexec / java_home - это исполняемый файл, который возвращает путь, а не фиксированный путь. Кроме того, в зависимости от того, какую версию jvm вы используете, путь выше не будет совпадать
Olivier Refalo
10

Более новые Oracle JVM, такие как 1.7.0_21-b12, устанавливаются здесь:

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

Арчи
источник
1
Действительно - и /usr/libexec/java_homeинструмент возвращает ошибку для этих версий Java.
Джо Диндейл
1
Это единственный ответ, который работает для меня после загрузки
v1.7
2
Это путь, если вы устанавливаете JRE. Большинство рейтинговых ответов и комментариев касаются JDK. Не то же самое.
8None1
9

для macOS Mojave 10.14.1 и JAVA 11.0.1 я установил профиль как

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

введите в терминале это, чтобы подтвердить:

$JAVA_HOME/bin/java -version

java version "11.0.1" 2018-10-16 LTS
Java(TM) SE Runtime Environment 18.9 (build 11.0.1+13-LTS)
Java HotSpot(TM) 64-Bit Server VM 18.9 (build 11.0.1+13-LTS, mixed mode)
Цзюлун Чжао
источник
1
Работает на Каталину. Ты
TuGordoBello
5

Мой подход:

.bashrc

export JAVA6_HOME=`/usr/libexec/java_home -v 1.6`
export JAVA7_HOME=`/usr/libexec/java_home -v 1.7`
export JAVA_HOME=$JAVA6_HOME

# -- optional
# export PATH=$JAVA_HOME/bin:$PATH

Это позволяет очень легко переключаться между J6 и J7

Майк Миттерер
источник
@AdonisSMU вы нашли решение?
Луккас
3

Мне пришлось явно указать точный путь в моем MacBook Air.

Последовали шаги:

  1. попробуйте echo $JAVA_HOME(если он установлен, он покажет путь), если нет, попробуйте найти его, используяsudo find /usr/ -name *jdk
  2. Отредактируйте Bash p с помощью - sudo nano ~/.bash_profile
  3. Добавьте точный путь к JAVA Home (путь из шага 2 выше) export JAVA_HOME=/Library/Java/JavaVirtualMachines/jdk1.8.0_144.jdk/Contents/Home
  4. Сохранить и выйти
  5. Проверьте JAVA_Home, используя - echo $JAVA_HOME

Я использую MACOS MOJAVE - 10.14.2 (18C54) на Macbook Air с JAVA 8

Робин
источник
2

Для Mac OS X 10.9 я установил последнюю версию JRE из Oracle, а затем сбросил JAVA_HOME на /Library/Java/JavaVirtualMachines/jdk1.7.0_45.jdk/Contents/Home.

Я уверен, что есть лучший способ, но заставил меня работать.

hughsmac: ~ hbrien $ echo $ JAVA_HOME /Library/Java/JavaVirtualMachines/jdk1.7.0_45.jdk/Contents/Home

Хью Бриен
источник
1
На новой установке Mavericks это единственное решение, которое сработало для меня. Пришлось указать sqldeveloper на дом jdk, расположенный здесь (как предложено в этой ветке, чтобы заставить его работать.
Крис
2

OSX Yosemite, ZSH и Java SE Runtime Environment 8, мне пришлось:

$ sudo ln -s /System/Library/Frameworks/JavaVM.framework/Versions/Current/Commands /System/Library/Frameworks/JavaVM.framework/Versions/Current/bin

и в ~ / .zshrc измените JAVA_HOME на export JAVA_HOME="/System/Library/Frameworks/JavaVM.framework/Versions/Current"

mmell
источник
1

После обновления Mac OS возникла та же проблема, и у меня сработало следующее:

  1. cmd> vi ~ / .bash_profile

  2. Добавьте / обновите строку для JAVA_HOME: export JAVA_HOME = "/ Библиотека / Java / JavaVirtualMachines / jdk1.7.0_15.jdk / Contents / Home"

  3. cmd> source ~ / .bash_profile или откройте новый терминал

Я думаю, что версия JDK может отличаться, так что просто используйте версию, которая у вас есть в / Library / Java / JavaVirtualMachines /

user1270392
источник
1

Если вам нужно иметь несколько версий JDK под Mac OS X (Yosemite), может быть полезно добавить некоторые сценарии для автоматического переключения между ними.

Что вы делаете, это редактируете ваш ~ / .bash_profile и добавляете следующее:

function setjdk() {
  if [ $# -ne 0 ]; then
   removeFromPath '/System/Library/Frameworks/JavaVM.framework/Home/bin'
   if [ -n "${JAVA_HOME+x}" ]; then
    removeFromPath $JAVA_HOME
   fi
   export JAVA_HOME=`/usr/libexec/java_home -v $@`
   export PATH=$JAVA_HOME/bin:$PATH
  fi
 }
 function removeFromPath() {
  export PATH=$(echo $PATH | sed -E -e "s;:$1;;" -e "s;$1:?;;")
 }
setjdk 1.7

Сценарий сначала удаляет другие версии JDK из PATH, чтобы они не мешали нашей новой версии JDK. Затем он разумно использует / usr / libexec / java_home, который представляет собой команду, в которой перечислены установленные версии JDK. -V аргумент говорит JAVA_HOME , чтобы вернуть путь к JDK с прилагаемой версией, например 1.7. Мы также обновляем PATH, чтобы он указывал на каталог bin недавно найденного каталога JAVA_HOME . В конце мы можем просто выполнить функцию, используя

setjdk 1.7

который выбирает последнюю установленную версию JDK ветки 1.7. Чтобы выбрать конкретную версию, вы можете просто выполнить

setjdk 1.7.0_51

вместо. Запустите / usr / libexec / java_home -V чтобы получить более подробную информацию о том, как выбирать версии.

PS Не забудьте получить исходный текст ~ / .bash_profile после его сохранения.

azec-рйх
источник
1

Для Java 11 (JDK 11) его можно найти с помощью следующей команды:

/usr/libexec/java_home -v 11
Павел
источник
0

Этот ответ относится к горному льву, а не льву. Мне нужно было сделать это для инструментов командной строки AWS. Согласно документам AWS , текущие which javaдоходы/usr/bin/java .

Итак, я установил JAVA_HOME=/usrв своем.bashrc .

Судя по всему, /usr/bin/javaэто символическая ссылка, /System/Library/Frameworks/JavaVM.framework/Versions/Current/Commands/javaкоторая заставляет все это работать.

Обновить

Как упомянуто в комментарии ниже, это JAVA_HOMEзначение не является идеальным решением, когда JAVA_HOMEпеременная окружения должна использоваться не только инструментами командной строки AWS. Тем не менее, он отлично работает для инструментов командной строки AWS, как указано в их документах.

Anjan
источник
Дело в том, что / usr не является правильным каталогом JAVA_HOME. Это нормально, чтобы найти бен / Java. Но иногда сборщики (ant, make) используют JAVA_HOME для ссылки на компилятор javac в lib / tools.jar. Ваше решение не удастся
Olivier Refalo
Ах, спасибо за информацию. Вы правы. Обновлю ответ.
Анжан
0

Для Mac Yosemite,

JDK 1.7.0_xx использует

$ ls -ltar /usr/bin/java
/System/Library/Frameworks/JavaVM.framework/Versions/Current/Commands/java

JAVA_HOME

/Library/Java/JavaVirtualMachines/jdk1.7.0_xx.jdk/Contents/Home
Mikey
источник
Можете ли вы добавить дополнительную информацию, чтобы сделать этот ответ полезным.
Мика
0

Любой, кто использует AUSKEY из Австралийского налогового управления (ATO), должен удалить AUSKEY. Это решило мои проблемы с JAVA_HOME.

Это также больше не требуется для пользователей MAC. Ях!

Кейт
источник
0

Я использую рыбу оболочку на High Sierra 10.13.4 и устанавливаю Java через Brew.

Он не настроен автоматически, поэтому для правильной настройки в моей системе я запускаю:

set -U JAVA_HOME (/usr/libexec/java_home)
chrismacp
источник
0

Просто установите java_home версии 1.8 jdk в netbeans.confфайл:

/Applications/NetBeans/NetBeans 8.2.app/Contents/Resources/NetBeans/etc/netbeans.conf

раскомментировать строку:

netbeans_jdkhome="path/to/jdk"

и установите путь к вашему 1.8 JDK, в моем случае:

netbeans_jdkhome="/Library/Java/JavaVirtualMachines/jdk1.8.0_121.jdk/Contents/Home"

Этот подход предполагает наличие нескольких версий JDK на Mac OS

Александр Колундаев
источник
0

Для пользователей терминалов Fish на Mac (я думаю, что это доступно и для Linux), это должно работать:

set -Ux JAVA_8 (/usr/libexec/java_home --version 1.8)
set -Ux JAVA_12 (/usr/libexec/java_home --version 12)
set -Ux JAVA_HOME $JAVA_8       //or whichever version you want as default
ягуар
источник
-1

для пользователя Mac. Ява 8 следует добавить

export JAVA_HOME=`/usr/libexec/java_home -v 1.8`
# JAVA_HOME=/Library/Java/JavaVirtualMachines/jdk1.8.0_05.jdk/Contents/Home

Ява 6:

export JAVA_HOME=`/usr/libexec/java_home -v 1.6`
# JAVA_HOME=/System/Library/Java/JavaVirtualMachines/1.6.0.jdk/Contents/Home

ссылка: http://qiita.com/seri_k/items/e978c1339ce51f13e297

Kewin
источник