Как управлять несколькими версиями Java с помощью jEnv в Linux
Как разработчик Java, вы хотели бы протестировать свой код с различными версиями Java. Или вы просто хотели воспользоваться возможностями новой версии Java. Настройка различных сред Java часто может оказаться трудоемкой и сложной задачей. Вот тут-то и пригодятся системы управления версиями! Сегодня мы обсудим один такой менеджер версий под названием jEnv. jEnv — это инструмент командной строки для управления несколькими версиями Java в Linux. Это похоже на SDKMAN, но только для Java. jEnv — это обновленная версия jenv, которая в свою очередь является адаптированной версией rbenv. jEnv весьма полезен для разработки Java-приложений, для которых требуется точная версия Java.
Использование jEnv, разработчика;
- может устанавливать и управлять несколькими установками Java одновременно,
- можно настроить установку Java в глобальном масштабе, в каталоге (зависит от приложения) и даже на уровне оболочки (зависит от оболочки),
- может легко и быстро переключаться между различными версиями Java,
- не нужно устанавливать переменную среды JAVA_HOME для каждой версии.
Установить Java
Обратите внимание, что jEnv не будет устанавливать Java за вас. Он будет управлять только существующими установками Java. Вам следует установить Java с помощью менеджера пакетов или любым другим способом по вашему выбору. Я собираюсь установить openjdk 13 и 14 в своей системе Ubuntu:
sudo apt install openjdk-13-jdk
sudo apt install openjdk-14-jdk
Если у вас уже установлена Java, просто проигнорируйте этот шаг.
Установите jEnv в Linux
Git клонирует репозиторий jEnv с помощью команды:
git clone https://github.com/jenv/jenv.git ~/.jenv
Приведенная выше команда клонирует содержимое jEnv в локальный каталог с именем .jenv.
Затем добавьте jEnv в свой путь `:
echo 'export PATH="$HOME/.jenv/bin:$PATH"' >> ~/.bash_profile
Затем инициализируйте jEnv:
echo 'eval "$(jenv init -)"' >> ~/.bash_profile
Наконец, обновите изменения, которые мы только что внесли в ~/.bash_profile, с помощью команды.
source ~/.bash_profile
Если по какой-либо причине это не работает, просто используйте ~/.bashrc вместо ~/.bash_profile.
echo 'export PATH="$HOME/.jenv/bin:$PATH"' >> ~/.bashrc
echo 'eval "$(jenv init -)"' >> ~/.bashrc
source ~/.bashrc
Если вы используете оболочку Zsh, команды для установки jEnv:
echo 'export PATH="$HOME/.jenv/bin:$PATH"' >> ~/.zshrc
echo 'eval "$(jenv init -)"' >> ~/.zshrc
Проверьте установку jEnv
Давайте проверим, установлен ли jEnv с помощью команды:
jenv doctor
Пример вывода:
[OK] No JAVA_HOME set
[ERROR] Java binary in path is not in the jenv shims.
[ERROR] Please check your path, or try using /path/to/java/home is not a valid path to java installation.
PATH : /home/ostechnix/.jenv/libexec:/home/ostechnix/.jenv/shims:/home/ostechnix/.jenv/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games:/snap/bin
[OK] Jenv is correctly loaded
Как вы можете видеть, выходные данные говорят, что переменная JAVA_HOME еще не установлена и jenv правильно загружен. Не обращайте внимания на другие ошибки. Они исчезнут после того, как мы добавим Java в следующем разделе.
Теперь давайте установим переменную среды JAVA_HOME с помощью команды:
jenv enable-plugin export
Вам следует перезапустить текущий сеанс оболочки, чтобы активировать плагин экспорта jenv. Плагин экспорта echo активирован. Чтобы перезапустить сеанс оболочки, запустите:
exec $SHELL -l
Теперь снова запустите команду «jenv Doctor» и посмотрите, что она вернет!
jenv doctor
Пример вывода:
[OK] JAVA_HOME variable probably set by jenv PROMPT
[ERROR] Java binary in path is not in the jenv shims.
[ERROR] Please check your path, or try using /path/to/java/home is not a valid path to java installation.
PATH : /home/ostechnix/.jenv/libexec:/home/ostechnix/.jenv/shims:/home/ostechnix/.jenv/bin:/home/ostechnix/.jenv/shims:/home/ostechnix/.jenv/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games:/snap/bin
[OK] Jenv is correctly loaded
Сделанный! Переменная JAVA_HOME будет автоматически установлена jEnv в зависимости от текущей активной среды Java.
Управление несколькими версиями Java с помощью jEnv в Linux
Запуск jEnv без каких-либо опций отобразит раздел справки:
jenv
Пример вывода:
jenv 0.5.3-2-g78dbd7f
Usage: jenv <command> [<args>]
Some useful jenv commands are:
commands List all available jenv commands
local Set or show the local application-specific Java version
global Set or show the global Java version
shell Set or show the shell-specific Java version
rehash Rehash jenv shims (run this after installing executables)
version Show the current Java version and its origin
versions List all Java versions available to jenv
which Display the full path to an executable
whence List all Java versions that contain the given executable
add Add JDK into jenv. A alias name will be generated by parsing "java -version"
See `jenv help <command>' for information on a specific command.
For full documentation, see: https://github.com/jenv/jenv/blob/master/README.md
Добавляйте различные среды Java
Теперь нам нужно сообщить jenv, где находится наша среда Java.
Сначала давайте добавим среду openjdk-13 с помощью команды:
jenv add /usr/lib/jvm/java-13-openjdk-amd64/
Пример вывода:
openjdk64-13.0.3 added
13.0.3 added
13.0 added
13 added
Затем добавьте openjdk-14 с помощью команды:
$ jenv add /usr/lib/jvm/java-14-openjdk-amd64/
openjdk64-14.0.1 added
14.0.1 added
14.0 added
14 added
Теперь проверьте все доступные версии Java для jenv с помощью команды:
jenv versions
Пример вывода:
* system (set by /home/ostechnix/.jenv/version)
13
13.0
13.0.3
14
14.0
14.0.1
openjdk64-13.0.3
openjdk64-14.0.1
Как видно из приведенного выше вывода, в настоящее время управляются две среды Java, то есть openjdk 13 и openjdk 14. Не обращайте внимания на другие числа в выводе. Это просто псевдонимы, относящиеся к одной и той же версии.
Установить глобальную среду Java
Как я уже сказал, jenv может позволить вам настроить установку Java глобально, для каждого каталога/проекта или для каждой оболочки и переключаться между ними, не меняя глобальную версию.
Давайте проверим текущую версию Java:
$ java --version
openjdk 14.0.1 2020-04-14
OpenJDK Runtime Environment (build 14.0.1+7-Ubuntu-1ubuntu1)
OpenJDK 64-Bit Server VM (build 14.0.1+7-Ubuntu-1ubuntu1, mixed mode, sharing)
Как вы видите в выводе, текущая глобальная версия установлена на openjdk-14.
Чтобы установить openjdk-13 в качестве глобальной версии, запустите:
jenv global openjdk64-13.0.3
Теперь проверьте версию Java:
$ java --version
openjdk 13.0.3 2020-04-14
OpenJDK Runtime Environment (build 13.0.3+3-Ubuntu-1ubuntu2)
OpenJDK 64-Bit Server VM (build 13.0.3+3-Ubuntu-1ubuntu2, mixed mode)
Вы также можете просто использовать номера псевдонимов вместо полной версии, как показано ниже:
jenv global 13
jenv global 13.0
jenv global 13.0.3
Все эти три команды установят openjdk-13 как глобальную версию.
Установите локальную среду Java или среду Java для каждого каталога.
Иногда вам может потребоваться установить среду Java для конкретного проекта, не меняя глобальную версию.
Например, следующие шаги установят openjdk-14 в качестве локальной версии для нашего проекта с именем «ostechnix-java», но не изменят глобальную версию.
mkdir ostechnix-java
cd ostechnix-java
jenv local openjdk64-14.0.1
Теперь наша локальная среда — openjdk-14, а глобальная среда Java — openjdk-13. Аналогичным образом вы можете установить несколько разных сред Java для каждого приложения. Просто перейдите в каталог проекта, установите желаемую среду Java и начните создавать или тестировать приложение. Это так просто!
Установите среду Java для конкретной оболочки
Чтобы установить среду Java для текущего сеанса оболочки, запустите:
jenv shell openjdk64-14.0.1
Openjdk-14 — это версия Java, используемая в этой конкретной оболочке. После выхода из текущего сеанса оболочки вступает в силу предыдущая глобально используемая версия Java.
Нет необходимости устанавливать $JAVA_HOME!
Вы заметили, что я никогда не устанавливал переменную $JAVA_HOME при переключении на разные версии Java? Нет, ни разу! Jenv позаботится об этом и автоматически настроит его для вас в зависимости от среды Java, в которой вы находитесь.
Вы можете просмотреть текущие настройки переменной JAVA_HOME с помощью команды:
$ echo $JAVA_HOME
/home/ostechnix/.jenv/versions/openjdk64-13.0.3
Просто забудьте, как установить переменную среды JAVA_HOME, и сосредоточьтесь на разработке.
Связанное чтение:
- Pyenv - управление версиями Python стало проще
Ресурсы:
- Веб-сайт jEnv
- Репозиторий jEnv на Github