Где находится 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.


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сделал работу.


Был ли это лев? Вы получили официальный пакет 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`

Следует отметить, что HFS + нечувствителен к регистру.
— sufinawaz

14

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

export JAVA_HOME=/System/Library/Frameworks/JavaVM.framework/Versions/1.6.0/Home

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"

Чем это отличается от предлагаемого решения?
— Оливье Рефало

Это не отличается от предложенного решения. Это решение предназначено для людей, использующих 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


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"


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 /


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 после его сохранения.


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, как указано в их документах.


Дело в том, что / 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

Можете ли вы добавить дополнительную информацию, чтобы сделать этот ответ полезным.
— Мика

0

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

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


0

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

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

set -U JAVA_HOME (/usr/libexec/java_home)

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

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.