Java 8 auf Linux / openSUSE 13 installieren

Java 8 bringt interessante neue Sprachfeatures mit — beispielsweise Lambda-Expressions, eine komplett neue Date-Time-API oder auch die neue Möglichkeit, Interfaces mit statischen Methoden auszurüsten. Starke neue Werkzeuge und echte Weiterentwicklungen.

Einen kompletten fundierten Überblick zu allen Neuerungen in Java 8 findet ihr hier:
» Everything about Java 8

Probleme beim Java-Upgrade?

Die Installation von JDK 8 oder OpenJDK 1.8 funktioniert nicht immer ganz problemlos — insbesondere dann, wenn bereits ein oder mehrere JDK oder JRE vorhanden sind. Ein Blick ins Netz verriet dann auch: Ich stehe damit nicht allein.

Zunächst folgt nach der Installation eine erste Prüfung, direkt in einer frisch geöffneten Konsole:

$ java -version

Wird dabei etwa folgendes ausgegeben (abhängig vom installierten Java), ist alles in Ordnung:

java version "1.8.0_25"
Java(TM) SE Runtime Environment (build 1.8.0_25-b17)
Java HotSpot(TM) Server VM (build 25.25-b02, mixed mode)

Wenn aber das Kommando java -version gar nicht gefunden wird, ist entweder die Umgebungsvariable JAVA_HOME nicht gesetzt oder Java befindet sich nicht im exportierten PATH. Überprüfen lässt sich das mit einem $PATH sowie einem $JAVA_HOME in der Konsole.
Falls JAVA_HOME nicht auf das neue Java zeigt oder es nicht im PATH enthalten ist, könnte ein vorheriges bash in der Konsole oder eine Neuanmeldung am System helfen. Ändert auch das nichts, fehlen diese Pfade wahrscheinlich in der ~/.profile.

Die typischen Fehlermeldungen nach der Installation und dem Aufruf von java -version lauten allerdings:

java: error while loading shared libraries: libjli.so: 
cannot open shared object file: No such file or directory

oder

Error: could not find libjava.so
Error: Could not find Java SE Runtime Environment.

Diese Fehlermeldungen führen meist in die Irre. Zumindest wenn ein vorher vorhandenes Java fehlerfrei lief, liegt es wahrscheinlich nicht an fehlenden Dateien oder Zugriffsrechten. Ursache sind meist Versionskonflikte, hervorgerufen durch unpassende Java-Dateien oder Symlinks zur alten Java-Version in /usr/bin.

Hier nun eine kurze praktische Anleitung zur Umschiffung dieser Hindernisse:
Auf einem openSUSE 13.1. mit openJDK 1.7 wird beispielhaft ein zusätzliches JDK 8 installiert und aktiviert. Dieses JDK habe ich gewählt, weil ich genau das benötigte. Die hier vorgestellte manuelle Installation wird jedoch mit einem OpenJDK oder einer anderen Java-Version ebenso funktionieren.

4 einfache Schritte zu Java 8

    • JDK als passendes TAR downloaden, zB jdk-8u25-linux-i586.tar.gz von
      Java SE Development Kit 8 Downloads
    • TAR nach /usr/lib/jvm/jdk1.8.0_25 entpacken:
      $ cd ~/Downloads
      $ sudo tar -xzf jdk-8u25-linux-i586.tar.gz -C /usr/lib/jvm/ 
      

       

usr.lib.jvm

  • PATH und JAVA_HOME ergänzen, beispielsweise im Profil des eigenen HOME-Verzeichnisses:
    $ vim ~/.profile
    

    Hier sollten PATH, JAVA_HOME, JAVA_ROOT, JAVA_BINDIR und JRE_HOME eingetragen werde. Das kann etwa so aussehen:

    PATH="$PATH:/usr/lib/jvm/jdk1.8.0_25/bin:
           /usr/lib/jvm/jdk1.8.0_25/jre/bin"
    JAVA_HOME="/usr/lib/jvm/jdk1.8.0_25"
    JAVA_ROOT="/usr/lib/jvm/jdk1.8.0_25"
    JAVA_BINDIR="/usr/lib/jvm/jdk1.8.0_25/bin"
    JRE_HOME="/usr/lib/jvm/jdk1.8.0_25/jre"
    export PATH JRE_HOME JAVA_ROOT JAVA_BINDIR JAVA_HOME
    

    Wenn sich im Pfad noch Verweise auf ältere Java-Versionen befinden, sollten die natürlich entsprechend entfernt bzw. angepasst werden. Wirksam werden diese Änderungen beim nächsten Login oder einfach durch Eingabe von:

    $ source ~/.profile
    

    Anschließend können die neuen Einstellungen gleich direkt geprüft werden, mittels Eingabe von $JAVA_HOME, $JAVA_ROOT, $JAVA_BINDIR, $JRE_HOME und $PATH.

    Manche Howtos empfehlen, den Pfad in ~/.bashrc einzutragen. Das ist jedoch nicht empfehlenswert. Die .bashrc greift beim Öffnen interaktiver Shells. Profil- oder systemrelevante Pfadangaben gehören dort nicht hin. Zur Vermeidung von Konflikten empfiehlt sich also auch ein Blick in die ~/.bashrc, um darin enthaltene Pfadangaben möglichst zu entfernen.

  • Nun werden noch die Java-Referenzen in /usr/bin aktualisiert. Wenn hier noch eine ältere Java-Version referenziert wird, ist das zum einen unrichtig und kann außerdem zu diesem Fehler führen:
    java: error while loading shared libraries: libjli.so: 
    cannot open shared object file: No such file or directory
    

    Zunächst werden die alten Dateien oder Referenzen gelöscht (sofern vorhanden):

    $ sudo rm /usr/bin/java
    $ sudo rm /usr/bin/jar
    $ sudo rm /usr/bin/javac
    $ sudo rm /usr/bin/javaws
    

    Es werden neue Symlinks angelegt, die auf die neue Java-Version verweisen:

    $ sudo ln -s /usr/lib/jvm/jdk1.8.0_25/bin/java /usr/bin/java
    $ sudo ln -s /usr/lib/jvm/jdk1.8.0_25/bin/jar /usr/bin/jar
    $ sudo ln -s /usr/lib/jvm/jdk1.8.0_25/bin/javac /usr/bin/javac
    $ sudo ln -s /usr/lib/jvm/jdk1.8.0_25/bin/javaws /usr/bin/javaws
    

    Das war schon alles. Der abschließende Test mit

    $ java -version
    

    sollte nun ergeben:

    java version "1.8.0_25"
    Java(TM) SE Runtime Environment (build 1.8.0_25-b17)
    Java HotSpot(TM) Server VM (build 25.25-b02, mixed mode)
    

Hinweise, Ergänzungen, Korrekturen dazu gern willkommen!

Hinterlasse eine Antwort

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind markiert *