Linux несколько версий java

Background

I work mostly in Java and Scala on my job, but a lot of our legacy code has not yet been updated to the most recent JDK. Thus, we have to have JDK versions 5, 6, 7, and 8 installed on our development machines. Until recently, I had been using Arch Linux, but I just switched to OpenSuse Tumbleweed. The method I used to install the JDK versions was to download the RPM installer scripts from the Oracle website and install them beginning with 1.5 and working my way up to 1.8 so that the /usr/java/latest symbolic link would already be pointing to the correct version.

Problem

After reinstalling the aforementioned JDK versions, I attempted to point to these installations in IntelliJ IDEA. But it complained with the error «The selected directory is not a valid home for JDK». I have found a lot of resources online concerning this issue and ones like it, but none of those solutions helped in my case. Furthermore, the symbolic links in /usr/bin for the sundry Java executables were pointing to a conflagration of /etc/alternatives directives.

3 Answers 3

Solution

Apparently, the RPM scripts that Oracle releases tend to break any previous JDK versions you have installed by way of removing key JAR files from those older installations, such as tools.jar and rt.jar . This renders the formerly functioning JDK useless for developers.

My first response was to rename the installation directory prior to running the second installer script. But doing that made RPM complain about already having a version of the JDK installed when running the second script. So the hack of the hack is to install one version, rename that directory, then «remove» that version with RPM (even though it will complain about not being able to find any of the respective files associated with it). Then you are free to install the second version, repeating the previous steps for each one until you get to the latest version you wish to install.

Читайте также:  Открыть порт linux ufw

TL;DR

Here are the steps to get multiple working JDK versions on the same machine:

1. Install the first version of the JDK using the installer script:

:~# chmod a+x jdk-1_5_0_22-linux-amd64-rpm.bin :~# ./jdk-1_5_0_22-linux-amd64-rpm.bin -x :~# rpm -ivh --replacepkgs jdk-1_5_0_22-linux-amd64.rpm 

2. Rename the install directory:

:~# mv /usr/java/jdk1.5.0_22 /usr/java/jdk1.5.0_22-bak 

3. Use RPM to uninstall that version of the JDK:

:~# rpm -e jdk-2000:1.5.0_22-fcs.x86_64 

4. Rinse and repeat until all versions are installed

5. Remove the -bak from the end of the directory names

:~# mv /usr/java/jdk1.5.0_22-bak /usr/java/jdk1.5.0_22 

6. Change the /usr/java symlinks to the correct target:

:~# ls -la /usr/java default -> java7 java5 -> jdk1.5.0_22 java6 -> jdk1.6.0_45 java7 -> jdk1.7.0_80 java8 -> jdk1.8.0_101 jdk1.5.0_22 jdk1.6.0_45 jdk1.7.0_80 jdk1.8.0_101 latest -> java8 

7. Change the /usr/bin symlinks to the correct target:

:~# ls -la /usr/bin/ja* jar -> /usr/java/default/bin/jar java -> /usr/java/default/bin/java javac -> /usr/java/default/bin/javac javadoc -> /usr/java/default/bin/javadoc javah -> /usr/java/default/bin/javah javaws -> /usr/java/default/bin/javaws 

Источник

Управление несколькими версиями Java в Linux

1. Введение В 2017 году Oracle объявила о выпуске Java (тогда еще новой) за шесть месяцев. Thi… Помеченный как java, производительность, linux.

1. Вступление

В 2017 году Oracle объявила о выпуске Java (тогда еще новой) за шесть месяцев. Это было значительным изменением по сравнению с предыдущим циклом Java, состоящим из одного крупного выпуска каждые два-три года. С появлением новых выпусков Java предоставляет разработчикам больше инноваций и делает платформу еще более привлекательной. Это также означает, что управлять различными версиями сложнее, если вы хотите идти в ногу с новыми функциями или если для разных проектов требуются разные версии. В этом сообщении в блоге мы увидим, как управлять несколькими версиями Java в Linux с помощью jEnv .

Читайте также:  Найти установленный пакет linux

2. Что такое jEnv?

jEnv – это инструмент командной строки, который помогает управлять несколькими установками Java. Таким образом, разработчики могут надеяться забыть, как установить переменную среды JAVA_HOME. С помощью jEnv вы можете настроить локальные установки Java на глобальных , каталог и даже уровень оболочки . Это возможно, потому что jEnv хранит локальную версию Java в файле .java-версия и, в зависимости от контекста, просто перенаправит на соответствующий установочный файл.

3. Установка

Мы начнем с установки некоторых версий JDK, чтобы у нас были версии для управления. Нам также понадобится Git чтобы иметь возможность установить jEnv.

Установить Java SE 8 и Java SE 11

$ sudo apt install openjdk-8-jdk && sudo apt install openjdk-11-jdk

Для установки jEnv мы начинаем с клонирования его репозитория git

$ git clone https://github.com/gcuisinier/jenv.git ~/.jenv

Затем мы добавляем его в нашу оболочку Bash

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

Если вышеприведенные команды не работают для вас, не волнуйтесь, просто используйте .bashrc вместо

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

Первая команда выше добавляет jEnv в ваш ПУТЬ чтобы можно было найти его двоичные файлы. Второй просто инициализирует jEnv после загрузки вашей оболочки, а source – это встроенная команда оболочки bash, которая выполняет содержимое файла.

4. Использование

Если вы запустите jenv , вы должны получить следующее

$ jenv jenv 0.5.2-28-g3f3e517 Usage: jenv [] 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 ' for information on a specific command. For full documentation, see: https://github.com/jenv/jenv/blob/master/README.md 

Теперь давайте добавим различные версии JDK, которые мы установили, в наш инструмент командной строки

$ jenv add /usr/lib/jvm/java-1.8.0-openjdk-amd64 $ jenv add /usr/lib/jvm/java-11-openjdk-amd64

Чтобы узнать, какими версиями может управлять наш инструмент, выполнять

$ jenv versions system 11 11.0 11.0.4 *1.8 (set by /home/nkengasong/.jenv/version) 1.8.0.222 openjdk64-11.0.4 openjdk64-1.8.0.222

Надеюсь, вы сможете увидеть что-то похожее на. Также обратите внимание на разные 11 и 1.8.0, это просто псевдонимы, относящиеся к одной и той же версии, так что на самом деле у вас две управляемые версии.

Читайте также:  Executable file formats in linux

Теперь вы можете указать, какую версию вы хотите использовать. Например, если вы хотите использовать Java 11 глобально, используйте следующую команду

Вы можете работать над проектом JDK 8, не меняя свою глобальную версию.

$ mkdir my-jdk-8-project $ cd my-jdk-8-project $ jenv local 1.8

Если вы проверите версию Java в своем каталоге my-jdk-8-project , вы получите следующее

$ java -version openjdk version "1.8.0_222" OpenJDK Runtime Environment (build 1.8.0_222-8u222-b10-1ubuntu1~18.04.1-b10) OpenJDK 64-Bit Server VM (build 25.222-b10, mixed mode)

Наконец, мы должны установить $JAVA_HOME , потому что JENV, к сожалению, не сделает этого за нас. Это очень важно, учитывая, что несколько инструментов, таких как IDE, зависят от этой переменной. Для этого мы включаем плагин экспорт следующим образом

Теперь мы можем убедиться, что для переменной $JAVA_HOME установлена глобальная версия Java

$ echo $JAVA_HOME /home/nkengasong/.jenv/versions/1.8

Вы также можете включить другие плагины, такие как maven и оценить плагины

$ jenv enable-plugin maven $ jenv enable-plugin gradle

5. Вывод

В этом сообщении в блоге мы рассмотрели, как управлять несколькими версиями Java в Linux с помощью инструмента командной строки java, который поможет вам забыть, как установить переменную среды JAVA_HOME.

Читайте ещё по теме:

Источник

Оцените статью
Adblock
detector