Перейти к основному содержимому

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

· 13 мин. чтения

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 .