webentwicklung-frage-antwort-db.com.de

JAVA_HOME und PATH sind gesetzt, aber die Java-Version zeigt immer noch die alte

Ich verwende Linux Mint Cinnamon 14. Ich habe die Umgebungsvariablen $Java_HOME und $PATH in ~/.profile wie folgt festgelegt:

export Java_HOME=/home/aqeel/development/jdk/jdk1.6.0_35
export PATH=/home/aqeel/development/jdk/jdk1.6.0_35/bin:$PATH

Ich habe dann source ~/.profile gemacht, um die richtigen Änderungen vorzunehmen.

Wenn ich den Befehl Java -version zur Überprüfung der aktiven Java-Version ausführe, wird die Java-Standardversion (bereits installierte open-jdk) angezeigt. Wie kann ich den Standard-Open-Jdk mit dem von mir heruntergeladenen überschreiben?

UPDATE:

which Java sagt/usr/bin/Java

$Java_HOME/bin/Java -version sagt 'Erlaubnis verweigert'

Sudo $Java_HOME/bin/Java -version (fragt nach dem Passwort, dann) sagt, dass der Befehl nicht gefunden wurde

cd $Java_HOME/bin und ls zeigen jedoch an, dass es sich um ein richtiges Verzeichnis handelt.

40
user517491

Es sieht zwar so aus, als ob Ihr Setup korrekt ist, es gibt jedoch ein paar Dinge, die Sie überprüfen sollten:

  1. Die Ausgabe von env - speziell PATH.
  2. command -v Java sagt dir was?
  3. Gibt es eine Java-ausführbare Datei in $Java_HOME\bin und ist das Ausführungsbit gesetzt? Wenn nicht chmod a+x Java es.

Ich vertraue darauf, dass Sie source 'd Ihren .profile haben, nachdem Sie Java_HOME und PATH hinzugefügt/geändert haben.

Sie können sich auch bei der zukünftigen Wartung Ihrer JDK-Installation helfen, indem Sie stattdessen Folgendes schreiben:

export Java_HOME=/home/aqeel/development/jdk/jdk1.6.0_35
export PATH=$Java_HOME/bin:$PATH

Dann müssen Sie nur eine Umgebungsvariable aktualisieren, wenn Sie die JDK-Installation einrichten.

Schließlich müssen Sie möglicherweise hash -r ausführen, um den Bash-Programmcache zu löschen. Andere Shells benötigen möglicherweise einen ähnlichen Befehl.

Prost,

59

update-Java-alternatives 

Die Java-Programmdatei wird nicht mit Ihrem Java_HOME gefunden, sondern hängt nur von Ihrer PATH ab.

update-Java-alternatives ist ein guter Weg, um es für das gesamte System zu verwalten:

update-Java-alternatives -l

Beispielausgabe:

Java-7-Oracle 1 /usr/lib/jvm/Java-7-Oracle
Java-8-Oracle 2 /usr/lib/jvm/Java-8-Oracle

Wählen Sie eine der Alternativen:

Sudo update-Java-alternatives -s Java-7-Oracle

Wie update-alternatives funktioniert es auch über die Verwaltung von Symlinks. Der Vorteil ist, dass Symlinks zu allen Java-Hilfsprogrammen gleichzeitig verwaltet werden: javac, Java, javap usw.

Ich sehe noch keinen Java_HOME-Effekt im JDK. Bisher habe ich es nur in Tools von Drittanbietern gesehen, z. B. Maven .

$ Java_HOME/bin/Java -Version sagt "Berechtigung verweigert"

Wenn Sie nicht auf Code zugreifen oder ihn ausführen können, wird er ignoriert, wenn er zu Ihrem Pfad hinzugefügt wird. Sie müssen es zugänglich und lauffähig machen oder eine eigene Kopie erhalten.

Mach ein 

ls -ld $Java_HOME $Java_HOME/bin $Java_HOME/bin/Java

um zu sehen, warum Sie auf dieses Programm nicht zugreifen oder es nicht ausführen können.

4
Peter Lawrey

Bei der Suche nach Java wird von links nach rechts in Pfadeinträgen gesucht, die durch Folgendes getrennt sind: Sie müssen also den Pfad des neuesten jdk/bin-Verzeichnisses vor/usr/bin angeben. Wenn Sie danach suchen, wird der neueste Pfad und nach gefunden aufhören, weiter zu suchen.

d. h. PATH =/usr/Java/jdk_1.8/bin:/usr/bin: ..... und so weiter.

initialisieren Sie dann das Benutzerprofil mit folgendem Befehl: source ~/.bash_profile

und überprüfe mit: [welche Java]

du wirst den richtigen bekommen.

3
SandeepGodara

Wenn Sie JDKs verwenden möchten, die von Oracle-Site heruntergeladen wurden , hat sich bei mir (mithilfe von Mint) die Verwendung vonupdate-alternativesgezeigt:

  1. Ich habe das JDK heruntergeladen und einfach irgendwo extrahiert, zum Beispiel in /home/aqeel/development/jdk/jdk1.6.0_35
  2. Ich rannte:

    Sudo update-alternatives --install /usr/bin/Java java /home/aqeel/development/jdk/jdk1.6.0_35/bin/Java 1`
    

    Jetzt können Sie Sudo update-alternatives --config Java ausführen und Ihre Java-Version auswählen .

  3. Dies setzt nicht die Java_HOME-Variable , die ich konfigurieren wollte, und fügte sie einfach zu meinem ~/.bashrc hinzu, einschließlich einer export Java_HOME="/home/aqeel/development/jdk/jdk1.6.0_35"-Anweisung

Nun hatte ich zwei JDKs heruntergeladen (Angenommen, die zweite wurde nach /home/aqeel/development/jdk/jdk-10.0.1) extrahiert.

Wie können wir Java_HOME dynamisch basierend auf dem aktuell verwendeten Java ändern?

Meine Lösung ist nicht sehr elegant, ich bin mir ziemlich sicher, dass es bessere Optionen gibt, aber trotzdem:

  1. Um Java_HOME dynamisch basierend auf der ausgewählten Java-Alternative zu ändern , fügte ich dieses Snippet der ~/.bashrc hinzu:

    export Java_HOME=$(update-alternatives --query Java | grep Value: | awk -F'Value: ' '{print $2}' | awk -F'/bin/Java' '{print $1}')
    

Schließlich (dies liegt außerhalb des Geltungsbereichs) Wenn Sie die Java-Version ständig ändern müssen , sollten Sie Folgendes in Betracht ziehen:

  1. Hinzufügen eines Alias ​​zu Ihrem ~./Bash_aliases:

    alias change-Java="Sudo update-alternatives --config Java"
    

(Möglicherweise müssen Sie die Datei erstellen und den entsprechenden Abschnitt in ~/.bashrc kommentieren.)

2
Gerardo Roza

Das Aktualisieren von ~/.profile oder ~/.bash_profile funktioniert manchmal nicht. Ich habe gerade JDK 6 und sourced .bash_profile gelöscht. 

Versuchen Sie, dies auszuführen:

Sudo rm -rd jdk1.6.0_* #it may not let you delete without Sudo

Ändern Sie dann Ihre Java_HOME- und PATH-Variablen.

source ~/.bash_profile #assuming you've updated $Java_HOME and $PATH
0
javaProgrammer

Es gibt eine einfache Möglichkeit, den symbolischen Link von "/ usr/bin" zu entfernen. Es wird klappen.

0
Bineeth

Versuche dies:

  • exportieren Sie Java_HOME = put_here_your_Java_home_path
  • typ export PATH = $ Java_HOME/bin: $ PATH (stellen Sie sicher, dass $ Java_HOME das erste Element in PATH ist)
  • try Java -version

Grund: Es könnte andere PATH-Elemente geben, die auf alternative Java home verweisen. Wenn Sie zuerst Ihr bevorzugtes Java_HOME angeben, verwendet das System dieses.

0
rBay

In Linux Mint 18 Cinnamon sollten Sie unbedingt die Datei-c/etc/profile.d/jdk_home.sh überprüfen. Diese Datei wurde in jdk_home.sh.old umbenannt. Jetzt wird mein Pfad nicht überschrieben und ich kann Java-Version und aufrufen siehe Java 9 wie erwartet. Obwohl ich Java 9 in update-aternatives --config Java richtig ausgewählt habe, hat diese Datei jdk_home.sh den $ PATH beim Booten überschrieben.

0
JesseBoyd

Überprüfen Sie die verfügbaren Java-Versionen auf Ihrem Linux-System mithilfe des Befehls update-alternatives:

 $ Sudo update-alternatives --display Java

Da es nun geeignete Kandidaten gibt, zu denen Sie wechseln können, können Sie die Java-Standardversion unter den verfügbaren Java-JREs wechseln, indem Sie den folgenden Befehl ausführen:

 $ Sudo update-alternatives --config Java

Wenn Sie dazu aufgefordert werden, wählen Sie die Java-Version aus, die Sie verwenden möchten.1 oder 2. oder 3. usw.

Jetzt können Sie die geänderte Java-Standardversion wie folgt überprüfen.

 $ Java -version
0
shabinjo