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