Wie installiere ich openjdk 7 unter Ubuntu 16.04 oder höher?


120

Ich möchte mein Hauptsystem auf 16.04 upgraden, arbeite aber an Projekten, die OpenJDK 7 erfordern.

Anscheinend ist es nicht aus einer Kleinigkeit erhältlich apt-get install openjdk-7-jdk. Im Repository sind nur die Versionen 8 und 9 aufgeführt.

Kann mir jemand Anweisungen zur Installation geben?


Für den Fall, dass sich jemand wundert, warum Sie immer noch JDK 7 wollen, bin ich in der gleichen Situation, weil ich denke, dass neo4j 2.1.6 nicht gut mit Ubuntu 16.04 läuft und das einzige, was ich sehen kann, was falsch sein könnte, ist das JDK.
Sridhar Sarnobat

Benötigen Sie explizit openjdk 7 als System-JVM oder benötigen Sie nur eine Java 7-Laufzeit. Sie können letzteres aus den Oracle-Archiven herunterladen.
Thorbjørn Ravn Andersen

Antworten:


146

Sicherheitswarnung

Pakete in der unten genannten PPA werden nicht mit Sicherheitspatches für Java aktualisiert. Nicht in der Produktion verwenden. sehen Sie stattdessen alternative Antworten.

Zum Zeitpunkt des Schreibens wurde der letzte Upload für OpenJDK 7 am 22.04.2016 mit der Version 7u95 durchgeführt und ist weiterhin als 'latest' verfügbar, wobei Ubuntu 14.04 auf 7u181 aktualisiert wurde .


AKTUALISIERUNG: DIES IST DIE AM MEISTEN ABGEGEBENE ANTWORT, DIE IHRER MÖGLICHERWEISE 2018 NICHT GEWÜNSCHT WURDE, DA SICHERHEITS-UPDATES DURCH DIESES PPA NICHT VORHANDEN SIND.

Ich fand die folgenden Anweisungen, die für mich arbeiteten:

sudo add-apt-repository ppa:openjdk-r/ppa  
sudo apt-get update   
sudo apt-get install openjdk-7-jdk  

Dies definiert die "PPA für OpenJDK-Uploads (eingeschränkt)" als zusätzliches Paket-Repository, aktualisiert Ihre Informationen und installiert das Paket mit seinen Abhängigkeiten (von diesem Repository).


13
Wenn Sie aus Versehen zuerst openjdk-8 installiert haben (wie ich), müssen sudo update-java-alternativesSie nach dem Befolgen dieser Antwort a ausführen, damit Sie openjdk-7 als Standard festlegen können.
Rian Sanderson


19
-1, da dieser PPA völlig veraltet ist und viele wichtige Sicherheitspatches ignoriert. Völlig inakzeptabel, dies installiert zu haben, imo.
Gertvdijk

3
Funktioniert auch nicht für 17.04.
Colin Harrington

2
-1, auch wenn die vorgeschlagene PPA eingeschränkt ist und nicht auf dem neuesten Stand gehalten wird.
Trennzeichen

65

Edit 22-Jul-2019 : Diese Antwort funktioniert derzeit nicht. Die unten genannten JDK-Pakete sind bei Debian Experimental nicht mehr verfügbar. In jedem Fall blieben sie hinter den Paketen von Ubuntu Trusty zurück, die neuere Sicherheitsupdates enthielten. Bitte lesen Sie die anderen Antworten, bis dies behoben werden kann (leider keine ETA).


Es sieht nicht so aus, als würde der Betreuer von openjdk-r / ppa das openjdk-7-Paket über die Version 7u95-2.6.4-3 hinaus aktualisieren. Die Beschreibung des Pakets "Aus debian experimental in Primary Archive für Debian GNU / Linux kopiert" gibt uns jedoch einen Hinweis darauf, wie wir damit umgehen sollen.

Option 1: Manuelle Installation

  1. Laden Sie die für Ihre Architektur bestimmten Pakete herunter:
    (Für die meisten Benutzer bedeutet dies amd64, wenn 64-Bit oder i386, wenn 32-Bit-Ubuntu installiert ist.)

  2. (Versuch) die Pakete zu installieren mit dpkg:

    Ubuntu 17.10 und früher:

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

    Ubuntu 18.04 und höher:

    sudo dpkg -i openjdk-7-* libjpeg62-turbo*
  3. Überprüfen Sie die Ausgabe von dpkg. Wenn Abhängigkeitsprobleme aufgetreten sind (was wahrscheinlich ist), wird Folgendes angezeigt (wobei Ihre Architektur amd64 ersetzt):

    Bei der Verarbeitung sind Fehler aufgetreten:
    openjdk-7-jre: amd64
    openjdk-7-jre-headless: amd64
    openjdk-7-jdk: amd64

    Wenn keine Abhängigkeitsprobleme aufgetreten sind, fahren Sie mit Schritt 4 fort. Andernfalls wird Folgendes ausgeführt, wenn Sie einige Abhängigkeitsprobleme lösen müssen:

    sudo apt install -f

    Beachten Sie, dass keine erneute Ausführung erforderlich ist, dpkgnachdem aptAbhängigkeiten aufgelöst wurden. Die Installation der openjdk-Pakete wird automatisch beendet.

  4. Aktualisieren Sie Java-Alternativen. Sie können alle installierten Java-Versionen mit anzeigen update-java-alternatives --list. Führen Sie zum Aktivieren von OpenJDK Java 1.7 Folgendes aus:

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

    Möglicherweise bemerken Sie einen Fehler, dass das IcedTeaPlugin.soPlugin nicht verfügbar ist. Dies ist für Entwickler, die mit dem JDK arbeiten, kein wirkliches Problem.

  5. Überprüfen Sie, ob Java funktioniert:

    java -version

    was sollte etwas ähnliches ausgeben:

    Java-Version "1.7.0_161"
    OpenJDK-Laufzeitumgebung (IcedTea 2.6.12) (7u161-2.6.12-1)
    OpenJDK 64-Bit Server VM (Build 24.161-b01, gemischter Modus)

Option 2: Automatische Installation (einschließlich Updates mit apt)

Das Fixieren kann verwendet werden, um openjdk-7-jdk und seine Abhängigkeiten von Debian-Repositorys zu installieren und zu aktualisieren.

  1. Erstellen Sie eine Pinning-Datei, die aptnur Pakete berücksichtigt, die uns interessieren (wir möchten mit Sicherheit nicht, dass unsere gesamte Ubuntu-Distribution mit experimentellen Debian-Paketen "aktualisiert" wird).

    Erstellen Sie eine Datei /etc/apt/preferences.d/debianmit dem folgenden Inhalt. Sie werden Superuser - Rechte benötigen, so dass man von verwenden sudo vim, sudo nano, gksudo geditusw.

    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
    

    Fügen Sie für Ubuntu 17.10 und früher außerdem Folgendes hinzu (siehe Hinweis unten):

    Package: libfontconfig1
    Pin: release o=Debian,n=sid
    Pin-Priority: 500
    
    Package: fontconfig-config
    Pin: release o=Debian,n=sid
    Pin-Priority: 500
    
  2. Installieren Sie den Debian-Schlüsselring:

    sudo apt install debian-archive-keyring

    Hinweis: Dies ist zwar die einfachste Methode, um den Debian-Schlüsselring hinzuzufügen, sie ist jedoch möglicherweise nicht auf dem neuesten Stand. Überprüfen Sie die Ausgabe wie folgt, wenn Sie apt updatein Schritt 4 ausführen:

    W: GPG-Fehler: http://cdn-fastly.deb.debian.org/debian experimental InRelease: Die folgenden Signaturen konnten nicht überprüft werden, da der öffentliche Schlüssel nicht verfügbar ist: NO_PUBKEY 8B48AD6246925553 NO_PUBKEY 7638D0442B90D010
    E: Das Repository 'http://httpredir.debian.org/debian experimental InRelease' ist nicht signiert.

    Wenn Sie diesen Fehler sehen, fügen Sie die erforderlichen Schlüssel manuell hinzu mit:

    sudo apt-key adv --keyserver keyserver.ubuntu.com --recv-keys 8B48AD6246925553
    sudo apt-key adv --keyserver keyserver.ubuntu.com --recv-keys 7638D0442B90D010
    

    Wo 8B48AD6246925553und 7638D0442B90D010sollten die Pubkeys übereinstimmen, die in der Warnmeldung angezeigt werden?

  3. Fügen Sie die erforderlichen Repositorys hinzu:

    sudo add-apt-repository 'deb http://httpredir.debian.org/debian experimental main'
    sudo add-apt-repository 'deb http://httpredir.debian.org/debian sid main'
    

    Warum nicht ein stabiles Debian-Repository verwenden? Sie werden mit Debian Stable auf unbefriedigende Abhängigkeiten stoßen. Die experimentellen Repositorys (für openjdk-7) und sid-Repositorys (für libjpeg62-turbo, libfontconfig1 und fontconfig-config) sind in Abhängigkeitsversionen weniger anfällig.

  4. Aktualisieren aptCache (erwarten , dass dies eine Weile dauern , da Debians Paketlisten groß sind):

    sudo apt update
  5. Installieren Sie openjdk-7-jdk:

    sudo apt install openjdk-7-jdk
  6. Aktualisieren Sie Java-Alternativen. Sie können alle installierten Java-Versionen mit anzeigen update-java-alternatives --list. Führen Sie zum Aktivieren von OpenJDK Java 1.7 Folgendes aus:

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

    Möglicherweise bemerken Sie einen Fehler, dass das IcedTeaPlugin.soPlugin nicht verfügbar ist. Dies ist für Entwickler, die mit dem JDK arbeiten, kein wirkliches Problem.

  7. Überprüfen Sie, ob Java funktioniert:

    java -version

    was sollte etwas ähnliches ausgeben:

    Java-Version "1.7.0_161"
    OpenJDK-Laufzeitumgebung (IcedTea 2.6.12) (7u161-2.6.12-1)
    OpenJDK 64-Bit Server VM (Build 24.161-b01, gemischter Modus)

fontconfig Notizen

libfontconfig1und fontconfig-configmuss unter Ubuntu 17.10 und früher auf 2.12 oder höher aktualisiert werden. Die Update-Pakete von Debian enthalten keine Ubuntu-Anpassungen, so dass einige Anwendungen hässliche Schriftarten anzeigen, wenn diese Pakete installiert sind. zB Charles Web Debugging Proxy. Abhängig von den von Ihnen verwendeten Programmen sind Sie möglicherweise von diesem Problem betroffen oder nicht.


Interessante Antwort, bitte aktualisieren Sie es, wenn Sie eine Möglichkeit finden, dieses Paket automatisch zu aktualisieren.
J.Serra

Ich habe gerade versucht, jdk 7 unter Ubuntu 16.04 zu installieren. Nur so konnte ich es zum Laufen bringen. Danke!
Link

2
@ J.Serra Antwort mit automatischer Update-Methode überarbeitet.
MDMower

Perfekt beantwortet, besonders die automatische Methode wird sehr geschätzt! Danke, dass du dir die Zeit genommen hast, es herauszufinden und aufzuschreiben!
SteadfasterX

1
Die automatische Methode hat meistens bei mir funktioniert, ist aber auch nicht ganz permanent. Ich musste /etc/apt/preferences.d/debian (zusätzlich zu libjpeg62-turbo) um zwei weitere Pakete erweitern: libfontconfig1 und fontconfig-config
comodoro


0

Installieren Sie Java 7 unter Ubuntu 16.04, Ubuntu 17.04

Es wird empfohlen, Oracle Java zu installieren , da es einen Leistungsvorteil gegenüber OpenJDK hat . Aus diesem Grund möchte ich eine Alternative posten. Wenn Sie Oracle Java installieren möchten, führen Sie die folgenden Befehle im Terminal aus, um es von PPA aus zu installieren.

  1. Fügen Sie die erforderlichen Repositorys hinzu:

    sudo add-apt-repository ppa:webupd8team/java
  2. Aktualisiere den aptCache und installiere oracle-java7 :

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

    Während des Installationsvorgangs müssen Sie die Oracle-Lizenzvereinbarung akzeptieren . Nach der Installation müssen Java-Umgebungsvariablen wie JAVA_HOME festgelegt werden

  3. Korrigieren Sie Java-Umgebungsvariablen.

    sudo apt install oracle-java7-set-default
    source /etc/profile
  4. Überprüfen Sie, ob Java funktioniert:

    java -version

    was sollte etwas ähnliches ausgeben:

    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)

3
Das Oracle-Installationsprogramm funktioniert nicht mehr Verbindung mit download.oracle.com (download.oracle.com) | 184.51.150.144 |: 80 ... hergestellt. HTTP-Anfrage gesendet, wartet auf Antwort ... 404 Not Found
Autonomie

Für Oracle JDK bietet das Unternehmen keinen öffentlichen Support für JDK 7 an (sie bieten kostenpflichtigen Support an). Ich denke, dass das apt-getversucht, das Installationsprogramm von einer nicht vorhandenen Seite zu erhalten. - Wenn Sie JDK 7 benötigen, können Sie Installationsprogramme von der Archiv-Website herunterladen: oracle.com/technetwork/java/javase/downloads/…
Jaime,

0

Oracle JDK-Alternative:

Ich wollte den Aufwand mit Repositorys vermeiden, da ich zwischen 7, 8 und 9 wechsle, sodass ich Oracle JDK anstelle von OpenJDK verwendet habe. Von der offiziellen Website heruntergeladen . Ich bin mir nicht sicher, ob der neueste Build 80 dieselben Fixes enthält wie OpenJDKs Build 161. Aber ich habe es für die Entwicklung, sodass mir das sowieso nicht viel bedeutet.

Dann muss man $JAVA_HOMEin der Umgebung einstellen , dass verschiedene Skripte das richtige JDK aufnehmen (zB Maven, JBoss etc.).

Der Vollständigkeit halber wurde JDK Version 7 EOL'ed, selbst der öffentliche Support für JDK 8 wird seit September 2017 eingestellt und wird nach September 2018 nicht mehr öffentlich aktualisiert.


0

Behälter verwenden

Dies ist eine allgemein gültige Antwort darauf, wie <outdated>entfernte Software unter <current>Ubuntu ausgeführt wird: Containerisieren Sie Ihre Anwendung .

Verwenden Sie beispielsweise Docker und ein älteres Ubuntu-Basis-Image, in dem die gesuchte Software noch verfügbar ist.

Es funktioniert auch umgekehrt; Probieren Sie die Software auf einer neueren oder sogar einer anderen Linux-Distribution auf Ihrem derzeit stabilen Ubuntu aus.

Beispiel für Java 7 mit Ubuntu 14.04

  1. Docker installieren - Die kostenlose Docker CE-Version ist in Ordnung. Siehe zum Beispiel https://docs.docker.com/install/linux/docker-ce/ubuntu/ oder verwenden Sie das docker.ioPaket in den neuesten Ubuntu-Versionen, die ausgeliefert wurden.

  2. Erstellen Sie in einem leeren Ordner eine Datei 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"]

    Fügen Sie diesem Befehl weitere Pakete hinzu, wenn Sie dies benötigen.

  3. Führen Sie in diesem Ordner Folgendes aus:

    docker build -t gertvdijk/java7 .
  4. Führen Sie einen Befehl in einem Einwegcontainer mit diesem Java 7-Image aus:

    ZB java -version:

    docker run --rm -it gertvdijk/java7 -version

    Ausgabe:

    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. Erstellen Sie optional einen Wrapper.

    • Erstellen Sie eine Datei /usr/local/bin/java7-in-dockermit Inhalten:

      #!/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}" \
        $@

      Dadurch wird das aktuelle Arbeitsverzeichnis im Container verfügbar, nicht im gesamten Dateisystem, und es wird die Identität Ihres lokalen Benutzerkontos im Containernamensraum angenommen.

    • Markiere es als ausführbar:

      sudo chmod +x /usr/local/bin/java7-in-docker
  6. Führen Sie Java 7 transparent wie folgt aus:

    java7-in-docker -jar relative/path/to/some.jar

14.04 wird nicht mehr gewartet, es sei denn, Sie zahlen für eine verlängerte Wartung (bis 2022).
Thorbjørn Ravn Andersen

-2

Ein einfacher Weg ist:

Fügen Sie diese Zeilen an: /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

Dann update apt und installiere. Sie müssen wahrscheinlich ein Downgrade des tzdataPakets durchführen.

Danach würde ich empfehlen , diese Zeilen zu kommentieren und das Update erneut durchzuführen , um zu verhindern, dass Pakete aus diesem Repository installiert oder aktualisiert werden (was zu unerwartetem Verhalten führen kann).

Ein Problem ist, dass Sie diese Pakete aufbewahren müssen, damit sie nicht entfernt werden, wenn Sie Ihr System aktualisieren (speziell das tzdataPaket).

HINWEIS : Verwenden Sie diese Methode als letzten Ausweg. Bevorzugen Sie eine andere Methode, mit der Sie problemlos aktualisieren können.

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.