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.
Es sieht zwar so aus, als ob Ihr Setup korrekt ist, es gibt jedoch ein paar Dinge, die Sie überprüfen sollten:
env
- speziell PATH
.command -v Java
sagt dir was?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,
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.
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.
Wenn Sie JDKs verwenden möchten, die von Oracle-Site heruntergeladen wurden , hat sich bei mir (mithilfe von Mint) die Verwendung vonupdate-alternativesgezeigt:
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 .
export Java_HOME="/home/aqeel/development/jdk/jdk1.6.0_35"
-AnweisungNun 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:
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:
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.)
Das Aktualisieren von ~/.profile
oder ~/.bash_profile
funktioniert manchmal nicht. Ich habe gerade JDK 6 und source
d .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
Es gibt eine einfache Möglichkeit, den symbolischen Link von "/ usr/bin" zu entfernen. Es wird klappen.
Versuche dies:
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.
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.
Ü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