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 вручную
Если мы хотим убедиться, что используем новейшую версию 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
и репозитория «Main» дает некоторые преимущества. Репозиторий «Основной» доступен по умолчанию во всех системах Ubuntu. Его поддерживает Canonical — та же компания, которая поддерживает саму Ubuntu.
Давайте установим OpenJDK 8 из «Основного» репозитория с помощью apt
:
$ sudo apt update
$ sudo apt install openjdk-8-jdk
Теперь давайте проверим установку:
$ java -version
В результате должны быть указаны Runtime Environment и 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 можно найти в PPA- репозитории webupd8team
.
Во-первых, нам нужно добавить репозиторий 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 JDK через 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 считаются более рискованными, чем пакеты в «Основном» репозитории . Во-первых, мы должны явно добавить PPA в список репозиториев системы, указав, что мы ему доверяем. После этого мы можем управлять пакетами с помощью обычных инструментов apt ( apt
update
и apt upgrade
).
6.3. Ручная установка
Скачиваем пакет прямо с сайта OpenJDK или Oracle. Хотя этот метод предлагает большую гибкость, мы несем ответственность за обновления. Если мы хотим иметь самую последнюю и лучшую версию JDK, это правильный путь.
7. Изучение других версий JDK
Примеры в разделах 2 и 3 отражают текущее состояние Ubuntu 18.04 LTS. Имейте в виду, что JDK и соответствующие пакеты регулярно обновляются. Таким образом, полезно знать, как исследовать наши текущие возможности .
В этом разделе мы сосредоточимся на обзоре пакетов OpenJDK в «основном» репозитории. Если мы уже добавили PPA с помощью add-apt-repository
, мы можем исследовать его аналогичным образом с помощью apt list
и apt show
.
Чтобы узнать, какие PPA доступны, мы можем зайти на https://launchpad.net/ . Если мы не найдем то, что ищем в «Основном» репозитории и в PPA, нам придется вернуться к ручной установке.
Если мы хотим использовать неподдерживаемую версию, даже это может быть сложно. На момент написания этой статьи мы не нашли пакетов для Java 9 или Java 10 на веб-сайтах OpenJDK и Oracle.
Давайте посмотрим, какие еще пакеты JDK существуют в «Основном» репозитории:
$ apt list openjdk*jdk
В Ubuntu 18.04 LTS мы можем выбирать между двумя текущими версиями Java LTS:
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, а 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 на момент написания этой статьи:
| Версия | OpenJDK | Oracle Java |
| 11 | ручная установка | ручная установка
oracle-java11-installer
в linuxuprising
PPA |
| 10 | ручная установка - не поддерживается | ручная установка - не поддерживается |
| 9 | ручная установка - не поддерживается | ручная установка - не поддерживается |
| 8 | openjdk-8-jdk
в «Основном» репозитории | oracle-java8-installer
в PPA webupd8team
|
9. Несколько версий Java в системе Ubuntu
Стандартный способ управления несколькими версиями одного и того же программного обеспечения в Ubuntu — через систему альтернатив Debian. Большую часть времени мы создаем, поддерживаем и отображаем альтернативы через программу обновления альтернатив
.
Когда 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 <enter> to keep the current choice[*], or type selection number:
Если мы работаем над несколькими приложениями, написанными на разных версиях Java, скорее всего, нам также потребуются разные версии другого программного обеспечения (например, Maven, какой-нибудь сервер приложений). В этом случае мы можем захотеть рассмотреть возможность использования больших абстракций, таких как контейнеры Docker.
10. Заключение
Подводя итог, в этой статье мы видели примеры установки JDK из «Основного» репозитория, из PPA и вручную. Мы кратко сравнили эти три метода установки.
И, наконец, мы увидели, как управлять несколькими установками Java в системе Ubuntu с помощью update-alternatives
.
В качестве следующего шага может быть полезно установить переменную окружения JAVA_HOME
.