GNU/Linux >> LINUX-Kenntnisse >  >> Linux

Der Befehl „java“ führt die installierte JVM nicht aus

Das Problem

Ein JDK/JRE von Oracle wurde gemäß den Installationsanweisungen auf einer Linux-Maschine installiert. Der Befehl „java“ führt die installierte JVM nicht aus. Java-Anwendungen können möglicherweise nicht ausgeführt werden, wenn eine unerwartete Java-Laufzeitumgebung gefunden wird.

Beispiel von einem Red Hat-Server:

$ java -version
java version "1.6.0_17"
OpenJDK Runtime Environment (IcedTea6 1.7.4) (rhel-1.21.b17.el6-x86_64)
OpenJDK 64-Bit Server VM (build 14.0-b16, mixed mode)

Haftungsausschluss :Die in diesem Artikel verwendeten Verzeichnisse und Pfade stellen fiktive Beispielnamen dar, die ein Beispiel darstellen. Jegliche Ähnlichkeit mit tatsächlichem Code ist rein zufällig und nicht anderweitig beabsichtigt.

Die Lösung

Ein neues JDK/JRE von Oracle wurde gemäß der Installationsanleitung installiert. Beispiel von einem Red Hat-Server:

# rpm -ivh jdk-7u6-linux-x64.rpm

Der Befehl „java“ ist normalerweise ein symbolischer Link in /usr/bin, der (direkt oder indirekt) auf die eigentliche ausführbare Java-Datei zeigt. Normalerweise ist /usr/bin einer der ersten Einträge in der Umgebungsvariable PATH und daher ist /usr/bin/java normalerweise derjenige, der zuerst gefunden wird, wenn Java gestartet wird.

Nehmen wir für die folgenden möglichen Lösungen an, dass Sie das JDK in /usr/java/jdk1.7.0_06/ installiert haben.

Lösung 1:PATH ändern

Ändern Sie die Umgebungsvariable PATH so, dass das neue Oracle JRE/JDK gefunden werden kann, bevor andere JREs gefunden werden können.

Zum Beispiel:

$ export PATH=/usr/java/jdk1.7.0_06/bin:$PATH
$ java -version
java version "1.7.0_06"
Java(TM) SE Runtime Environment (build 1.7.0_06-b24)
Java HotSpot(TM) 64-Bit Server VM (build 23.2-b09, mixed mode)

Lösung 2:Verwenden Sie einen absoluten Pfad

Verwenden Sie den vollständigen absoluten Pfad zum neu installierten Oracle JRE/JDK, um Java-Anwendungen auszuführen.

Zum Beispiel:

$ /usr/java/jdk1.7.0_06/bin/java -version
java version "1.7.0_06"
Java(TM) SE Runtime Environment (build 1.7.0_06-b24)
Java HotSpot(TM) 64-Bit Server VM (build 23.2-b09, mixed mode)

Lösung 3:Update-Alternativen verwenden

Verwenden Sie den Befehl namens update-alternatives um Linux mitzuteilen, wo das gerade installierte Oracle JRE/JDK zu finden ist.

Hinweis :Das manuelle Korrigieren von symbolischen Links wie /usr/bin/java oder /etc/alternatives/java kann dazu führen, dass der Befehl update-alternatives falsche Werte anzeigt oder sogar nicht gestartet werden kann. Daher wird empfohlen, den Befehl update-alternatives zu verwenden, um die gewünschten Symlinks zu installieren und zu konfigurieren, anstatt die Symlinks manuell zu ändern.

Verwenden Sie „su“ auf RedHat, verwenden Sie „sudo“ auf Ubuntu:

$ su -
# update-alternatives --install "/usr/bin/java" "java" "/usr/java/jdk1.7.0_06/bin/java" 1
# update-alternatives --config java

There are 3 programs which provide 'java'.

  Selection    Command
-----------------------------------------------
   1           /usr/lib/jvm/jre-1.5.0-gcj/bin/java
*+ 2           /usr/lib/jvm/jre-1.6.0-openjdk.x86_64/bin/java
   3           /usr/java/jdk1.7.0_06/bin/java

Enter to keep the current selection[+], or type selection number: 3
# exit
$ java -version
java version "1.7.0_06"
Java(TM) SE Runtime Environment (build 1.7.0_06-b24)
Java HotSpot(TM) 64-Bit Server VM (build 23.2-b09, mixed mode) 

Weitere Informationen finden Sie auf der Manpage von update-alternatives.

$ man update-alternatives


Linux
  1. Wie führe ich einen Befehl als Systemadministrator (root) aus?

  2. Der Unterschied zwischen einem eingebauten Befehl und einem, der es nicht ist?

  3. Einen Befehl ausführen, der von einem Alias ​​verdeckt wird?

  4. Die Nützlichkeit des :Command In Shell Scripting, da es explizit nichts tut?

  5. Was bedeutet das Eingabegerät ist kein TTY genau in der Docker-Run-Ausgabe?

Hinterlässt der Befehl Shuf File> File eine leere Datei, aber ähnliche Befehle nicht?

Gibt es den umgekehrten Schnittbefehl?

Befehl blockieren/verhindern, wenn er innerhalb der letzten X Sekunden/Minuten ausgeführt wurde?

Wie funktioniert der Tee-Befehl?

Linux-Gerät zeigt nach einer Größenänderung nicht den korrekten Speicherplatz an

So legen Sie den Standardbenutzer für eine WSL-Distribution fest, die manuell mit wsl --import installiert wurde