«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

Далее, давайте переместим только что извлеченный каталог jdk-11 в подкаталог /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 вручную

$ 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

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

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

$ 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 -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)

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

$ javac -version
javac 11.0.1

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

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

$ 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)

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

$ javac -version
javac 11.0.1

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

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

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

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

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

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

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

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

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

$ java -version

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

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)

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

$ javac -version

Давайте установим OpenJDK 8 из репозитория «Main» с помощью apt:

javac 1.8.0_181

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

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

$ 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

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

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

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

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

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

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

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

$ java -version

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

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)

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

$ javac -version
javac 1.8.0_181

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

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

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

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

These older versions of the JDK are provided to help developers debug issues in older systems. They are not updated with the latest security patches and are not recommended for use in production.

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

$ 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

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

https://jdk.java.net/archive/ https://www.oracle.com/technetwork/java/ javase/archive-139210.html

$ 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

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

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

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

$ 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

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

Как мы видели в разделе 2.2., чтобы загрузить пакет с веб-сайта Oracle, мы должны сначала принять лицензионное соглашение. В отличие от поддерживаемых версий, мы не можем загрузить более старые Oracle JDK через wget и cookie. Нам нужно перейти на https://www.oracle.com/technetwork/java/javase/downloads/java-archive-javase10-4425482.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

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

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

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

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

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

6. Сравнение

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

6.1. «Основной» репозиторий

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

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

6.2. PPA

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

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

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

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

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

$ apt list openjdk*jdk

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

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 в «основном» репозитории. Если мы уже добавили PPA с помощью add-apt-repository, мы можем исследовать его аналогичным образом с помощью apt list и apt show.

$ apt show openjdk-11-jdk

Чтобы узнать, какие PPA доступны, мы можем зайти на https://launchpad.net/. Если мы не найдем то, что ищем в «Основном» репозитории и в PPA, нам придется вернуться к ручной установке.

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)

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

$ 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

Давайте посмотрим, какие другие пакеты JDK существуют в «Основном» репозитории:

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

$ apt show default-jdk

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

“This dependency package points to the Java runtime, or Java compatible development kit recommended for this architecture…”

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

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

Version OpenJDK Oracle Java
11 manual installation manual installation
oracle-java11-installer in the linuxuprising PPA
10 manual installation – not supported manual installation – not supported
9 manual installation – not supported manual installation – not supported
8 openjdk-8-jdk in the “Main” repository oracle-java8-installer in the webupd8team PPA

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

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

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

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

$ update-alternatives --display java

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

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

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

$ sudo update-alternatives --config java

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

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 <enter> to keep the current choice[*], or type selection number:

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

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

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

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

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