Де JAVA_HOME на macOS Mojave (10.14) до Лева (10.7)?


559

Java - необов'язковий пакет для останніх версій macOS.

Однак після встановлення здається, що змінна середовища JAVA_HOME не встановлена ​​належним чином .


1
Можливий дублікат того, що я повинен встановити на JAVA_HOME на OSX
mipadi

У Mac Sierra I / Library / Java / JavaVirtualMachines, який має jdk та системні налаштування> Java, чим відрізняються ці 2?
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
Добре знати. Я мушу сказати, що я не надто в захваті від списку функцій для Лева. Там, здається, не так багато на шляху покращення мого використання ...
prodigitalson

1
@Oliver: ewww :-) Це, мабуть, найменш корисна річ ... У мене завжди багато вікон, відкритих і розташованих на екрані, щоб я міг бачити кілька речей відразу ... як правило, різний макет на кожному просторі.
блудники

11
це не спрацювало для мене. /System/Library/Frameworks/JavaVM.framework/Home відпрацював.
хаостерія

7
Працює і над Мавериком!
cbare

3
Для Java 11 та Високої Сьєрри експортуйте 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 додому. Єдине виправлення, яке насправді працює для мене, - це встановити 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/…
Мет С

export JAVA_HOME = "/ usr / libexec / java_home -v 1,8"
Лео Нгуєн

83

Для мене, Гірський лев 10.8.2, рішення, яке найбільше проголосували, не працює. Я встановив jdk 1.7 через Oracle і maven від домашньої мови.

Моє рішення - з файлу hadoop-env.sh з hadoop, який я встановив і з домашньої мови. Я додаю нижченаведене речення в ~ / .bash_profile, і воно працює.

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

Це рішення також працює для OS X Yosemite з Java 1.8, встановленою в Oracle.


1
Це спрацювало б, якби ви встановили java 6 від Apple. справа в тому, що ви використовуєте oracle java 7.
Олів'є Рефало

2
Це працює для мене на Mavricks дуже добре, але розташування сценарію java_home відрізняється. export JAVA_HOME="$(/System/Library/Frameworks/JavaVM.framework/Versions/Current/Commands/java_home)"
Крістофер Мороз

1
Я намагався налаштувати maven на mac Yosemite, таким чином, щоб встановити JAVA_HOME працює для мене.
Алокус

Підходить для мене на 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файлу.


Я думаю, що я отримав ваш pb - ви використовуєте цитати замість зворотних цитат "vs"
Олів'є Рефало

Ні, я використовую правильні котирування, натомість я спробував копіювати вставки, це не вийшло. Я оновив свою відповідь, бо це працювало на мене.
Гірі

@OlivierRefalo Я бачу, що ви оновили свою відповідь подвійними цитатами ("). Але навіть без лапок це працює.
Гірі

Дуже дякую . Він працював на мене в Йосеміті 10.10
Віджай

2
Це єдине рішення, яке справді працює. Додавання шляху будь-яким іншим рішенням додаватиметься тимчасово, поки ви не припините термінал, і шлях не зникне. Для постійного додавання шлях слід зберегти у файлі .bash_profile. Тим часом я для простоти використовував нано, а не 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)

EDIT: оновлення для Java 10

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

EDIT: оновлення для 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

Вище , не працює для мене з EC2 інструментів Amazon, тому що він очікує , і bin/javaт.д. внизу JAVA_HOME. /System/Library/Frameworks/JavaVM.framework/Homeзробили роботу.


Це був лев? ви отримали офіційний пакет Java від Apple, або Java6 / 7 від Oracle?
Олів’є Рефало

Я вважаю, що це був Java-пакет Apple.
Cawflands

1
@AndrewH так, я вважав, що це правда. Встановив пакет Java Java і виявив фактичний шлях до бібліотеки (наприклад, встановити -vm в eclipse.ini): /System/Library/Java/Support/Deploy.bundle/Contents/Home/lib/javaws.jar
noogrub

Дякую за інформацію. Можливо, я занадто простий, але чому OS X робить таку просту річ повним безладом?
Kuberchaun

18

Для ОС 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, щоб звернутися до каталогу, що містить Sun J2SE 1.5.0 JDK (не JRE) та повторіть спробу.
EGHM

13

Наступне працювало для мене. Я використовую ZSH на OSX Yosemite із встановленою Java 8.

Наступна команда /usr/libexec/java_homeвипромінює шлях до дому JDK:

/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.
Геманта

Підтверджено, що працює як шарм з java 1.8, встановленим на OSX Yosemite, привіт товариш.
Ашор

Загальне рішення працює чудово для Java 8, zsh та Yosemite.
yaauie

10

Кращим (більш оновленим) способом є використання наступного:

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

Це також повинно працювати з AWS, оскільки він знаходиться binвдома


1
вид не згоден з цим твердженням "більш оновлений" / usr / libexec / java_home - це exe, який повертає шлях, а не фіксований шлях. Крім того, залежно від версії jvm, яку ви використовуєте, шлях вище не буде відповідати
Олів'є Рефало

10

Тут, здається, встановлені новіші JVM Oracle, такі як 1.7.0_21-b12:

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


1
Дійсно - і /usr/libexec/java_homeінструмент повертає помилку для цих версій Java.
Joe Dyndale

1
Це єдина відповідь, яка працює для мене після завантаження v1.7 JRE
maxrossello,

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
Працює над Каталіною. Ty
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.

Наступні кроки:

  1. спробуйте echo $JAVA_HOME(якщо він встановлений, він покаже шлях), якщо ні, спробуйте пошукати його за допомогоюsudo find /usr/ -name *jdk
  2. Відредагуйте Bash p за допомогою - sudo nano ~/.bash_profile
  3. Додайте точний шлях до домашньої JAVA (із кроком від кроку 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, розташований тут (як запропонував цей потік, щоб змусити його працювати.
chris

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 і працював над цим:

  1. cmd> vi ~ / .bash_profile

  2. Додати / оновити рядок для JAVA_HOME: export JAVA_HOME = "/ Бібліотека / Java / JavaVirtualMachines / jdk1.7.0_15.jdk / Зміст / Головна"

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

Я думаю, що версія jdk може відрізнятися, тому просто використовуйте версію, яку ви маєте в розділі / Бібліотека / 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, щоб вказати на каталог бін щойно знайденого каталогу 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. Але іноді будівельники (мурахи, роблять) використовують JAVA_HOME для посилання на компілятор javac у lib / tools.jar Для цього рішення не вдасться
Олів'є Рефало,

Ах, дякую за інформацію. Ти правий. Відповідь буде оновлено.
Анян

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

Я використовую Fish shell на High Sierra 10.13.4 і встановив Java через Brew.

Це не автоматично встановлюється так , щоб встановити його правильно на моїй системі я біжу:

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

0

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

/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. java 8 слід додати

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

java 6:

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

ref: http://qiita.com/seri_k/items/e978c1339ce51f13e297

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