Вопрос или проблема
Я установил openjdk с помощью sudo snap install openjdk
, и хочу установить JAVA_HOME
, чтобы активировать команды, связанные с java
, в терминале, но это не работает.
Я попробовал следующее:
- создание скрипта
java_home.sh
в/etc/profile.d
с содержимымJAVA_HOME=/snap/openjdk/current/jdk
и выход/вход, но это не работает - создание скрипта
java_home.sh
в/etc/profile.d
с содержимымsource $(openjdk)
и выход/вход, но это не работает - добавление
JAVA_HOME=/snap/openjdk/current/jdk export PATH=$PATH:$JAVA_HOME
в~/.bashrc
, и открытие нового терминала, но это все еще не работает
Я не знаю, что попробовать или что делать, поэтому если кто-то может помочь, я буду очень благодарен.
Вывод ls /snap/openjdk
– это 909 current
.
Вывод cat $(openjdk)
:
# Используйте этот файл для переменных окружения OpenJDK и псевдонимов
export JAVA_HOME=/snap/openjdk/909/jdk
export MANPATH=/snap/openjdk/909/jdk/man:
alias java="openjdk.java"
alias javac="openjdk.javac"
alias javadoc="openjdk.javadoc"
alias jar="openjdk.jar"
alias jarsigner="openjdk.jarsigner"
alias jlink='openjdk.jlink'
alias jpackage="openjdk.jpackage"
alias jwebserver="openjdk.jwebserver"
Когда я использую source openjdk
, это начинает работать, но я не хочу делать это каждый раз и хочу, чтобы это загружалось повсюду в качестве переменной окружения.
Нашел решение на developpaper.com
sudo snap install openjdk
openjdk
//генерировать .env
// в моем случае /var/snap/openjdk/1005/openjdk.env
/**
# Используйте этот файл для переменных окружения OpenJDK и псевдонимов
export JAVA_HOME=/snap/openjdk/1005/jdk
export MANPATH=/snap/openjdk/1005/jdk/man:
alias java="openjdk.java"
alias javac="openjdk.javac"
alias javadoc="openjdk.javadoc"
alias jar="openjdk.jar"
alias jarsigner="openjdk.jarsigner"
alias jlink='openjdk.jlink'
alias jpackage="openjdk.jpackage"
alias jwebserver="openjdk.jwebserver"
*/
добавить .env в файл /etc/profile
source /etc/profile
java --version
openjdk 18.0.2 2022-07-19
OpenJDK Runtime Environment (build 18.0.2+9-snap)
OpenJDK 64-Bit Server VM (build 18.0.2+9-snap, mixed mode, sharing)
https://developpaper.com/linux-system-uses-snap-to-install-jdk/
Все, что нужно ОС, чтобы найти java, находится в каталогах /snap/openjdk/909
или /snap/openjdk/current
, просто нужны правильные пути.
Таким образом, ответ на вопрос:
Создайте java_home.sh
в /etc/profile.d/
и добавьте в ш:
export JAVA_HOME=/snap/openjdk/909/jdk
export PATH=$PATH:$JAVA_HOME/bin
выполните вход/выход, и java --version
будет работать.
Лучший способ – это ‘source’ /var/snap/openjdk/current/openjdk.env в /etc/bash.bashrc. Поскольку вы можете использовать sudo, я предположу, что вы можете отредактировать его с помощью nano.
sudo nano /etc/bash.bashrc
Затем, внизу файла, подключите env файл, написав
source /var/snap/openjdk/current/openjdk.env
Использовать ‘current’, а не номер версии, – хорошая практика. В будущем, если вы обновите OpenJDK, ‘current’ все равно будет работать. Также нет необходимости выходить или перезагружать. Любой вновь открытый терминал или приложение, которое зависит от bashrc, получит псевдонимы и экспорты.
Примечание: вместо редактирования /etc/bash.bashrc вы можете выбрать редактировать ~/.bashrc, если хотите сделать это видимым только для своей учетной записи.
Мы выполнили:
sudo snap install openjdk
Запуск “openjdk” показывает путь к openjdk.env:
openjdk
Вместо этого вы можете просто “source” содержимое .env файла. Это мой случай здесь:
source /var/snap/openjdk/2020/openjdk.env
Теперь можно проверить:
java --version
Ответ или решение
Недавно вы столкнулись с проблемой установки переменной окружения JAVA_HOME
после установки OpenJDK через Snap. Данная ситуация довольно распространена, и в этом ответе мы подробно рассмотрим, как правильно настроить JAVA_HOME
и другие переменные окружения без необходимости повторного ввода команд каждый раз при открытии терминала.
Понимание установки OpenJDK через Snap
Когда вы устанавливаете OpenJDK с помощью команды:
sudo snap install openjdk
вы получаете набор инструментов для разработки на Java, которые находятся в специфическом каталоге Snap, обычно по пути, подобному /snap/openjdk/961
(где 961
— это номер версии). Важно отметить, что файлы конфигурации и выполняемые файлы находятся по другому пути, что может вызвать трудности при попытке установить переменные окружения.
Проблема с JAVA_HOME
Вы уже пробовали несколько подходов, чтобы установить JAVA_HOME
, но, по-видимому, они не сработали:
- Создание скрипта
java_home.sh
в/etc/profile.d
с счетчиком пользователем, который не выполнялся. - Попытка модификации
~/.bashrc
без эффекта после перезапуска терминала.
Правильная настройка JAVA_HOME
Следовательно, давайте перейдем к правильной настройке переменной JAVA_HOME
с учетом специфики Snap.
Шаг 1: Создание и настройка скрипта
Создайте файл java_home.sh
в /etc/profile.d/
с следующими строками:
export JAVA_HOME=/snap/openjdk/current/jdk
export PATH=$PATH:$JAVA_HOME/bin
Это действие должно делать JAVA_HOME
доступным для всех пользователей. При этом необходимо убедиться, что путь /snap/openjdk/current/jdk
актуален, так как вы можете видеть другое подключение в своем Snap.
Шаг 2: Проверка и перезагрузка
После того как вы создали и сохранили файл, выполните следующую команду, чтобы убедиться, что он доступен:
source /etc/profile
Или вы можете просто выйти из системы и снова войти, чтобы загрузить изменения. После этого введите команду:
java --version
Альтернативная стратегия: использование .env
файла
Другой способ, который был упомянут в вашем вопросе — использование файла .env
.
- Сначала выполните команду:
openjdk
В результате будет сгенерирован файл .env
, который обычно находится в пути /var/snap/openjdk/<версия>/openjdk.env
.
- Теперь просто добавьте строчку для загрузки этого файла:
source /var/snap/openjdk/current/openjdk.env
Эта команда может быть добавлена в /etc/bash.bashrc
, чтобы изменения были доступны всем пользователям. Для редактирования файла используйте следующий набор команд:
sudo nano /etc/bash.bashrc
В конце файла добавьте:
source /var/snap/openjdk/current/openjdk.env
Заключение
Используя одно из описанных решений, вы сможете корректно настроить переменные окружения для Java, что позволит вам использовать её инструменты из любой точки системы. Таким образом, вы не только исключите необходимость ручного задания JAVA_HOME
в терминале, но и сможете без проблем работать с Java-приложениями и библиотеками в вашем окружении.