Как мне установить openjdk 7 на Ubuntu 16.04 или выше?
Я хотел бы обновить свою основную систему до 16.04, но я работаю над проектами, которые требуют OpenJDK 7.
Видимо это не доступно из тривиального apt-get install openjdk-7-jdk, Только версии 8 и 9 перечислены в хранилище.
Может кто-нибудь указать мне инструкции о том, как его установить?
7 ответов
Предупреждение безопасности
Пакеты в упомянутом ниже PPA не обновляются с помощью исправлений безопасности для Java. Не использовать в производстве; вместо этого посмотрите альтернативные ответы.
На момент написания статьи последняя загрузка OpenJDK 7 была сделана "2016-04-22" с версией 7u95 и по-прежнему доступна как "последняя", где Ubuntu 14.04 была обновлена до 7u181.
ОБНОВЛЕНИЕ: ХОТИТЕ, ЧТО ЭТО САМЫЙ ГОЛОСОВАННЫЙ ОТВЕТ, ЕГО ВЕРОЯТНО НЕ ТО ОДИН, КОТОРЫЙ ВЫ ХОТИТЕ ИСПОЛЬЗОВАТЬ В 2018 ГОДУ ИЗ-ЗА НЕДОПУСТИМОГО ОБНОВЛЕНИЯ БЕЗОПАСНОСТИ НАСТОЯЩИМ PPA.
Я нашел следующие инструкции, которые работали для меня:
sudo add-apt-repository ppa:openjdk-r/ppa
sudo apt-get update
sudo apt-get install openjdk-7-jdk
Это определяет "PPA для загрузок OpenJDK (с ограничениями)" как дополнительное хранилище пакетов, обновляет вашу информацию и устанавливает пакет с его зависимостями (из этого хранилища).
Не похоже, что сопровождающий openjdk-r/ppa будет обновлять пакет openjdk-7 после версии 7u95-2.6.4-3. Описание этого пакета "Скопировано из debian экспериментальный в Первичном архиве для Debian GNU/Linux" дает нам подсказку о том, как справиться с этим самостоятельно.
Вариант 1: ручная установка
Загрузите пакеты, предназначенные для вашей архитектуры:
(для большинства пользователей это означает amd64, если установлена 64-битная версия, или i386, если установлена 32-битная версия Ubuntu)- OpenJDK-7-JDK
- OpenJDK-7-JRE
- OpenJDK-7-JRE-безголовый
- libjpeg62-турбо
- libfontconfig1 (только Ubuntu 17.10 и более ранние; см. примечание внизу)
- fontconfig-config (только Ubuntu 17.10 и более ранние; см. примечание внизу)
(Попытка) установить пакеты с помощью
dpkg:Ubuntu 17.10 и более ранние версии:
sudo dpkg -i openjdk-7-* libjpeg62-turbo* libfontconfig1* fontconfig-config*Ubuntu 18.04 и позже:
sudo dpkg -i openjdk-7-* libjpeg62-turbo*Проверьте вывод из
dpkg, Если были проблемы с зависимостями - что вполне вероятно - вы увидите следующее (вместо вашей архитектуры вместо amd64):При обработке возникли ошибки: OpenJDK-7-JRE:amd64 OpenJDK-7-JRE-обезглавленное:amd64 OpenJDK-7-JDK:amd64
Если проблем с зависимостями не было, отлично, все готово, перейдите к #4. В противном случае, если вам нужно решить некоторые проблемы с зависимостями, это обрабатывается с помощью:
sudo apt install -fОбратите внимание, нет необходимости повторного запуска
dpkgпосле сдачиaptразрешить зависимости. Он автоматически завершит установку пакетов openjdk.Обновите альтернативы Java. Вы можете просмотреть все установленные версии Java с
update-java-alternatives --list, Чтобы активировать OpenJDK Java 1.7, запустите:sudo update-java-alternatives -s java-1.7.0-openjdk-amd64Вы можете заметить ошибку об
IcedTeaPlugin.soПлагин недоступен. Это не очень важно для разработчиков, работающих с JDK.Убедитесь, что Java работает:
java -versionкоторый должен вывести что-то похожее на:
Java-версия "1.7.0_161" Среда выполнения OpenJDK (IcedTea 2.6.12) (7u161-2.6.12-1) 64-битная серверная виртуальная машина OpenJDK (сборка 24.161-b01, смешанный режим)
Вариант 2: Автоматическая установка (включая обновления с apt)
Пиннинг можно использовать для установки и обновления openjdk-7-jdk и его зависимостей из репозиториев Debian.
Создать файл закрепления, который говорит
aptрассматривать только пакеты, которые нас интересуют (мы, конечно, не хотим, чтобы весь наш дистрибутив Ubuntu "обновлялся" экспериментальными пакетами Debian).Создать файл
/etc/apt/preferences.d/debianс содержанием ниже. Вам понадобятся привилегии суперпользователя, поэтому используйте один изsudo vim,sudo nano,gksudo gedit, так далее.Package: * Pin: release o=Debian,n=experimental Pin-Priority: -1 Package: * Pin: release o=Debian,n=sid Pin-Priority: -1 Package: openjdk-7-jdk Pin: release o=Debian,n=experimental Pin-Priority: 500 Package: openjdk-7-jre Pin: release o=Debian,n=experimental Pin-Priority: 500 Package: openjdk-7-jre-headless Pin: release o=Debian,n=experimental Pin-Priority: 500 Package: libjpeg62-turbo Pin: release o=Debian,n=sid Pin-Priority: 500Для Ubuntu 17.10 и более ранних версий также добавьте следующее (см. Примечание внизу):
Package: libfontconfig1 Pin: release o=Debian,n=sid Pin-Priority: 500 Package: fontconfig-config Pin: release o=Debian,n=sid Pin-Priority: 500Установите набор ключей Debian:
sudo apt install debian-archive-keyringПримечание: хотя это самый простой способ добавления цепочки ключей Debian, он может быть устаревшим. Проверьте выход, как показано ниже при запуске
apt updateна шаге 4:W: Ошибка GPG: http://cdn-fastly.deb.debian.org/debian экспериментальный InRelease: Следующие подписи не могут быть проверены, поскольку открытый ключ недоступен: NO_PUBKEY 8B48AD6246925553 NO_PUBKEY 7638D0442B90D010 E: Репозиторий "http://httpredir.debian.org/debian экспериментальный InRelease" не подписан.
Если вы видите эту ошибку, то вручную добавьте необходимые ключи с помощью:
sudo apt-key adv --keyserver keyserver.ubuntu.com --recv-keys 8B48AD6246925553 sudo apt-key adv --keyserver keyserver.ubuntu.com --recv-keys 7638D0442B90D010где
8B48AD6246925553а также7638D0442B90D010должен соответствовать pubkeys вы видите в предупреждающем сообщении.Добавьте необходимые репозитории:
sudo add-apt-repository 'deb http://httpredir.debian.org/debian experimental main' sudo add-apt-repository 'deb http://httpredir.debian.org/debian sid main'Почему бы не использовать стабильный репозиторий Debian? Вы столкнетесь с неудовлетворительными зависимостями в стабильной версии Debian. Экспериментальные (для openjdk-7) и sid (для libjpeg62-turbo, libfontconfig1 и fontconfig-config) репозитории более снисходительны с зависимостями версий.
Обновить
aptкеш (ожидайте, что это займет некоторое время, так как списки пакетов Debian большие):sudo apt updateУстановите openjdk-7-jdk:
sudo apt install openjdk-7-jdkОбновите альтернативы Java. Вы можете просмотреть все установленные версии Java с
update-java-alternatives --list, Чтобы активировать OpenJDK Java 1.7, запустите:sudo update-java-alternatives -s java-1.7.0-openjdk-amd64Вы можете заметить ошибку об
IcedTeaPlugin.soПлагин недоступен. Это не очень важно для разработчиков, работающих с JDK.Убедитесь, что Java работает:
java -versionкоторый должен вывести что-то похожее на:
Java-версия "1.7.0_161" Среда выполнения OpenJDK (IcedTea 2.6.12) (7u161-2.6.12-1) 64-битная серверная виртуальная машина OpenJDK (сборка 24.161-b01, смешанный режим)
заметки fontconfig
libfontconfig1 а также fontconfig-config необходимо обновить до 2.12 или более поздней версии Ubuntu 17.10 и более ранних версий. Пакеты обновлений от Debian не содержат настроек Ubuntu, поэтому некоторые приложения отображают ужасные шрифты с установленными этими пакетами; например, прокси-сервер отладки Charles. В зависимости от программ, которые вы используете, эта проблема может затрагивать или не затрагивать вас.
Вы можете скачать OpenJDK 7 от Azul, который может соответствовать вашим потребностям. Оба имеют DEB (для системы пакетов) и ZIP-дистрибутив. Я работал только с дистрибутивом ZIP.
Используйте контейнеры
Это универсально правильный ответ о том, как запустить <outdated> удаленное ПО включено <current> Ubuntu: контейнеры вашего приложения.
Например, используйте Docker и более старый базовый образ Ubuntu, в котором искомое программное обеспечение все еще доступно / поддерживается.
Это также работает наоборот; опробуйте программное обеспечение в более новом или даже другом дистрибутиве Linux на вашей текущей стабильной Ubuntu.
Пример для Java 7 с использованием Ubuntu 14.04
Установите Docker - бесплатная версия Docker CE в порядке. Смотрите, например, https://docs.docker.com/install/linux/docker-ce/ubuntu/ или используйте
docker.ioпакет в последних версиях Ubuntu.В пустой папке создайте файл
Dockerfile:FROM ubuntu:trusty RUN apt-get update \ && apt-get install -y \ openjdk-7-jdk \ && rm -rf /var/lib/apt/lists/* ENTRYPOINT ["/usr/bin/java"]Добавьте больше пакетов в эту команду, если вам это нужно.
В этой папке запустите:
docker build -t gertvdijk/java7 .Запустите команду внутри одноразового контейнера, используя этот образ Java 7:
Например
java -version:docker run --rm -it gertvdijk/java7 -versionВыход:
java version "1.7.0_181" OpenJDK Runtime Environment (IcedTea 2.6.14) (7u181-2.6.14-0ubuntu0.1) OpenJDK 64-Bit Server VM (build 24.181-b01, mixed mode)По желанию, создайте обертку для удобства.
Создать файл
/usr/local/bin/java7-in-dockerс содержанием:#!/usr/bin/env sh -e DOCKER_IMAGE=gertvdijk/java7 PWD="$(pwd)" exec docker run \ --rm -it \ -v ${PWD}:${PWD} \ -v "/etc/passwd:/etc/passwd:ro" \ -v "/etc/group:/etc/group:ro" \ --user "$(id -u):$(id -g)" \ --workdir "${PWD}" \ "${DOCKER_IMAGE}" \ $@Это сделает текущий рабочий каталог доступным внутри контейнера, а не всей вашей файловой системы, и будет выдавать себя за вашу локальную учетную запись пользователя в пространстве имен контейнера.
Отметьте его как исполняемый:
sudo chmod +x /usr/local/bin/java7-in-docker
Запустите Java 7 прозрачно, например так:
java7-in-docker -jar relative/path/to/some.jar
Альтернатива Oracle JDK:
Я хотел избежать усилий с репозиториями, потому что я переключаюсь между 7, 8 и 9, поэтому в итоге я выбрал Oracle JDK, а не OpenJDK. Скачано с официального сайта. Я не уверен в том, содержит ли последняя сборка 80 те же исправления, что и в сборке 161 OpenJDK. Но у меня она есть для разработки, так что в любом случае для меня это не имеет большого значения.
Тогда вам нужно установить $JAVA_HOME в среде, чтобы различные скрипты выбирали правильный JDK (например, Maven, JBoss и т. д.).
Для полноты, версия 7 JDK была написана EOL, даже публичная поддержка JDK 8 прекращается с сентября 2017 года и не получит публичных обновлений после сентября 2018 года.
Установите Java 7 на Ubuntu 16.04, Ubuntu 17.04
Рекомендуется установить Oracle Java, поскольку он имеет преимущество в производительности по сравнению с OpenJDK. По этой причине я хочу опубликовать альтернативу. Если вы хотите установить Oracle Java, выполните следующие команды в терминале, чтобы установить его из PPA.
Добавьте необходимые репозитории:
sudo add-apt-repository ppa:webupd8team/javaОбновить
aptкешируем и устанавливаем oracle-java7:sudo apt update sudo apt install java-common oracle-java7-installerВ процессе установки вам нужно будет принять Лицензионное соглашение Oracle. После установки нам нужно установить переменные среды Java, такие как JAVA_HOME
Исправьте переменные среды Java.
sudo apt install oracle-java7-set-default source /etc/profileУбедитесь, что Java работает:
java -versionкоторый должен вывести что-то похожее на:
java version "1.7.0_80" Java(TM) SE Runtime Environment (build 1.7.0_80-u80) Java HotSpot(TM) 64-Bit Server VM (build 25.131-u80, mixed mode)
Простой способ это:
Добавьте эти строки в: /etc/apt/sources.list:
deb http://security.ubuntu.com/ubuntu trusty main restricted universe multiverse
deb http://security.ubuntu.com/ubuntu trusty-security main restricted universe multiverse
Затем обновите apt и установите. Вам, вероятно, придется понизить рейтинг tzdata пакет.
После этого я бы порекомендовал закомментировать эти строки и снова выполнить обновление, чтобы предотвратить установку или обновление пакетов из этого хранилища (что может привести к неожиданному поведению).
Одна из проблем заключается в том, что вам нужно хранить эти пакеты, чтобы они не удалялись при обновлении вашей системы (особенно tzdata пакет).
ПРИМЕЧАНИЕ. Используйте этот метод в качестве крайней меры, предпочитайте любой другой, который позволит вам выполнить обновление без проблем.
Следующее работало для меня на Ubuntu 18.04
apt-get update && apt-get install default-jdk