Як встановити JAVA_HOME в Linux для всіх користувачів


185

Я новачок у системі Linux і, схоже, занадто багато папок Java.

java -версія дає мені:

  • версія java "1.7.0_55"
  • OpenJDK середовище виконання (rhel-2.4.7.1.el6_5-x86_64 u55-b13)
  • 64-бітний VM сервера OpenJDK (збірка 24.51-b03, змішаний режим)

Коли я намагаюся створити проект Maven, я отримую помилку:

Error: JAVA_HOME is not defined correctly.
We cannot execute /usr/java/jdk1.7.0_05/bin/java

Скажіть, будь ласка, які файли мені потрібно змінити для root, а також не-root користувачів і де саме знаходиться java?

Відповіді:


353
  1. find /usr/lib/jvm/java-1.x.x-openjdk
  2. vim /etc/profile

    Попередьте sudo, якщо ви увійшли як непривілейований користувач, тобто. sudo vim

  3. Натисніть "i", щоб перейти в режим вставки
  4. додати:

    export JAVA_HOME="path that you found"
    
    export PATH=$JAVA_HOME/bin:$PATH
  5. вийдіть із системи та увійдіть знову, перезавантажте або використовуйте source /etc/profileдля негайного застосування змін у вашій поточній оболонці

29
не забудьте видалити подвійні лапки та відтворити їх із клавіатури, оскільки лише копіювання та вставлення може створити проблеми.
Суніл Кумар

12
@rbaleksandar залежать від деяких програм JAVA_HOME, але також не завадить налаштувати його.
raffian

2
IntelliJ - це такий додаток - і не другорядний.
Піт

12
Вам потрібно запустити source /etc/profileзміни, щоб вони вступили в силу негайно!
Мохаммед Тахер Альрефаї

1
Це вказувало мені на правильний напрямок. Насправді /etc/profile.d/jdk.shв моїй системі плавав черство .
Герман

109

Для всіх користувачів я рекомендую розмістити наступний рядок у /etc/profile

export JAVA_HOME=$(readlink -f /usr/bin/javac | sed "s:/bin/javac::")

Це буде динамічно оновлюватися і добре працює з системою альтернатив . Зауважте, що оновлення відбуватиметься лише в новій оболонці входу.


10
відповідати просто звичайному JRE (навіть без голови) export JAVA_HOME=$(readlink -f /usr/bin/java | sed "s:/bin/java::")замість цього - зауважте, що я використовую просто java, ніjavac
Роман Круглов

@occulta Принаймні Maven очікує, що JAVA_HOME вкаже на JDK і використовує його для пошуку компілятора Java.
Eero Aaltonen

1
Оновлення readlinkта оновлення / оновлення сумісного рішення, навіть це 5-річна тема. Я лише рекомендую не редагувати / etc / profile, а розміщувати експортування у спеціальному файлі, наприклад /etc/profile.d/java_environment.sh, можливо, вам доведеться chmod +x java_environment.shі перезавантажувати.
ChristophS

Ідеально. Краще, ніж моє незграбне dirnameрішення. Якщо ви схожі на мене і хочете зрозуміти, що тут відбувається, це проста заміна відповідного тексту з введення порожнім рядком. Символ "за замовчуванням" для заміни є /, але поки ви послідовні, ви можете замінити їх /чим завгодно. У цьому випадку це колонки, як ми використовуємо /для розділення шляхів.
Ungeheuer

35

Ви можете використовувати / etc / profile або краще такий файл, як /etc/profile.d/jdk_home.sh

export JAVA_HOME=/usr/java/jdk1.7.0_05/

Ви повинні пам’ятати, що цей файл завантажується лише новими оболонками для входу. Отже, після bash -l або нового gnome-сесії, і він не змінюється з новими версіями Java.


1
принаймні, в моєму Linux (raspbian), / etc / profile буде джерелом, /etc/profile.d/*.shтому ваш файл повинен викликатись, jdk_home.shщоб він
з'явився

Дякую @Hilikus :-) Я змінив це відповідно.
flob

2
Дякую. я зробив суміш вашої та @ Eero відповіді за найкращі з обох світів;)
Хілікус

1
Це найкраща відповідь
Яків

/etc/profile.d/jdk_home.shє набагато більш чистою відповіддю, принаймні для Ubuntu , /etc/profileзбита стільки логіки. Не здається мудрим додати більше до цього…
Ng Sek Long

30

Жодна з інших відповідей не була "приклеюється" для мене в RHEL 7, навіть налаштування JAVA_HOMEі PATHбезпосередньо в /etc/profileабо ~/.bash_profileне працюватиме. Кожен раз, коли я намагався перевірити, чи JAVA_HOMEвстановлено, він з’явиться порожнім:

$ echo $JAVA_HOME
    (<-- no output)

Що мені довелося зробити, це створити сценарій у /etc/profile.d/jdk_home.sh:

#!/bin/sh
export JAVA_HOME=/opt/ibm/java-x86_64-60/
export PATH=$JAVA_HOME/bin:$PATH

Я спочатку нехтував першим рядком (the #!/bin/sh), і він не буде працювати без нього.

Зараз це працює:

$ echo $JAVA_HOME
/opt/ibm/java-x86_64-60/

У мене був такий же досвід щодо RHEL 7. Я видалив експорт із ~ / .bash_profile і застосував такий підхід.
xpagesbeast

#! / bin / sh не потрібен у вашому jdk_home.sh. як тільки ви виконали конфігурацію, переконайтеся, що вийти та знову увійти
kuhajeyan

12

Встановити шлях у Linux дуже просто. Виконайте наступне:

Крок-1 Відкрийте термінал і введіть sudo gedit .bashrc

Крок 2 Він попросить вас пароль. Після введення пароля він відкриє файл bash. Потім перейдіть до кінця і введіть нижче

крок-3

   export JAVA_HOME="/usr/lib/jvm/java-8-openjdk-amd64/"
   export PATH=$PATH:$JAVA_HOME/bin

крок-4 Потім збережіть файл та вийдіть із файлу

Вище - для одного користувача. Для всіх користувачів потрібно дотримуватися наведених нижче кроків

Крок 1 gedit /etc/profile

Крок-2 export JAVA_HOME="/usr/lib/jvm/java-8-openjdk-amd64/"

Крок-3 export PATH=$PATH:$JAVA_HOME/bin

Сподіваюся, це допомагає. Дякую!


2
ця відповідь встановлює його лише для поточного користувача.
Мануель Манхарт

Дякую @ickyrr
PyDevSRS

7

Робити те, що робить Oracle (як колишній співробітник Sun, я не можу звикнути до цього)

ln -s latestJavaRelease / usr / java / default
Де найновішийJavaRelease - версія, яку ви хочете використовувати

тоді експортуйте JAVA_HOME = / usr / java / за замовчуванням


6

Відповідь дана попередні повідомлення є дійсним. Але жодна відповідь не є повною щодо:

  1. Зміна профілю / etc / не рекомендується просто через причину (як зазначено в / etc / profile):
  • НЕ БЕЗПЕЧНО міняти цей файл, якщо Ви не знаєте, що Ви робите. Набагато краще створити скрипт оболонки custom.sh в /etc/profile.d/, щоб внести власні зміни у ваше оточення, оскільки це запобіжить необхідність об'єднання в майбутніх оновленнях. *
  1. Отже, як зазначено вище, створіть /etc/profile.d/custom.sh файл для спеціальних змін.

  2. Тепер, щоб постійно оновлювати нові установки версії Java, ніколи не ставте абсолютний шлях, а використовуйте:

#if зробити jdk як java home

експортувати JAVA_HOME = $ (readlink -f / usr / bin / javac | sed "s: / bin / javac ::")

АБО

#if зробити Jre як java home

експортувати JAVA_HOME = $ (readlink -f / usr / bin / java | sed "s: / bin / java ::")

  1. І не забудьте мати #! / bin / bash у файлі custom.sh

4

Скопіюйте встановлений шлях до файлу бін

YOUR PATH

відкрити термінал і редагувати файл середовища, ввівши наступну команду,

sudo nano /etc/environment

У цей файл додайте наступний рядок (замінюючи YOUR_PATHщойно скопійований шлях):

JAVA_HOME="YOUR_PATH"

Цього має бути достатньо для встановлення змінної середовища. Тепер перезавантажте цей файл:

source /etc/environment

тепер протестуйте його, виконавши:

echo $JAVA_HOME

3
olny ефекти поточного термінального сеансу
Fatih Türker

@ FatihTürker Перезавантажте свій комп'ютер
Джек Гіффін

Для мене з використанням jdk11, YOUR_PATH/usr/lib/jvm/default-java/
Джек Гіффін

Шлях JAVA_HOME встановлений, але він не працює. тобто Java не працює. Навіть після перезавантаження
Ssenyonjo

2

У Linux я додаю цей рядок до свого ~ / .profile:

export JAVA_HOME=$(readlink -ze /usr/bin/javac | xargs -0 dirname -z | xargs -0 dirname)

2
Це здається потенційно правильною відповіддю, але чи можете ви пояснити, чому це працює, тобто що робить і яка проблема ОП? Крім того, ви кажете "в Linux", але є багато різних дистрибутивів Linux, і це може не працювати для всіх, додайте, для якого дистрибутива це працює.
Бурман

2

Крок 1 - перевірте поточну версію Java на "echo $ JAVA_HOME"

Крок 2 - vim / etc / profile

Крок 3 - В кінці файлу ви знайдете експорт JAVA_HOME, нам потрібно надати тут новий шлях, переконайтесь, що він не є відносним.

Крок 4 - Збереження та вихід: wq

Крок 5 - "source / etc / profile /", це змінює виконання змін

Крок 6 - Знову зробіть відлуння $ JAVA_HOME - зміни будуть відображені.


2

1 ... Використання ярлика Ctlr+ Alt+ Tдля відкриття терміналу

2 ... Виконай нижче команду:

echo export JAVA_HOME='$(readlink -f /usr/bin/javac | sed "s:/bin/javac::")' | sudo tee /etc/profile.d/jdk_home.sh > /dev/null

3 ... (Рекомендовано) Перезавантажте свій VM / комп'ютер. Ви можете використовувати, source /etc/sourceякщо не хочете перезавантажити комп'ютер

4 ... Використання ярлика Ctlr+ Alt+ Tдля відкриття терміналу

5 ... Підтверджена партія JAVA_HOME

echo $JAVA_HOME

Однолінійна копія з флобу , зарахуйте їх



1

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

або: джерело / тощо / або. / тощо /

Де б ви не редагували профіль.


1

Хоча ми налаштовуємо JAVA_HOME, дозвольте мені поділитися деякими перевагами налаштування JAVA_HOME або будь-якої іншої змінної середовища:

1) Оновити JDK легко, не впливаючи на запуск програми та файл конфігурації, який вказує на JAVA_HOME. просто потрібно завантажити нову версію та переконатися, що ваші JAVA_HOME вказують на нову версію Java. Це найкраще для використання змінної середовища або посилань.

2) Змінна JAVA_HOME є короткою та стислою замість повного шляху до інсталяційного каталогу JDK.

3) Змінна JAVA_HOME - це незалежність платформи, тобто якщо ваш сценарій запуску використовує JAVA_HOME, він може працювати в Windows та UNIX без будь-яких змін, вам просто потрібно встановити JAVA_HOME у відповідній операційній системі.

Детальніше: http://javarevisited.blogspot.com/2012/02/how-to-set-javahome-environment-in.html#ixzz4BWmaYIjH


1

Це дуже простий сценарій для вирішення проблеми

export JAVA_HOME_BIN=`which java`
export JAVA_HOME_DIR=`dirname $JAVA_HOME_BIN`
export JAVA_HOME=`dirname $JAVA_HOME_DIR`

А для тестування:

echo $JAVA_HOME

1

Публікація як відповідь, оскільки я не маю права чекати.

Зауважте : дотримуйтесь прийнятої відповіді, опублікованої "Той Дейв Хлопець".

Після встановлення змінних переконайтеся, що ви встановили відповідні дозволи для каталогу java, де він встановлений.

chmod -R 755 /usr/java

1

Всі операційні етапи (пошук Java, батьківського редактора, редагування файлу, ...) одне рішення

zFileProfile="/etc/profile"
zJavaHomePath=$(readlink -ze $(which java) | xargs -0 dirname | xargs -0 dirname)
echo $zJavaHomePath

echo "export JAVA_HOME=\"${zJavaHomePath}\"" >> $zFileProfile
echo "export PATH=\$PATH:\$JAVA_HOME/bin" >> $zFileProfile

Результат:

# tail -2 $zFileProfile
export JAVA_HOME="/usr/lib/jvm/java-11-openjdk-11.0.7.10-1.el8_1.x86_64"
export PATH=$PATH:$JAVA_HOME/bin

Пояснення:

1) Розбимо повну команду на частини

$(readlink -ze $(which java) | xargs -0 dirname | xargs -0 dirname)

2) Знайдіть шлях Java від команди java

# $(which java)
"/usr/bin/java"

3) Отримайте відносний шлях від символічного шляху

# readlink -ze /usr/bin/java
"/usr/lib/jvm/java-11-openjdk-11.0.7.10-1.el8_1.x86_64/bin/java"

4) Отримати батьківський шлях /usr/lib/jvm/java-11-openjdk-11.0.7.10-1.el8_1.x86_64/bin/java

# readlink -ze /usr/bin/java | xargs -0 dirname
"/usr/lib/jvm/java-11-openjdk-11.0.7.10-1.el8_1.x86_64/bin"

5) Отримати батьківський шлях /usr/lib/jvm/java-11-openjdk-11.0.7.10-1.el8_1.x86_64/bin/

# readlink -ze /usr/bin/java | xargs -0 dirname | xargs -0 dirname
"/usr/lib/jvm/java-11-openjdk-11.0.7.10-1.el8_1.x86_64"


0

відкрити kafka-run-class.sh з судо писати

ви можете знайти kafka-run-class.sh у папці kafka : kafka / bin / kafka-run-class.sh

перевірити ці рядки

введіть тут опис зображення

Змініть змінну JAVA в іншій частині, щоб вказати виконуваний файл Java у вашому java / bin. як JAVA = "$ JAVA_HOME / java"


0

У / etc / profile, якщо ви відкриєте, ви дізнаєтесь, що НЕ рекомендується писати у цей файл. Замість цього зробіть сценарій своїх команд (припустимо, тест.sh), перейдіть до папки /etc/profile.d і поставте туди test.sh. Кожен раз, коли ви перезавантажуєте екземпляр, він буде автоматично викликаний / etc / profile.


-1

Я використовую рядок:

export JAVA_HOME=$(readlink -f $(dirname $(readlink -f $(which java) ))/../)

до мого ~ / .profile, щоб він використовував базу каталогу Java за замовчуванням під час входу. Це для баш.

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