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__].