Поиск по сайту:

Как управлять несколькими версиями 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

Статьи по данной тематике