Как мне установить openjdk 7 на Ubuntu 16.04 или выше?

120

Я хотел бы обновить свою основную систему до 16.04, но я работаю над проектами, которые требуют OpenJDK 7.

Видимо это не доступно из тривиального apt-get install openjdk-7-jdk. Только версии 8 и 9 перечислены в хранилище.

Может кто-нибудь указать мне инструкции о том, как его установить?

onairda
источник
Если кому-то интересно, почему вы все еще хотите JDK 7, я нахожусь в той же ситуации, потому что я думаю, что neo4j 2.1.6 не очень хорошо играет с Ubuntu 16.04, и единственное, что я вижу, что может быть не так - это JDK.
Шридхар Сарнобат
Вам явно требуется openjdk 7 в качестве системной JVM или вам просто нужна среда выполнения Java 7. Вы можете скачать последний из архивов Oracle.
Турбьерн Равн Андерсен

Ответы:

146

Предупреждение безопасности

Пакеты в упомянутом ниже 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 (с ограничениями)» как дополнительное хранилище пакетов, обновляет вашу информацию и устанавливает пакет с его зависимостями (из этого хранилища).

onairda
источник
13
Если вы сначала ошибочно установили openjdk-8 (как я), то после этого ответа вам нужно будет сделать sudo update-java-alternativesтак, чтобы вы могли сделать openjdk-7 по умолчанию.
Риан Сандерсон
4
К вашему сведению: это в настоящее время не работает для 16.10
оптический
19
-1 потому что этот PPA полностью устарел и игнорирует множество важных исправлений безопасности. Совершенно недопустимо, чтобы это было установлено, IMO.
gertvdijk
3
Также не работает на 17.04.
Колин Харрингтон
2
-1 также, как предложил PPA, является Ограниченным и не обновляется.
разделитель
65

Изменить 22 июля 2019 : этот ответ в настоящее время не работает. Указанные ниже пакеты JDK больше не доступны в Debian Experimental. В любом случае, они отставали от пакетов Ubuntu Trusty, которые содержали более свежие обновления безопасности. Пожалуйста, обратитесь к другим ответам, пока это не может быть решено (извините, нет ETA).


Не похоже, что сопровождающий 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должно совпадать с пабами, которые вы видите в предупреждающем сообщении.

  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. В зависимости от программ, которые вы используете, эта проблема может затрагивать или не затрагивать вас.

MDMower
источник
Интересный ответ, пожалуйста, обновите его, если вы найдете способ автоматически обновлять этот пакет.
J.Serra
Я только что попытался установить JDK 7 на Ubuntu 16.04, и это единственный способ, которым мне удалось заставить его работать. Спасибо!
ссылка
2
@ J.Serra Ответ исправлен методом автоматического обновления.
MDMower
отлично ответил особенно автоматический метод высоко ценится! спасибо, что уделили время, чтобы выяснить и записать!
steadfasterX
1
Автоматический метод в основном работал для меня, но он не является полностью постоянным. Мне пришлось добавить еще два пакета в /etc/apt/preferences.d/debian (в дополнение к libjpeg62-turbo): libfontconfig1 и fontconfig-config
comodoro
11

Вы можете скачать OpenJDK 7 от Azul, который может соответствовать вашим потребностям. Оба имеют DEB (для системы пакетов) и ZIP-дистрибутив. Я работал только с дистрибутивом ZIP.

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

Турбьерн Равн Андерсен
источник
Это то, что работало для меня с последней версией Ubuntu.
разваноне
0

Установите 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)
    
Teocci
источник
3
Установщик oracle больше не работает. Подключение к download.oracle.com (download.oracle.com) | 184.51.150.144 |: 80 ... подключено. HTTP-запрос отправлен, ожидание ответа ... 404 Not Found
автономия
Для Oracle JDK компания не предлагает публичную поддержку JDK 7 (они предлагают платную поддержку). Я думаю, что apt-getпытается получить установщик с несуществующей страницы. - Если вам нужен JDK 7, вы можете загрузить установщики с веб-сайта архива: oracle.com/technetwork/java/javase/downloads/…
Jaime
0

Альтернатива Oracle JDK:

Я хотел избежать усилий с репозиториями, потому что я переключаюсь между 7, 8 и 9, поэтому в итоге я выбрал Oracle JDK, а не OpenJDK. Скачано с официального сайта . Я не уверен в том, содержит ли последняя сборка 80 те же исправления, что и в сборке 161 OpenJDK. Но у меня она есть для разработки, так что в любом случае для меня это не имеет большого значения.

Затем вам нужно настроить $JAVA_HOMEокружение так, чтобы различные скрипты выбирали правильный JDK (например, Maven, JBoss и т. Д.).

Для полноты, версия 7 JDK была написана EOL, даже публичная поддержка JDK 8 прекращается с сентября 2017 года и не получит публичных обновлений после сентября 2018 года.

Ондра Жижка
источник
0

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

Это универсально правильный ответ о том, как запускать <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
gertvdijk
источник
14.04 больше не поддерживается, если вы не платите за расширенное обслуживание (до 2022 года).
Турбьерн Равн Андерсен
-2

Простой способ это:

Добавьте эти строки в /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пакета).

ПРИМЕЧАНИЕ . Используйте этот метод в качестве крайней меры, предпочитайте любой другой, который позволит вам выполнить обновление без проблем.

Лепе
источник