Warum gibt Java -Version eine andere Version zurück als die in JAVA_HOME definierte?

Warum gibt Java -Version eine andere Version zurück als die in JAVA_HOME definierte?

Ich versuche, JAVA_HOMEdas Ubuntu-Betriebssystem einzurichten. Ich habe es kopiert jdk 1.7und /usr/lib/jvmin JAVA_HOMEder /etc/profileDatei eingerichtet.

Der Inhalt des /usr/lib/jvmOrdners ist wie folgt:

shekhar@ubuntu:~$ ls /usr/lib/jvm/
default-java        java-1.6.0-openjdk       java-6-openjdk         java-6-openjdk-i386  jdk1.7.0_01
java-1.5.0-gcj-4.6  java-1.6.0-openjdk-i386  java-6-openjdk-common  java-7-openjdk-i386

und die letzten Zeilen der /etc/profileDatei lauten wie folgt:

export JAVA_HOME=/usr/lib/jvm/jdk1.7.0_01
export PATH=$PATH:$JAVA_HOME/bin

Wenn ich nach Abschluss all dessen den Befehl ausführe, java -versionerhalte ich die folgende Ausgabe:

shekhar@ubuntu:~$ java -version
java version "1.6.0_24"
OpenJDK Runtime Environment (IcedTea6 1.11.4) (6b24-1.11.4-1ubuntu0.12.04.1)
OpenJDK Server VM (build 20.0-b12, mixed mode)

und wenn ich ls -lahden Befehl ausführe, erhalte ich folgende Ausgabe:

shekhar@ubuntu:~$ ls -lah /usr/bin/java
lrwxrwxrwx 1 root root 22 Sep 29 09:58 /usr/bin/java -> /etc/alternatives/java
shekhar@ubuntu:~$ ls -lah /etc/alternatives/java
lrwxrwxrwx 1 root root 45 Sep 29 09:58 /etc/alternatives/java -> /usr/lib/jvm/java-6-openjdk-i386/jre/bin/java

Kann mir bitte jemand sagen, was ich übersehe? Warum verweist Ubuntu immer noch auf Open JDK und nicht auf mein JDK 7?

PS: Ich habe gesehendieses ähnlicheFrage und ihre Antworten, aber diese Frage bezieht sich auf das Windows-Betriebssystem und nicht auf Ubuntu, deshalb poste ich diese ähnliche Frage für Ubuntu erneut.

Antwort1

Sie haben die Umgebungsvariable JAVA_HOME festgelegt und diese dann verwendet, um Ihren PATH festzulegen. Der von Ihnen festgelegte Pfad besteht jedoch auch aus dem vorhandenen Pfad. Im Wesentlichen haben Sie Ihrem vorhandenen Pfad einfach etwas anderes hinzugefügt.

Der Pfad zu Ihrem JDK1.7 wird am Ende des Pfads hinzugefügt. Wenn Sie „java --version“ in die Befehlszeile eingeben, durchsucht das System den Pfad von Anfang bis Ende, bis es einen Pfad findet, der den Befehl „java“ enthält. Was Sie also sehen, ist die Versionsausgabe einer Ihrer anderen Java-Versionen.

Normalerweise schaue ich mir unter Ubuntu meinen Pfad an:

echo $PATH

und suchen Sie dann am Anfang nach möglichen JVM-Pfaden. An diesem Punkt haben Sie mehrere Möglichkeiten, das Problem zu beheben:

  1. Erstellen Sie einen symbolischen Link, der das System auf Ihren neuen Java-Pfad verweist.

  2. Entfernen Sie die alte Java-Version und entfernen Sie sie aus Ihrem Pfad.

Ich würde Option 2 wählen. Es ist weniger verwirrend, einfach das loszuwerden, was man nicht braucht.

Antwort2

Ich hatte das gleiche Problem und die Antwort ist im PFAD versteckt:

Das Ausführen von „$ env | grep java“ zeigt:

PATH=/u01/app/oracle/product/11.2.0/xe/bin:/home/rivaldo/bin:/usr/lib/lightdm/lightdm:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/java/jdk1.6.0_14/bin:/home/rivaldo/bin/eclipse.JEE.Kepler.64
JAVA_HOME=/usr/local/java/jdk1.6.0_14
JDK_HOME=/usr/local/java/jdk1.6.0_14

aber beim Ausführen von „java -version“ wird immer noch Folgendes angezeigt:

java version "1.7.0_40"
Java(TM) SE Runtime Environment (build 1.7.0_40-b43)
Java HotSpot(TM) 64-Bit Server VM (build 24.0-b56, mixed mode)

Ich habe herausgefunden, dass in meinem PATH „/usr/bin“ vor „/java/jdk1.6.0_14/bin“ steht und mit „ll /usr/bin | grep java“ erhalte ich Folgendes:

lrwxrwxrwx 1 root root 39 Jul 31 08:29 /etc/alternatives/java -> /usr/lib/jvm/java-7-oracle/jre/bin/java*

Ich habe den symbolischen Link durch den richtigen ersetzt und das Problem war gelöst. Sie können auch die Reihenfolge im Pfad ändern:

aus

export PATH=$PATH:$JAVA_HOME/bin

Zu

export PATH=$JAVA_HOME/bin:$PATH

Antwort3

Ich persönlich hatte bei einer Neuinstallation von Ubuntu 12.04 genau das gleiche Problem. Ich musste lediglich ein bestimmtes Paket mit dem folgenden Befehl deinstallieren:

sudo apt-get remove openjdk-6-jre-headless

Dadurch wurde der Link in der Datei /etc/alternatives entfernt und auf die installierte Java-Version 1.7 aktualisiert.

Ich wollte das nur mitteilen, da dies Punkt 2 in der Antwort von jmort253 vervollständigt.

verwandte Informationen