Рубрики
Без рубрики

Установка Java в Ubuntu

Узнайте, как установить OpenJDK и Oracle JDK версий с 8 по 11 в системах Ubuntu.

Автор оригинала: baeldung.

1. Обзор

В этом уроке мы представим различные методы установки JDK на Ubuntu . Затем мы кратко сравним методы. Наконец, мы покажем, как управлять несколькими установками Java в системе Ubuntu.

В качестве предварительного условия для каждого метода нам необходимо

  • система Ubuntu
  • войти в систему как пользователь, не являющийся root, с правами sudo

Инструкции, описанные ниже, были протестированы на Ubuntu 18.10, 18.04 LTS, 16.04 LTS и 14.04 LTS. Для Ubuntu 14.04 LTS есть некоторые различия, которые упоминаются в тексте.

Обратите внимание, что как пакеты, которые вы можете загрузить из OpenJDK и Oracle, так и пакеты, доступные в репозиториях, регулярно обновляются. Точные имена пакетов, вероятно, изменятся в течение нескольких месяцев, но основные методы установки останутся прежними.

2. Установка JDK 11

Если мы хотим использовать последнюю и самую лучшую версию JDK, часто ручная установка-это путь. Это означает загрузку пакета с сайта OpenJDK или Oracle и настройку его таким образом, чтобы он соответствовал соглашениям о том, как apt настраивает пакеты JDK.

2.1. Установка OpenJDK 11 Вручную

Прежде всего, давайте загрузим tar архив недавно выпущенного OpenJDK 11:

$ wget https://download.java.net/java/ga/jdk11/openjdk-11_linux-x64_bin.tar.gz

И мы сравниваем sha256 сумму загруженного пакета с тем, который предоставлен на сайте OpenJDK :

$ sha256sum openjdk-11_linux-x64_bin.tar.gz

Давайте распакуем архив tar :

$ tar xzvf openjdk-11_linux-x64_bin.tar.gz

Далее, давайте переместим каталог jdk11 , который мы только что извлекли, в подкаталог /usr/lib/jvm . Пакеты apt , описанные в следующем разделе, также помещают свои JDK в этот каталог:

$ sudo mkdir /usr/lib/jvm
$ sudo mv jdk-11 /usr/lib/jvm/openjdk-11-manual-installation/

Теперь мы хотим сделать команды java и javac доступными . Одной из возможностей было бы создать для них символические ссылки, например, в каталоге /usr/bin . Но вместо этого мы установим альтернативу для них обоих. Таким образом, если мы когда-нибудь захотим установить дополнительные версии JDK, они будут хорошо работать вместе:

$ sudo update-alternatives --install /usr/bin/java java /usr/lib/jvm/openjdk-11-manual-installation/bin/java 1
$ sudo update-alternatives --install /usr/bin/javac javac /usr/lib/jvm/openjdk-11-manual-installation/bin/javac 1

Давайте проверим установку:

$ java -version

Как мы видим из выходных данных, мы действительно установили последнюю версию OpenJDK JRE и JVM:

openjdk version "11" 2018-09-25
OpenJDK Runtime Environment 18.9 (build 11+28)
OpenJDK 64-Bit Server VM 18.9 (build 11+28, mixed mode)

Давайте также взглянем на версию компилятора:

$ javac -version
javac 11

2.2. Установка Oracle JDK 11 Вручную

Если мы хотим убедиться, что используем новейшую версию Oracle JDK, мы можем следовать аналогичному ручному процессу установки, как и для OpenJDK. Чтобы загрузить архив tar для JDK 11 с веб-сайта Oracle , мы должны сначала принять лицензионное соглашение . По этой причине загрузка через wget немного сложнее, чем для OpenJDK:

$ wget -c --header "Cookie: oraclelicense=accept-securebackup-cookie" \
http://download.oracle.com/otn-pub/java/jdk/11.0.1+13/90cf5d8f270a4347a95050320eef3fb7/jdk-11.0.1_linux-x64_bin.tar.gz

В приведенном выше примере загружается пакет для 11.0.1. Точная ссылка для загрузки изменяется для каждой второстепенной версии.

Следующие шаги такие же, как и для OpenJDK:

$ sha256sum jdk-11.0.1_linux-x64_bin.tar.gz
$ tar xzvf jdk-11.0.1_linux-x64_bin.tar.gz
$ sudo mkdir /usr/lib/jvm
$ sudo mv jdk-11.0.1 /usr/lib/jvm/oracle-jdk-11-manual-installation/
$ sudo update-alternatives --install /usr/bin/java java /usr/lib/jvm/oracle-jdk-11-manual-installation/bin/java 1
$ sudo update-alternatives --install /usr/bin/javac javac /usr/lib/jvm/oracle-jdk-11-manual-installation/bin/javac 1

Проверка тоже такая же. Но вывод показывает, что на этот раз мы установили не OpenJDK, а Java(TM):

$ java -version
java version "11.0.1" 2018-10-16 LTS
Java(TM) SE Runtime Environment 18.9 (build 11.0.1+13-LTS)
Java HotSpot(TM) 64-Bit Server VM 18.9 (build 11.0.1+13-LTS, mixed mode)

И для компилятора:

$ javac -version
javac 11.0.1

2.3. Установка Oracle JDK 11 из PPA

В настоящее время Oracle JDK 11 также доступен в PPA (личном архиве пакетов). Эта установка включает в себя 2 шага: добавление репозитория в нашу систему и установку пакета из репозитория через apt:

$ sudo add-apt-repository ppa:linuxuprising/java
$ sudo apt update
$ sudo apt install oracle-java11-installer

Шаги проверки должны показать тот же результат, что и после ручной установки в разделе 2.2.1.:

$ java -version
java version "11.0.1" 2018-10-16 LTS
Java(TM) SE Runtime Environment 18.9 (build 11.0.1+13-LTS)
Java HotSpot(TM) 64-Bit Server VM 18.9 (build 11.0.1+13-LTS, mixed mode)

И для компилятора:

$ javac -version
javac 11.0.1

В Ubuntu 14.04 LTS команда add-apt-repository по умолчанию недоступна. Чтобы добавить репозиторий, сначала нам нужно установить пакет software-properties-common .

$ sudo apt update
$ sudo apt install software-properties-common

После этого мы можем продолжить работу с add-apt-repository, apt update и apt install , как показано выше.

3. Установка JDK 8

3.1. Установка OpenJDK 8 на Ubuntu 16.04 LTS и новее

JDK 8-это версия LTS, которая существует уже некоторое время. По этой причине мы можем найти обновленную версию OpenJDK 8 в “Главном” репозитории на большинстве поддерживаемых версий Ubuntu. Конечно, мы также можем перейти на веб-сайт OpenJDK, взять там пакет и установить его так же, как мы видели в предыдущем разделе.

Но использование инструментов apt и “Основного” репозитория дает некоторые преимущества. “Основной” репозиторий доступен по умолчанию во всех системах Ubuntu. Он поддерживается Canonical — той же компанией, которая поддерживает саму Ubuntu.

Давайте установим OpenJDK 8 из “Основного” репозитория с помощью apt :

$ sudo apt update
$ sudo apt install openjdk-8-jdk

Теперь давайте проверим установку:

$ java -version

В результате должна быть указана среда выполнения и JVM:

openjdk version "1.8.0_181"
OpenJDK Runtime Environment (build 1.8.0_181-8u181-b13-0ubuntu0.18.04.1-b13)
OpenJDK 64-Bit Server VM (build 25.181-b13, mixed mode)

Давайте проверим, что исполняемый файл javac также доступен:

$ javac -version

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

javac 1.8.0_181

3.2. Установка OpenJDK 8 на Ubuntu 14.04 LTS

В Ubuntu 14.04 LTS пакеты OpenJDK недоступны в “Главном” репозитории, поэтому мы установим их из openjdk-r PPA. Как мы видели в разделе 2.3 выше, команда add-apt-repository по умолчанию недоступна. Для этого нам нужен пакет software-properties-common :

$ sudo apt update
$ sudo apt install software-properties-common
$ sudo add-apt-repository ppa:openjdk-r/ppa
$ sudo apt update
$ sudo apt install openjdk-8-jdk

3.3. Установка Oracle JDK 8 из PPA

“Основной” репозиторий не содержит никакого проприетарного программного обеспечения. Если мы хотим установить Oracle Java с помощью apt , нам придется использовать пакет из PPA . Мы уже видели, как установить Oracle JDK 11 из linuxuprising PPA. Для Java 8 мы можем найти пакеты в webupd8team PPA.

Во-первых, нам нужно добавить репозиторий PPA apt в нашу систему:

$ sudo add-apt-repository ppa:webupd8team/java

Затем мы можем установить пакет обычным способом:

$ sudo apt update
$ sudo apt install oracle-java8-installer

Во время установки мы должны принять лицензионное соглашение Oracle. Давайте проверим установку:

$ java -version

Вывод показывает Java(TM) JRE и JVM:

java version "1.8.0_181"
Java(TM) SE Runtime Environment (build 1.8.0_181-b13)
Java HotSpot(TM) 64-Bit Server VM (build 25.181-b13, mixed mode)

Мы также можем проверить, установлен ли компилятор:

$ javac -version
javac 1.8.0_181

4. Установка JDK 10

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

Оба сайта содержат одно и то же предупреждение:

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

4.1. Установка OpenJDK 10 Вручную

Давайте посмотрим, как установить OpenJDK 10.0.1:

$ wget https://download.java.net/java/GA/jdk10/10.0.1/fb4372174a714e6b8c52526dc134031e/10/openjdk-10.0.1_linux-x64_bin.tar.gz
$ sha256sum openjdk-10.0.1_linux-x64_bin.tar.gz
$ tar xzvf openjdk-10.0.1_linux-x64_bin.tar.gz
$ sudo mkdir /usr/lib/jvm
$ sudo mv jdk-10.0.1 /usr/lib/jvm/openjdk-10-manual-installation/
$ sudo update-alternatives --install /usr/bin/java java /usr/lib/jvm/openjdk-10-manual-installation/bin/java 1
$ sudo update-alternatives --install /usr/bin/javac javac /usr/lib/jvm/openjdk-10-manual-installation/bin/javac 1
$ java -version
$ javac -version

4.2. Установка Oracle JDK 10 Вручную

Как мы видели в разделе 2.2., чтобы загрузить пакет с веб-сайта Oracle, мы должны сначала принять лицензионное соглашение . В отличие от поддерживаемых версий, мы не можем загрузить старые Oracle JDKS через wget и файл cookie. Нам нужно отправиться в https://www.oracle.com/technetwork/java/javase/downloads/java-archive-javase10-4425482.html и скачать tar.gz файл. После этого мы следуем знакомым шагам:

$ sha256sum jdk-10.0.2_linux-x64_bin.tar.gz
$ tar xzvf jdk-10.0.2_linux-x64_bin.tar.gz
$ sudo mkdir /usr/lib/jvm
$ sudo mv jdk-10.0.2 /usr/lib/jvm/oracle-jdk-10-manual-installation/
$ sudo update-alternatives --install /usr/bin/java java /usr/lib/jvm/oracle-jdk-10-manual-installation/bin/java 1
$ sudo update-alternatives --install /usr/bin/javac javac /usr/lib/jvm/oracle-jdk-10-manual-installation/bin/javac 1
$ java -version
$ javac -version

5. Установка JDK 9

5.1. Установка OpenJDK 9 Вручную

Точно так же, как мы видели выше с OpenJDK 10.0.1, мы загружаем пакет OpenJDK 9 через wget и настраиваем его в соответствии с соглашениями:

$ wget https://download.java.net/java/GA/jdk9/9.0.4/binaries/openjdk-9.0.4_linux-x64_bin.tar.gz
$ sha256sum openjdk-9.0.4_linux-x64_bin.tar.gz
$ tar xzvf openjdk-9.0.4_linux-x64_bin.tar.gz
$ sudo mkdir /usr/lib/jvm
$ sudo mv jdk-9.0.4 /usr/lib/jvm/openjdk-9-manual-installation/
$ sudo update-alternatives --install /usr/bin/java java /usr/lib/jvm/openjdk-9-manual-installation/bin/java 1
$ sudo update-alternatives --install /usr/bin/javac javac /usr/lib/jvm/openjdk-9-manual-installation/bin/javac 1
$ java -version
$ javac -version

5.2. Установка Oracle JDK 9 Вручную

Еще раз, мы используем тот же метод, что и для JDK 10. Нам нужно отправиться в https://www.oracle.com/technetwork/java/javase/downloads/java-archive-javase9-3934878.html и скачать tar.gz файл. После этого мы следуем знакомым шагам:

$ sha256sum jdk-9.0.4_linux-x64_bin.tar.gz
$ tar xzvf jdk-9.0.4_linux-x64_bin.tar.gz
$ sudo mkdir /usr/lib/jvm
$ sudo mv jdk-9.0.4 /usr/lib/jvm/oracle-jdk-9-manual-installation/
$ sudo update-alternatives --install /usr/bin/java java /usr/lib/jvm/oracle-jdk-9-manual-installation/bin/java 1
$ sudo update-alternatives --install /usr/bin/javac javac /usr/lib/jvm/oracle-jdk-9-manual-installation/bin/javac 1
$ java -version
$ javac -version

6. Сравнение

Мы видели три разных способа установки JDK в Ubuntu. Давайте кратко рассмотрим каждый из них, указав на преимущества и недостатки.

6.1. “Основной” репозиторий

Это “родной” способ установки Ubuntu . Большим преимуществом является то, что мы обновляем пакеты с помощью “обычного apt рабочего процесса” с помощью apt update и apt upgrade .

Кроме того, “Основной” репозиторий поддерживается Canonical, который обеспечивает достаточно быстрые (если не немедленные) обновления . Например, версии OpenJDK 10.0.1 и 10.0.2 были синхронизированы в течение месяца после выпуска.

6.2. PPA

PPA-это небольшие репозитории , поддерживаемые отдельным разработчиком или группой . Это также означает, что частота обновления зависит от сопровождающего.

Пакеты из PPAS считаются более рискованными, чем пакеты в “Основном” репозитории . Во-первых, мы должны явно добавить PPA в список репозиториев системы, указав, что мы ему доверяем. После этого мы можем управлять пакетами с помощью обычного инструмента apt ( apt update и apt upgrade ).

6.3. Ручная Установка

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

7. Изучение других версий JDKs

Примеры в разделах 2 и 3 отражают текущее состояние Ubuntu 18.04 LTS. Имейте в виду, что JDKS и соответствующие пакеты регулярно обновляются. Таким образом, полезно знать, как исследовать наши текущие возможности .

В этом разделе мы сосредоточимся на изучении пакетов OpenJDK в “Главном” репозитории. Если мы уже добавили PPA с помощью add-apt-repository , мы можем изучить его аналогичным образом с помощью apt list и apt show .

Чтобы узнать, какие ППА доступны, мы можем отправиться в https://launchpad.net/ . Если мы не найдем то, что ищем, в “Главном” репозитории и в PPAS, нам придется вернуться к ручной установке.

Если мы хотим использовать неподдерживаемую версию, даже это может быть сложно. На момент написания этой статьи мы не нашли никаких пакетов для Java 9 или Java 10 на веб-сайтах OpenJDK и Oracle.

Давайте посмотрим, какие другие пакеты JDK существуют в “Главном” репозитории:

$ apt list openjdk*jdk

В Ubuntu 18.04 LTS мы можем выбирать между двумя текущими версиями LTS Java:

Listing... Done
openjdk-11-jdk/bionic-updates,bionic-security,now 10.0.2+13-1ubuntu0.18.04.2 amd64 [installed,automatic]
openjdk-8-jdk/bionic-updates,bionic-security 8u181-b13-0ubuntu0.18.04.1 amd64

Также стоит отметить , что, хотя пакет называется openjdk-11-jdk , на момент написания этой статьи он фактически устанавливает версию 10.0.2. Это, вероятно, скоро изменится. Мы можем это увидеть, если осмотрим упаковку:

$ apt show openjdk-11-jdk

Давайте взглянем на раздел “Зависит” вывода. Обратите внимание, что эти пакеты (например, JRE) также устанавливаются вместе с openjdk-11-jdk :

Depends: openjdk-11-jre (= 10.0.2+13-1ubuntu0.18.04.2),
openjdk-11-jdk-headless (= 10.0.2+13-1ubuntu0.18.04.2),
libc6 (>= 2.2.5)

Давайте рассмотрим, какие другие пакеты у нас есть в вашем распоряжении, кроме пакета jdk по умолчанию:

$ apt list openjdk-11*
Listing... Done
openjdk-11-dbg/bionic-updates,bionic-security 10.0.2+13-1ubuntu0.18.04.2 amd64
openjdk-11-demo/bionic-updates,bionic-security 10.0.2+13-1ubuntu0.18.04.2 amd64
openjdk-11-doc/bionic-updates,bionic-updates,bionic-security,bionic-security 10.0.2+13-1ubuntu0.18.04.2 all
openjdk-11-jdk/bionic-updates,bionic-security 10.0.2+13-1ubuntu0.18.04.2 amd64
openjdk-11-jdk-headless/bionic-updates,bionic-security 10.0.2+13-1ubuntu0.18.04.2 amd64
openjdk-11-jre/bionic-updates,bionic-security,now 10.0.2+13-1ubuntu0.18.04.2 amd64 [installed,automatic]
openjdk-11-jre-headless/bionic-updates,bionic-security,now 10.0.2+13-1ubuntu0.18.04.2 amd64 [installed,automatic]
openjdk-11-jre-zero/bionic-updates,bionic-security 10.0.2+13-1ubuntu0.18.04.2 amd64
openjdk-11-source/bionic-updates,bionic-updates,bionic-security,bionic-security 10.0.2+13-1ubuntu0.18.04.2 all

Мы можем найти некоторые из этих пакетов полезными. Например, openjdk-11-source содержит исходные файлы для классов API Java core, в то время как openjdk-11-dbg содержит символы отладки.

Помимо семейства openjdk -* , есть пакет default-jdk , который стоит изучить:

$ apt show default-jdk

В конце вывода в описании говорится::

“Этот пакет зависимостей указывает на среду выполнения Java или Java-совместимый комплект разработки, рекомендованный для этой архитектуры…”

В случае Ubuntu 18.04 LTS это пакет openjdk-11-jdk на данный момент.

8. Обзор: Версии и пакеты Java

Теперь давайте посмотрим, как различные версии Java могут быть установлены на Ubuntu 18.04 LTS на момент написания этой статьи:

ручная установка 11 ручная установка oracle-java 11-installer в linux uprising PPA
ручная установка – не поддерживается 10 ручная установка – не поддерживается
ручная установка – не поддерживается 9 ручная установка – не поддерживается
openjdk-8-jdk в “Главном” репозитории 8 oracle-java8-установщик в webupd8team PPA

9. Несколько версий Java в системе Ubuntu

Стандартный способ управления несколькими версиями одного и того же программного обеспечения в Ubuntu-через систему альтернатив Debian. Большую часть времени мы создаем, поддерживаем и отображаем альтернативы с помощью программы update-alternatives .

Когда apt устанавливает пакет JDK, он автоматически добавляет записи для альтернатив. В случае ручной установки мы видели, как добавить альтернативы для java и javac соответственно.

Давайте посмотрим на наши альтернативы:

$ update-alternatives --display java

В нашей тестовой системе, где мы установили две разные версии OpenJDK, в выходных данных перечислены обе альтернативы с соответствующими приоритетами:

java - auto mode
link best version is /usr/lib/jvm/java-11-openjdk-amd64/bin/java
link currently points to /usr/lib/jvm/java-11-openjdk-amd64/bin/java
link java is /usr/bin/java
slave java.1.gz is /usr/share/man/man1/java.1.gz
/usr/lib/jvm/java-11-openjdk-amd64/bin/java - priority 1101
slave java.1.gz: /usr/lib/jvm/java-11-openjdk-amd64/man/man1/java.1.gz
/usr/lib/jvm/java-8-openjdk-amd64/jre/bin/java - priority 1081
slave java.1.gz: /usr/lib/jvm/java-8-openjdk-amd64/jre/man/man1/java.1.gz

Теперь, когда мы увидели наши альтернативы, мы также можем переключаться между ними:

$ sudo 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-11-openjdk-amd64/bin/java 1101 auto mode
1 /usr/lib/jvm/java-11-openjdk-amd64/bin/java 1101 manual mode
2 /usr/lib/jvm/java-8-openjdk-amd64/jre/bin/java 1081 manual mode

Press  to keep the current choice[*], or type selection number:

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

10. Заключение

Подводя итог, в этой статье мы видели примеры установки JDK из “Основного” репозитория, из PPA и вручную. Мы кратко сравнили эти три способа установки.

И, наконец, мы видели, как управлять несколькими установками Java в системе Ubuntu с помощью update-alternatives .

В качестве следующего шага может быть полезно установить переменную среды JAVA_HOME .