Как мне установить 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: ручная установка

  1. Загрузите пакеты, предназначенные для вашей архитектуры:
    (для большинства пользователей это означает amd64, если установлена ​​64-битная версия, или i386, если установлена ​​32-битная версия Ubuntu)

  2. (Попытка) установить пакеты с помощью dpkg:

    Ubuntu 17.10 и более ранние версии:

    sudo dpkg -i openjdk-7-* libjpeg62-turbo* libfontconfig1* fontconfig-config*
    

    Ubuntu 18.04 и позже:

    sudo dpkg -i openjdk-7-* libjpeg62-turbo*
    
  3. Проверьте вывод из dpkg, Если были проблемы с зависимостями - что вполне вероятно - вы увидите следующее (вместо вашей архитектуры вместо amd64):

    При обработке возникли ошибки:
    OpenJDK-7-JRE:amd64
    OpenJDK-7-JRE-обезглавленное:amd64
    OpenJDK-7-JDK:amd64

    Если проблем с зависимостями не было, отлично, все готово, перейдите к #4. В противном случае, если вам нужно решить некоторые проблемы с зависимостями, это обрабатывается с помощью:

    sudo apt install -f
    

    Обратите внимание, нет необходимости повторного запуска dpkg после сдачи apt разрешить зависимости. Он автоматически завершит установку пакетов openjdk.

  4. Обновите альтернативы Java. Вы можете просмотреть все установленные версии Java с update-java-alternatives --list, Чтобы активировать OpenJDK Java 1.7, запустите:

    sudo update-java-alternatives -s java-1.7.0-openjdk-amd64
    

    Вы можете заметить ошибку об IcedTeaPlugin.so Плагин недоступен. Это не очень важно для разработчиков, работающих с JDK.

  5. Убедитесь, что 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.

  1. Создать файл закрепления, который говорит 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
    
  2. Установите набор ключей 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 вы видите в предупреждающем сообщении.

  3. Добавьте необходимые репозитории:

    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) репозитории более снисходительны с зависимостями версий.

  4. Обновить apt кеш (ожидайте, что это займет некоторое время, так как списки пакетов Debian большие):

    sudo apt update
    
  5. Установите openjdk-7-jdk:

    sudo apt install openjdk-7-jdk
    
  6. Обновите альтернативы Java. Вы можете просмотреть все установленные версии Java с update-java-alternatives --list, Чтобы активировать OpenJDK Java 1.7, запустите:

    sudo update-java-alternatives -s java-1.7.0-openjdk-amd64
    

    Вы можете заметить ошибку об IcedTeaPlugin.so Плагин недоступен. Это не очень важно для разработчиков, работающих с JDK.

  7. Убедитесь, что 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.

http://www.azul.com/downloads/zulu/zulu-linux/

Используйте контейнеры

Это универсально правильный ответ о том, как запустить <outdated> удаленное ПО включено <current> Ubuntu: контейнеры вашего приложения.

Например, используйте Docker и более старый базовый образ Ubuntu, в котором искомое программное обеспечение все еще доступно / поддерживается.

Это также работает наоборот; опробуйте программное обеспечение в более новом или даже другом дистрибутиве Linux на вашей текущей стабильной Ubuntu.

Пример для Java 7 с использованием Ubuntu 14.04

  1. Установите Docker - бесплатная версия Docker CE в порядке. Смотрите, например, https://docs.docker.com/install/linux/docker-ce/ubuntu/ или используйте docker.io пакет в последних версиях Ubuntu.

  2. В пустой папке создайте файл 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"]
    

    Добавьте больше пакетов в эту команду, если вам это нужно.

  3. В этой папке запустите:

    docker build -t gertvdijk/java7 .
    
  4. Запустите команду внутри одноразового контейнера, используя этот образ 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)
    
  5. По желанию, создайте обертку для удобства.

    • Создать файл /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
      
  6. Запустите 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.

  1. Добавьте необходимые репозитории:

    sudo add-apt-repository ppa:webupd8team/java
    
  2. Обновить apt кешируем и устанавливаем oracle-java7:

    sudo apt update
    sudo apt install java-common oracle-java7-installer
    

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

  3. Исправьте переменные среды Java.

    sudo apt install oracle-java7-set-default
    source /etc/profile
    
  4. Убедитесь, что 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
Другие вопросы по тегам