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

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 загруженного пакета с 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, они будут прекрасно играть вместе:

[source,bash,gutter:,true]

$ 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

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

[source,bash,gutter:,true]

$ java -version

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

[source,bash,gutter:,true]

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)

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

[source,bash,gutter:,true]

$ javac -version

[source,bash,gutter:,true]

javac 11

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

Если мы хотим использовать новейшую версию Oracle JDK, мы можем выполнить тот же процесс ручной установки, что и для OpenJDK. Чтобы загрузить архив __tar__ для JDK 11 с веб-сайта https://www.oracle.com/technetwork/java/javase/downloads/index.html[Oracle], **  сначала мы должны принять лицензионное соглашение ** . По этой причине загрузка через __wget__ немного сложнее, чем для OpenJDK:

[source,bash,gutter:,true]

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

[source,bash,gutter:,true]

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

[source,bash,gutter:,true]

$ java -version

[source,bash,gutter:,true]

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

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

[source,bash,gutter:,true]

$ javac -version

[source,bash,gutter:,true]

javac 11.0.1

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

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

[source,bash,gutter:,true]

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

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

[source,bash,gutter:,true]

$ java -version

[source,bash,gutter:,true]

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

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

[source,bash,gutter:,true]

$ javac -version

[source,bash,gutter:,true]

javac 11.0.1

В Ubuntu 14.04 LTS команда __add-apt-repository__ по умолчанию недоступна. Чтобы добавить хранилище, сначала нам нужно установить пакет __software-properties-common__.

[source,bash,gutter:,true]

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

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

[[jdk-8]]

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

[[default-jdk]]

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

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

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

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

[source,bash,gutter:,true]

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

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

[source,bash,gutter:,true]

$ java -version

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

[source,bash,gutter:,true]

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__ также доступен:

[source,bash,gutter:,true]

$ javac -version

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

[source,bash,gutter:,true]

javac 1.8.0__181

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

В Ubuntu 14.04 LTS пакеты OpenJDK недоступны в репозитории «Main», поэтому мы установим их из __openjdk-r__ PPA. Как мы видели в разделе 2.3 выше, команда __add-apt-repository__ по умолчанию недоступна. Для этого нам нужен пакет __software-properties-common__:

[source,bash,gutter:,true]

$ 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

[[default-jdk]]

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

«Основной» репозиторий не содержит никакого проприетарного программного обеспечения. **  Если мы хотим установить Oracle Java с __apt__, нам придется использовать пакет из PPA ** . Мы уже видели, как установить Oracle JDK 11 из __linuxuprising__ PPA. Для Java 8 мы можем найти пакеты в __webupd8team__ PPA.

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

[source,bash,gutter:,true]

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

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

[source,bash,gutter:,true]

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

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

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

[source,bash,gutter:,true]

$ java -version

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

[source,bash,gutter:,true]

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

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

[source,bash,gutter:,true]

$ javac -version

[source,bash,gutter:,true]

javac 1.8.0__181

[[jdk-10]]

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

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

**  https://jdk.java.net/archive/

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

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

______________________________________________________________________________________________________________________________________________________________________________________________ Эти старые версии JDK предназначены для помощи разработчикам в отладке проблем в старых системах. ______________________________________________________________________________________________________________________________________________________________________________________________

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

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

[source,bash,gutter:,true]

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

[source,bash,gutter:,true]

$ 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

[[jdk-9]]

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

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

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

[source,bash,gutter:,true]

$ 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__. После этого мы следуем знакомым шагам:

[source,bash,gutter:,true]

$ 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 считаются **  более рискованными, чем пакеты в «основном» хранилище ** . Во-первых, мы должны явно добавить PPA в список репозиториев системы, указывая, что мы ему доверяем. После этого мы можем управлять пакетами с помощью обычных инструментов __apt__ (__apt update__ и __apt upgrade__).

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

Мы загружаем пакет прямо с сайта OpenJDK или Oracle.

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

[[other-openjdk]]

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

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

В этом разделе мы сосредоточимся на обзоре пакетов OpenJDK в репозитории «Main». Если мы уже добавили PPA с __add-apt-repository__, мы можем исследовать его аналогичным образом с __apt list__ и __apt show__.

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

Если мы хотим использовать неподдерживаемую версию, даже это может быть сложно.

На момент написания этой статьи мы не нашли пакетов для Java 9 или Java 10 на сайтах OpenJDK и Oracle.

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

[source,bash,gutter:,true]

$ apt list openjdk** jdk

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

[source,bash,gutter:,true]

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. Это может скоро измениться. Мы можем видеть это, если мы проверяем пакет:

[source,bash,gutter:,true]

$ apt show openjdk-11-jdk

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

[source,bash,gutter:,true]

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:

[source,bash,gutter:,true]

$ apt list openjdk-11**

[source,bash,gutter:,true]

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__

[source,bash,gutter:,true]

$ apt show default-jdk

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

______________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________ «Этот пакет зависимостей указывает на среду выполнения Java или Java-совместимый комплект разработки, рекомендованный для этой архитектуры ...» ______________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________

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

[[versions-table]]

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

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

[cols="^,,",options="header",]

| ================================================= ====================== | Версия | OpenJDK | Oracle Java | 11 | ручная установка | ручная установка __oracle-java11-installer__ в __linuxuprising__ PPA

| 10 | ручная установка - не поддерживается | ручная установка - не поддерживается

| 9 | ручная установка - не поддерживается | ручная установка - не поддерживается

| 8 | __openjdk-8-jdk__ в «Главном» хранилище | __oracle-java8-installer__ в __webupd8team__ PPA | ================================= ==============================================

[[multiple-versions]]

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

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

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

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

[source,bash,gutter:,true]

$ update-alternatives --display java

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

[source,bash,gutter:,true]

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

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

[source,bash,gutter:,true]

$ sudo update-alternatives --config java

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

[source,bash,gutter:,true]

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 из репозитория «Main», из PPA и вручную. Мы кратко сравнили эти три метода установки.

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

В качестве следующего шага это может быть полезно для https://www.baeldung.com/java-home-on-windows-7-8-10-mac-os-x-linux[set переменной окружения __JAVA__HOME__].