Как переключаться между версиями java
Перейти к содержимому

Как переключаться между версиями java

  • автор:

Как изменить версию Java Linux

Работа с разными версиями Java — обычное дело для разработчиков. В вашей системе могут быть установлены разные версии Java, и вы должны переключаться между ними, когда хотите работать над данным проектом. К счастью, есть быстрый способ изменить текущую версию Java вашей системы. Мы расскажем все подробности об изменении вашей версии Java в Linux.

Изменение версии Java в Linux

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

Давайте сначала проверим текущую версию Java в нашей системе. Для этого используйте следующую команду:

$ java -version

Мы убедились, что наша текущая версия Java — 19.0.1.

Если вы хотите просмотреть установленные в вашей системе Java JDK и JRE, используйте следующую команду:

$ sudo update-alternatives —config java

Команда отображает все доступные версии Java. Вы можете выбрать, какой из них установить из перечисленных вариантов.

В нашем случае у нас есть только одна установленная версия Java. Обратите внимание, что следующий вывод не дает никаких альтернативных версий Java.

Точно так же вы можете проверить доступные версии Java с помощью команды update-alternatives:

$ sudo update-alternatives —display java

В выводе также отображается ссылка на текущую установленную версию Java. В нашем случае ссылка указывает на Java 19.

Чтобы продемонстрировать, как мы переключаемся между версиями Java, давайте быстро установим Java 19.

Если мы проверим доступные версии Java, теперь у нас есть Java 19, которая является текущей установленной версией, и альтернативная версия, которая является Java 17.

Чтобы изменить версию Java в Linux, используйте параметр –config java с командой update-alternatives:

$ sudo update-alternatives —config java

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

В этом примере мы ввели наш выбор как 1, чтобы переключиться на Java 17. После того, как вы введете выбор, вы получите сообщение, подтверждающее, что выбор обновлен.

Если мы проверим текущую версию Java в нашей системе, мы должны получить Java 17, поскольку нам удалось перейти на нее.

В выводе обратите внимание, что текущая версия Java — Java 17. Если мы запустим программу, для которой требуется Java 17, мы не получим никаких ошибок.

Вот как вы переключаетесь между версиями Java в Linux. Не стесняйтесь попробовать это.

Заключение

Обычно в вашей системе установлены разные версии Java. Для поддержки разных программ могут потребоваться разные версии Java. В таком случае в вашей системе могут быть разные версии Java, и вам нужно переключаться между ними в разных случаях. Мы рассмотрели простые шаги, которые вы должны выполнить при изменении версии Java в вашей системе Linux. Надеюсь, теперь вы научились удобно работать с различными версиями Java.

Управление несколькими JDK в Mac OS, Linux и Windows WSL2

Если вам, как и мне, приходится одновременно работать с несколькими проектами (как с легаси, так и с современными), а возможно, вы разрабатываете какую-то библиотеку или утилиту для пользователей с разными версиями Java, то вы поймете проблему с переключением между разными JDK.

В наши дни установка, управление и переключение между JDK при разработке становится непростой задачей, потому что большое количество разработчиков все еще работает с Java 8, хотя многие уже переходят на Java 11. Эта проблема может быть решена разными способами. В этой статье мы рассмотрим некоторые из них.

Ручной способ

Вы можете скачать дистрибутивы с сайта вендора JDK и установить их все вручную (или просто распаковать их в какую-нибудь папку вроде $user/jdks ) и все. Но тогда вам придется каждый раз проверять и обновлять JAVA_HOME , чтобы там была нужная вам JDK.

Это можно сделать с помощью bash-скриптов, bash-функций и т. д. В чем же тогда проблема? Вы просто можете забыть вызвать скрипт / функцию и поймете, что что-то пошло не так, только когда увидите UnsupportedClassVersionError .

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

Лучший способ

На мой взгляд, идеальным решением будет объединение двух open source — инструментов, которые существуют уже довольно давно, и возможно, вы знакомы, по крайней мере, с одним из них. Но что вы не знаете, так это то, что их можно использовать вместе.

  • SDKMAN!
  • jEnv

Установка нескольких JDK

После установки SDKMAN! наберите:

$ sdk list java

Найдите нужного вендора, версию и введите:

$ sdk install java

Давайте установим четыре JDK: две последние версии Oracle OpenJDK и две LTS-версии AdoptOpenJDK.

При установке не выбирайте JDK по умолчанию.

  1. AdoptOpenJDK сборка OpenJDK 8u252 — LTS
  2. AdoptOpenJDK сборка OpenJDK 11.0.7 — LTS
  3. Oracle OpenJDK 14 — Последний GA
  4. Oracle OpenJDK 15 — Early Access сборка

Отлично. У вас есть четыре JDK, установленные локально с помощью SDKMAN! Я думаю, что эта утилита действительно удобна для установки JDK и, я надеюсь, она вам тоже понравилась.

Все установленные JDK можно найти в следующем каталоге:

$ cd /Users/bruno/.sdkman/candidates/java $ ls 11.0.7.hs-adpt 14.0.1-open 15.ea.20-open 8.0.252.hs-adpt

Если у вас нет необходимости часто переключаться между разными JDK, то этого будет достаточно. Вы можете использовать SDKMAN! для выбора JDK:

$ sdk current java Using java version 15.ea.19-open $ sdk default java 15.ea.20-open Default java version set to 15.ea.20-open

На этом можно остановиться и использовать только SDKMAN!, но рано или поздно, вы забудете переключить JDK точно так же как при ручном подходе. Поэтому я предпочитаю автоматическое переключение JDK.

Управление несколькими JDK с помощью jEnv

Несмотря на то что SDKMAN! удобен для установки JDK, но он не помогает при автоматическом переключении между разными JDK при переходе от одного проекта к другому. Здесь нам поможет jEnv.

После того как вы установите несколько JDK, с помощью SDKMAN! или любыми другими способами, вам нужно будет добавить их в jEnv:

$ cd ~/.sdkman/candidates/java $ ls -1 11.0.7.hs-adpt 14.0.1-open 15.ea.20-open 8.0.252.hs-adpt $ jenv add 15.ea.20-open openjdk64-15-ea added 15-ea added 15-ea added . $ jenv versions system 1.8 1.8.0.252 11.0 11.0.7 14.0 14.0.1 * 15-ea (set by /Users/bruno/.jenv/version) openjdk64-1.8.0.252 openjdk64-11.0.7 openjdk64-14.0.1 openjdk64-15-ea

Повторите команду jenv add для оставшихся трех версий JDK.

jEnv особенно удобен для тех, кто постоянно использует командную строку. Он позволит вам:

  1. Установить версию Java глобально для вашей системы.
  2. Установить версию Java для текущего каталога / проекта, в котором вы находитесь.
  3. Установить версию Java для текущего shell’а.

Автоматическое переключение между JDK

Теперь у вас установлены Java 8, 11, 14 и 15-EA. Итак, как же переключаться между ними? Давайте настроим версии и протестируем переключение.

Сначала нужно указать дефолтную глобальную JDK в системе. Для этого я обычно использую ранние сборки (Early Access). Всякий раз, когда я начинаю работать с новым проектом, я автоматически использую предстоящий релиз, что помогает мне выявить потенциальные проблемы, которые я могу сообщить в проект OpenJDK. Вы же тоже так делаете…

$ jenv global 15

Теперь для любой папки, в которой вы находитесь, при выполнении java -version вы получите OpenJDK 15 EA.

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

$ jenv local 1.8

В результате будет создан файл под названием .java-version со следующим содержимым:

$ cat .java-version 1.8

Этот файл сообщает jEnv, какую JDK использовать, когда вы находитесь в этой папке.

Наконец, если вы и хотите временно переключиться на другую версию JDK, то используйте jenv shell .

Здесь есть демо, которое может пояснить все вышеописанное и как работает автопереключение.

После публикации статьи на Reddit были несколько интересных комментариев, о которых стоит здесь сказать:

  • SDKMAN! с версии 5.8.1+ поддерживает sdk env и там тоже доступно автоматическое переключение.
  • direnv очень хорош и не привязан к java. Делает то же самое, что и jEnv, за исключением того, что не помогает вам легко переключать JDK. Вы должны редактировать файлы вручную.
  • autoenv — еще одна альтернатива direnv с теми же ограничениями.
  • jabba — наиболее перспективная альтернатива сочетанию SDKMAN + jEnv, поскольку поддерживает весь их функционал и работает в Windows (PowerShell), что не поддерживается другими, упомянутыми выше, инструментами.

Еще по теме

  • Миграции баз данных с Flyway
  • Асинхронное логирование с log4j для любознательных
  • OOMkiller в Docker сложнее, чем вы думаете
  • Назад в будущее с курсом «Java-разработчик»

iPython R Rapid Miner

В iPython мои (черновики) упражнения с Python, в разделе «Mining» собраны материалы по R, Rapid Miner, Weka, Gate. в «Projects» фрагменты старых и заготовки для новых исследований. записано для себя, открыто для всех.

Поиск по блогу

Страницы

вторник, 12 мая 2015 г.

Как в Linux переключаться между разными версиями java?

Все началось с того, что команда java -version сообщила мне, что у меня в дистрибутиве стоит 6-ая версия, а для установки нового сервера требовалась 7-я. Я года два, как не подходил к java, потому решил не умничать, а найти мануал в инете. Мануалы нашел (ссылки здесь), но оказалось, что у меня уже стоит седьмая версия, чтобы переключиться на нее, нужно было использовать update-alternatives —config java

Сначала все выглядело вот так¶
root@kali:/home/kiss# java -version java version "1.6.0_35" OpenJDK Runtime Environment (IcedTea6 1.13.7) (6b35-1.13.7-1~deb7u1) OpenJDK Server VM (build 23.25-b01, mixed mode) 

Я подумал, что раз отно так, то это жжжж неспроста. В Kali полно java программ, так что мне нельзя сносить старую java. Лучше бы найти мануал, в котором все эти мелководные камни описаны. Потратил довольно много времени на всякие вредные описания oracle java и дебиановские штучки. Голова стала пухнуть, наверное поэтому от отчаяния набрал поиск на русском. И, о счастье, нашел исчерпывающий мануал (ссылка выше — Установка Java на Debian/Ubuntu/Mint).

! update-alternatives --config java
There are 2 choices for the alternative java (providing /usr/bin/java). Selection Path Priority Status ------------------------------------------------------------ 0 /usr/lib/jvm/java-6-openjdk-i386/jre/bin/java 1061 auto mode 1 /usr/lib/jvm/java-6-openjdk-i386/jre/bin/java 1061 manual mode * 2 /usr/lib/jvm/java-7-openjdk-i386/jre/bin/java 1051 manual mode Press enter to keep the current choice[*], or type selection number:

Запускаешь и переключаешься, потом снова запускаешь и уже видишь, что активна 7-ая версия, но при запуске компьютера будет активизироваться 6-ая, поскольку у нее auto mode. Мне это и надо.

!java -version
java version "1.7.0_79" OpenJDK Runtime Environment (IcedTea 2.5.5) (7u79-2.5.5-1~deb7u1) OpenJDK Server VM (build 24.79-b02, mixed mode)

Ниже распечатаем справочники, дабы посмотреть при случае, что еще можно напереключать.

root@kali:/home/kiss# update-alternatives --list java /usr/lib/jvm/java-6-openjdk-i386/jre/bin/java /usr/lib/jvm/java-7-openjdk-i386/jre/bin/java 
!java -h
Usage: java [-options] class [args. ] (to execute a class) or java [-options] -jar jarfile [args. ] (to execute a jar file) where options include: -d32 use a 32-bit data model if available -d64 use a 64-bit data model if available -client to select the "client" VM -server to select the "server" VM -zero to select the "zero" VM -jamvm to select the "jamvm" VM -avian to select the "avian" VM -dcevm to select the "dcevm" VM -hotspot is a synonym for the "client" VM [deprecated] The default VM is server, because you are running on a server-class machine. -cp -classpath A : separated list of directories, JAR archives, and ZIP archives to search for class files. -D= set a system property -verbose:[class|gc|jni] enable verbose output -version print product version and exit -version: require the specified version to run -showversion print product version and continue -jre-restrict-search | -no-jre-restrict-search include/exclude user private JREs in the version search -? -help print this help message -X print help on non-standard options -ea[:. |:] -enableassertions[:. |:] enable assertions with specified granularity -da[:. |:] -disableassertions[:. |:] disable assertions with specified granularity -esa | -enablesystemassertions enable system assertions -dsa | -disablesystemassertions disable system assertions -agentlib:[=] load native agent library , e.g. -agentlib:hprof see also, -agentlib:jdwp=help and -agentlib:hprof=help -agentpath:[=] load native agent library by full pathname -javaagent:[=] load Java programming language agent, see java.lang.instrument -splash: show splash screen with specified image See http://www.oracle.com/technetwork/java/javase/documentation/index.html for more details.
root@kali:/home/kiss# update-alternatives --help Usage: update-alternatives [option> . ] command> Commands: --install link> name> path> priority> [--slave link> name> path>] . add a group of alternatives to the system. --remove name> path> remove path> from the name> group alternative. --remove-all name> remove name> group from the alternatives system. --auto name> switch the master link name> to automatic mode. --display name> display information about the name> group. --query name> machine parseable version of --display name>. --list name> display all targets of the name> group. --get-selections list master alternative names and their status. --set-selections read alternative status from standard input. --config name> show alternatives for the name> group and ask the user to select which one to use. --set name> path> set path> as alternative for name>. --all call --config on all alternatives. link> is the symlink pointing to /etc/alternatives/name>. (e.g. /usr/bin/pager) name> is the master name for this link group. (e.g. pager) path> is the location of one of the alternative target files. (e.g. /usr/bin/less) priority> is an integer; options with higher numbers have higher priority in automatic mode. Options: --altdir directory> change the alternatives directory. --admindir directory> change the administrative directory. --log file> change the log file. --force allow replacing files with alternative links. --skip-auto skip prompt for alternatives correctly configured in automatic mode (relevant for --config only) --verbose verbose operation, more output. --quiet quiet operation, minimal output. --help show this help message. --version show the version. 

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

Как установить несколько версий Java на одном компьютере

Некоторое время назад я написал одну статью Java Lambda Expression с объяснением на примере, но мне было легко исследовать и Java 8, потому что я использовал его в своем проекте, и мне было разрешено установить и использовать его. Но в моем текущем проекте мы все еще используем Java 8, и теперь я хочу обновить себя и изучить Java 11, но не могу установить его.

И это происходит со многими разработчиками Java. Иногда вы хотите изучить и изучить последнюю версию Java, например Java 11, но вы не можете установить ее на свой компьютер, потому что вы и ваша команда работаете над какой-то более старой версией, например Java 8, и вы не хочу ломать ваш проект.

Или предположим, что вы работаете над несколькими проектами, некоторые из которых используют Java 8, а некоторые новые проекты используют Java 11. Так что для параллельной работы над этими проектами вам нужно будет установить несколько JDK на вашу машину, и вы сможете переключаться между ними. между ними.

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

Ну, есть инструмент под названием SDKMan, который позволяет нам делать то же самое и согласно официальному сайту:


SDKMan! это инструмент для управления параллельными версиями нескольких
Комплекты разработки программного обеспечения на большинстве систем на основе Unix. Он предоставляет удобный интерфейс командной строки (CLI) и API для установки, переключения, удаления и вывода списка кандидатов.

Некоторые моменты о SDKMan следующие:

  1. SDKMan бесплатен для использования и разработан сообществом открытого кода.
  2. SDKMan написан на bash и для его работы требуются только программы curl и zip / unzip .
  3. SDKMan может установить около 29 комплектов разработки программного обеспечения для JVM, таких как Java, Groovy, Scala, Kotlin и Ceylon. Муравей, Gradle, Grails, Maven, SBT, Spark, Spring Boot, Vert.x.
  4. Нам не нужно беспокоиться о настройке PATH среды _HOME и PATH потому что SDKMan обрабатывает их автоматически.

Установка SDKMan

SDKMan может работать на любых платформах на основе UNIX, таких как Mac OSX, Linux, Cygwin, Solaris и FreeBSD, и мы можем установить его с помощью следующих команд:

Просто откройте новый терминал и введите:

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *