jenv — удобный инструмент для управления версиями Java

Моя цель - предложение широкого ассортимента товаров и услуг на постоянно высоком качестве обслуживания по самым выгодным ценам.

Иногда может возникнуть необходимость использовать какую-то определенную версию Java для вашего проекта. Мы тоже в Surf с таким столкнулись при работе над одним из Flutter приложений-долгожителей. Решение нашлось в виде использования менеджера версий Java. Рассказываем, что за инструмент и как с ним базово работать на MacOS.

Что такое jenv

jenv — это менеджер для удобного управления версиями Java на локальной машине. Он позволяет легко переключаться между различными версиями Java, проводит разделение между глобальной версией Java и локальными версиями для использования в разных проектах, а также позволяет управлять переменными окружения Java в системе.

Возможности jenv

  • Управление версиями Java: jenv позволяет установить и использовать несколько версий Java на одной машине.

  • Поддержка различных ОС: jenv может использоваться на macOS, Linux и Windows;

  • Управление переменными окружения Java: jenv может автоматически установить переменные окружения Java;

  • Управление настройками JVM: jenv позволяет настраивать параметры JVM для каждой версии Java, такие как размер кучи, аргументы командной строки и т. д.

Применение для MacOS

Установка jenv

Устанавливать jenv на macOS рекомендую через brew.

$ brew install jenv

После установки прописываем jenv в ~/.zshrc через команды:

$ echo 'export PATH="$HOME/.jenv/bin:$PATH"' >> ~/.zshrc
$ echo 'eval "$(jenv init -)"' >> ~/.zshrc

После выполнения этих команд надо удостовериться, что в ~/.zshrc есть строки:

export PATH="$HOME/.jenv/bin:$PATH"
eval "$(jenv init -)"

Проверить установку можно через команду:

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 ...
[OK]	Jenv is correctly loaded

Ничего страшного, если есть ошибки, главное: Jenv is correctly loaded.

Установка Java

Получить список всех доступных JVM можно командой:

/usr/libexec/java_home -V

Если есть доступные JVM, то можно увидеть их список:

Matching Java Virtual Machines (6):
20.0.1 (arm64) "Oracle Corporation" - "OpenJDK 20.0.1" /Users/martynov/Library/Java/JavaVirtualMachines/openjdk-20.0.1/Contents/Home
17.0.8 (arm64) "JetBrains s.r.o." - "JBR-17.0.8+7-1000.8-nomod 17.0.8" /Users/martynov/Library/Java/JavaVirtualMachines/jbr-17.0.8/Contents/Home
15.0.10 (arm64) "Azul Systems, Inc." - "Zulu 15.46.17" /Users/martynov/Library/Java/JavaVirtualMachines/azul-15.0.10/Contents/Home
13.0.14 (arm64) "Azul Systems, Inc." - "Zulu 13.54.17" /Users/martynov/Library/Java/JavaVirtualMachines/azul-13.0.14/Contents/Home
11.0.19 (arm64) "Amazon.com Inc." - "Amazon Corretto 11" /Users/martynov/Library/Java/JavaVirtualMachines/corretto-11.0.19/Contents/Home
1.8.0_372 (arm64) "Amazon" - "Amazon Corretto 8" /Users/martynov/Library/Java/JavaVirtualMachines/corretto-1.8.0_372/Contents/Home
/Users/martynov/Library/Java/JavaVirtualMachines/openjdk-20.0.1/Contents/Home

Если список пуст или нет нужной версии Java, то ее можно установить так:

# Установка текущей версии:

brew install openjdk 

# Установка нужной версии:

brew install openjdk@17

После установки, нужно выполнить несколько команд, которые предлагаются в Caveats (предостережениях):

sudo ln -sfn /usr/local/opt/openjdk/libexec/openjdk.jdk /Library/Java/JavaVirtualMachines/openjdk.jdk
echo 'export PATH="/usr/local/opt/openjdk/bin:$PATH"' >> ~/.zshrc
export CPPFLAGS="-I/usr/local/opt/openjdk/include"

Добавление Java в jenv

Для добавления Java в jenv надо выполнить следующую команду (путь можно взять из списка доступных JVM выше):

jenv add /Users/martynov/Library/Java/JavaVirtualMachines/corretto-11.0.19/Contents/Home

Результат с подтверждением добавления:

corretto64-11.0.19 added
11.0.19 added
11.0 added
11.0.19 already present, skip installation

Список всех добавленных JVM можно посмотреть через команду:

Список всех добавленных JVM можно посмотреть через команду:

Результат будет примерно таким:

* system (set by /Users/martynov/.jenv/version)
  11.0
  11.0.19
  15.0
  15.0.10
  17.0
  17.0.8
  corretto64-11.0.19
  jetbrains64-17.0.8
  zulu64-15.0.10

Использование различных версий Java через jenv

Глобальная версия

Для установки глобальной версии java нужно выполнить команду по аналогии с этой:

jenv global 15.0

После чего можно проверить версию командой:

java -version

Которая должна отразить выбранную версию:

openjdk version "15.0.1" 2020-10-20
OpenJDK Runtime Environment (build 15.0.1+9)
OpenJDK 64-Bit Server VM (build 15.0.1+9, mixed mode, sharing)

Локальная версия

Перед установкой нужной версии локально нужно перейти в папку с проектом.Для Flutter проекта это может быть папка /android.

Для установки локальной версии используется команда с нужной версией Java:

jenv local 17.0

Будет добавлен файл android/.java-version с выбранной версией внутри: 17.0. После проверяем установку локальной версии через команду:

jenv versions:
system
  11.0
  11.0.19
  15.0
  15.0.10
* 17.0 (set by /Users/martynov/Surf/flutter-project/android/.java-version)
  17.0.8
  corretto64-11.0.19
  jetbrains64-17.0.8
  zulu64-15.0.10

Еще можно на всякий случай проверить по другому.Перейти в папку в папку android и вызвать команду:

./gradlew -version

Убедиться, что используется нужная версия:

------------------------------------------------------------
Gradle 7.2
------------------------------------------------------------

Build time:   2021-08-17 09:59:03 UTC
Revision:     a773786b58bb28710e3dc96c4d1a7063628952ad

Kotlin:       1.5.21
Groovy:       3.0.8
Ant:          Apache Ant(TM) version 1.10.9 compiled on September 27 2020
JVM:          17.0.8 (JetBrains s.r.o. 17.0.8+7-b1000.8)
OS:           Mac OS X 13.4.1 aarch64

Источник: https://www.jenv.be – официальный сайт jenv.

Больше интересного контента для разработчиков → в телеграм-канале Surf Flutter Team

П.с там публикуем кейсы, лучшие практики, новости и вакансии Surf, а также проводим прямые эфиры. 

Источник: https://habr.com/ru/companies/surfstudio/articles/764442/


Интересные статьи

Интересные статьи

Приветствую всех любопытных умов и любителей блокчейн-разработки! Думаю нам всем знакомы такие инструменты, как Hardhat, Infura, Metamask и Web3.js. Они являются основными строительными блоками многих...
Всем привет, это adlook! Еще в 2018 году исследование McKinsey подтвердило прямую зависимость качества дизайна и брендинга на рост прибыли компаний. Также замечено, что фирменный цвет бренда пов...
Ас-саляму алейкум, братья! Думаю многие в своей жизни хотели разобраться с тем как при помощи программного кода обрабатывать изображения и видео. Применений у этого навыка бессчётное количество, у ког...
Привет, я Александр. Активно изучаю и занимаюсь веб разработкой уже около года. Все началось с удаления клиента любимой игры и поиска ментора. Совершенствуясь в веб-разработке создал проект CSS C...
Года три назад ребенок захотел стучать молотком на даче, и тогда вдруг вспомнилось, что в детстве были классные наборы «взрослых» инструментов для маленьких. Найти года три назад что-то похож...