So legen Sie JAVA_HOME unter Linux für alle Benutzer fest

182

Ich bin neu im Linux-System und es scheint zu viele Java-Ordner zu geben.

Java-Version gibt mir:

  • Java-Version "1.7.0_55"
  • OpenJDK-Laufzeitumgebung (rhel-2.4.7.1.el6_5-x86_64 u55-b13)
  • OpenJDK 64-Bit-Server-VM (Build 24.51-b03, gemischter Modus)

Wenn ich versuche, ein Maven-Projekt zu erstellen, wird folgende Fehlermeldung angezeigt:

Error: JAVA_HOME is not defined correctly.
We cannot execute /usr/java/jdk1.7.0_05/bin/java

Könnten Sie mir bitte sagen, welche Dateien ich sowohl für Root- als auch für Nicht-Root-Benutzer ändern muss und wo genau sich Java befindet?

Amruta
quelle

Antworten:

350
  1. find /usr/lib/jvm/java-1.x.x-openjdk
  2. vim /etc/profile

    Stellen Sie sudo voran, wenn Sie als nicht privilegierter Benutzer angemeldet sind, d. H. sudo vim

  3. Drücken Sie 'i', um in den Einfügemodus zu gelangen
  4. hinzufügen:

    export JAVA_HOME="path that you found"
    
    export PATH=$JAVA_HOME/bin:$PATH
  5. Melden Sie sich ab und wieder an, starten Sie den Computer neu oder verwenden Sie ihn source /etc/profile, um Änderungen sofort in Ihrer aktuellen Shell zu übernehmen
Dieser Dave Guy
quelle
29
Vergessen Sie nicht, die doppelten Anführungszeichen zu löschen und sie von Ihrer Tastatur neu zu erstellen, da nur das Kopieren und Einfügen Probleme verursachen kann.
Sunil Kumar
12
@rbaleksandar einige Anwendungen hängen davon ab JAVA_HOME, schadet nicht auch das Einrichten.
Raffian
2
IntelliJ ist eine solche Anwendung - und keine untergeordnete.
Pete
12
Sie müssen ausgeführt werden, damit die source /etc/profileÄnderungen auch sofort wirksam werden!
Mohamed Taher Alrefaie
1
Dies zeigte mir die richtige Richtung. /etc/profile.d/jdk.shIn meinem System schwebte tatsächlich ein abgestandener Körper herum.
Hermann
106

Für alle Benutzer würde ich empfehlen, die folgende Zeile einzufügen /etc/profile

export JAVA_HOME=$(readlink -f /usr/bin/javac | sed "s:/bin/javac::")

Dies wird dynamisch aktualisiert und funktioniert gut mit dem alternativen System. Beachten Sie jedoch, dass das Update nur in einer neuen Login-Shell stattfindet.

Eero Aaltonen
quelle
10
um einfach nur JRE (sogar kopflos) zu verwenden export JAVA_HOME=$(readlink -f /usr/bin/java | sed "s:/bin/java::")- beachten Sie, dass ich nur java, nicht verwendenjavac
Roman Kruglov
@occulta Zumindest erwartet Maven, dass JAVA_HOME auf ein JDK verweist, und verwendet es, um den Java-Compiler zu finden.
Eero Aaltonen
1
Upvote für readlinkund aktualisieren / aktualisieren Sie kompatible Lösungen, auch wenn dies ein 5 Jahre alter Thread ist. Ich empfehle nur, / etc / profile nicht zu bearbeiten, sondern Ihren Export in eine benutzerdefinierte Datei zu legen, z. B. /etc/profile.d/java_environment.shmüssen Sie möglicherweise einen chmod +x java_environment.shNeustart durchführen.
ChristophS
Perfekt. Besser als meine klobige dirnameLösung. Wenn Sie wie ich sind und verstehen möchten, was hier vor sich geht, ist dies ein einfacher Ersatz für übereinstimmenden Text aus der Eingabe durch eine leere Zeichenfolge. Das "Standard" -Zeichen für Ersetzungen ist das /, aber solange Sie konsistent sind, können Sie das /durch alles ersetzen . In diesem Fall sind es Doppelpunkte, wie wir sie /für Pfadtrennzeichen verwenden.
Ungeheuer
35

Sie könnten / etc / profile oder besser eine Datei wie /etc/profile.d/jdk_home.sh verwenden

export JAVA_HOME=/usr/java/jdk1.7.0_05/

Sie müssen sich daran erinnern, dass diese Datei nur mit neuen Login-Shells geladen wird. Also nach bash -l oder einer neuen Gnome-Sitzung und dass sie sich mit neuen Java-Versionen nicht ändert.

Flob
quelle
1
Zumindest in meinem Linux (Raspbian) wird / etc / profile als Quelle verwendet, /etc/profile.d/*.shsodass Ihre Datei aufgerufen werden muss, jdk_home.shdamit sie bezogen wird
Hilikus
Danke @Hilikus :-) Ich habe es entsprechend geändert.
Flob
2
Danke dir. Ich habe eine Mischung aus deiner und @
Eeros
1
Dies ist die beste Antwort
Jacob
/etc/profile.d/jdk_home.shist die viel sauberere Antwort, zumindest für Ubuntu , /etc/profileist schon mit so viel Logik verklumpt. Es schien nicht ratsam, mehr hinzuzufügen ...
Ng Sek Long
30

Keine der anderen Antworten "klebte" für mich in RHEL 7, auch nicht beim Einstellen JAVA_HOMEund PATHdirekt in /etc/profileoder ~/.bash_profilewürde nicht funktionieren. Jedes Mal, wenn ich versuchte zu überprüfen, ob JAVA_HOMEes eingestellt war, wurde es leer angezeigt:

$ echo $JAVA_HOME
    (<-- no output)

Was ich tun musste, war ein Skript einzurichten in /etc/profile.d/jdk_home.sh:

#!/bin/sh
export JAVA_HOME=/opt/ibm/java-x86_64-60/
export PATH=$JAVA_HOME/bin:$PATH

Ich habe die erste Zeile (die #!/bin/sh) anfangs vernachlässigt und es wird ohne sie nicht funktionieren.

Jetzt geht es:

$ echo $JAVA_HOME
/opt/ibm/java-x86_64-60/
Kyle Falconer
quelle
Ich hatte die gleiche Erfahrung mit RHEL 7. Ich habe die Exporte aus dem ~ / .bash_profile entfernt und diesen Ansatz verwendet.
xpagesbeast
#! / bin / sh ist in Ihrer jdk_home.sh nicht erforderlich. Sobald Sie die Konfiguration abgeschlossen haben, stellen Sie sicher, dass Sie sich abmelden und erneut anmelden
kuhajeyan
12

Es ist sehr einfach, unter Linux einen Pfad festzulegen. Gehen Sie wie folgt vor:

Schritt 1 Öffnen Sie das Terminal und geben Sie es ein sudo gedit .bashrc

Schritt 2 Sie werden nach Ihrem Passwort gefragt. Nach Eingabe des Passworts wird die Bash-Datei geöffnet. Gehen Sie dann zum Ende und geben Sie unten ein

Schritt 3

   export JAVA_HOME="/usr/lib/jvm/java-8-openjdk-amd64/"
   export PATH=$PATH:$JAVA_HOME/bin

Schritt 4 Speichern Sie dann die Datei und beenden Sie die Datei

Oben ist für einen einzelnen Benutzer. Für alle Benutzer müssen Sie die folgenden Schritte ausführen

Schritt 1 gedit /etc/profile

Schritt 2 export JAVA_HOME="/usr/lib/jvm/java-8-openjdk-amd64/"

Schritt 3 export PATH=$PATH:$JAVA_HOME/bin

Hoffe das hilft. Vielen Dank!

PyDevSRS
quelle
2
Diese Antwort legt es nur für den aktuellen Benutzer fest.
Manuel Manhart
Vielen Dank, dass Sie @ickyrr
PyDevSRS
7

Tun, was Oracle tut (als ehemaliger Sun-Mitarbeiter kann ich mich nicht daran gewöhnen)

ln -s latestJavaRelease / usr / java / default
Wobei latestJavaRelease die Version ist, die Sie verwenden möchten

Exportieren Sie dann JAVA_HOME = / usr / java / default

Steve S.
quelle
6

Die Antwort wird gegeben, frühere Beiträge sind gültig. Aber nicht eine Antwort ist vollständig in Bezug auf:

  1. Das Ändern des Profils / etc / wird nicht nur aus dem folgenden Grund empfohlen (wie in / etc / profile angegeben):
  • Es ist keine gute Idee, diese Datei zu ändern, es sei denn, Sie wissen, was Sie tun. Es ist viel besser, ein custom.sh-Shell-Skript in /etc/profile.d/ zu erstellen, um benutzerdefinierte Änderungen an Ihrer Umgebung vorzunehmen, da dies das Zusammenführen in zukünftigen Updates verhindert. *
  1. Erstellen Sie also wie oben angegeben die Datei /etc/profile.d/custom.sh für benutzerdefinierte Änderungen.

  2. Um immer auf dem neuesten Stand zu bleiben, wenn neuere Versionen von Java installiert werden, geben Sie niemals den absoluten Pfad ein, sondern verwenden Sie stattdessen:

#wenn jdk als Java nach Hause gemacht wird

export JAVA_HOME = $ (readlink -f / usr / bin / javac | sed "s: / bin / javac ::")

ODER

#wenn jre als Java nach Hause macht

export JAVA_HOME = $ (readlink -f / usr / bin / java | sed "s: / bin / java ::")

  1. Und denken Sie daran, # zu haben ! / bin / bash in der Datei custom.sh
alok ailawadi
quelle
4

Kopieren Sie den von Ihnen installierten Bin-Dateipfad

YOUR PATH

Öffnen Sie das Terminal und bearbeiten Sie die Umgebungsdatei, indem Sie den folgenden Befehl eingeben:

sudo nano /etc/environment

Fügen Sie in dieser Datei die folgende Zeile hinzu (ersetzen Sie sie YOUR_PATHdurch den gerade kopierten Pfad):

JAVA_HOME="YOUR_PATH"

Das sollte ausreichen, um die Umgebungsvariable festzulegen. Laden Sie nun diese Datei neu:

source /etc/environment

Testen Sie es jetzt, indem Sie Folgendes ausführen:

echo $JAVA_HOME
VirangaMahesh
quelle
3
Olny Effekte aktuelle Terminalsitzung
Fatih Türker
@ FatihTürker Starten Sie Ihren PC neu
Jack Giffin
Für mich mit jdk11 ist YOUR_PATH/usr/lib/jvm/default-java/
Jack Giffin
2

Unter Linux füge ich diese Zeile meinem ~ / .profile hinzu:

export JAVA_HOME=$(readlink -ze /usr/bin/javac | xargs -0 dirname -z | xargs -0 dirname)
Emanuel Oliveira
quelle
2
Es scheint eine möglicherweise richtige Antwort zu sein, aber können Sie erklären, warum es funktioniert, dh was es tut und was das Problem des OP ist? Sie sagen auch "unter Linux", aber es gibt viele verschiedene Linux-Distributionen, die möglicherweise nicht für alle funktionieren. Fügen Sie bitte hinzu, für welche Distribution dies funktioniert.
Buurman
2

Schritt 1 - Überprüfen Sie die aktuelle Java-Version mit "echo $ JAVA_HOME".

Schritt 2 - vim / etc / profile

Schritt 3 - Am Ende der Datei finden Sie den Export JAVA_HOME. Hier müssen Sie den neuen Pfad angeben. Stellen Sie sicher, dass er nicht relativ ist.

Schritt 4 - Speichern und beenden: wq

Schritt 5 - "source / etc / profile /", dies würde die Änderung ausführen

Schritt 6 - Führen Sie erneut ein Echo durch. $ JAVA_HOME - Änderung hätte sich widerspiegeln.

Swapnil Shashank
quelle
2

1 ... Mit der Abkürzung Ctlr+ Alt+T Öffnen Sie das Terminal

2 ... Führen Sie den folgenden Befehl aus:

echo export JAVA_HOME='$(readlink -f /usr/bin/javac | sed "s:/bin/javac::")' | sudo tee /etc/profile.d/jdk_home.sh > /dev/null

3 ... (empfohlen) Starten Sie Ihre VM / Ihren Computer neu. Sie können verwendensource /etc/source wenn Sie den Computer nicht neu starten möchten

4 ... Mit der Abkürzung Ctlr+ Alt+T , um das Terminal zu öffnen

5 ... Verifizierte JAVA_HOME-Rate mit

echo $JAVA_HOME

Einzeilige Kopie von Flob , Gutschrift an sie

Ng Sek Long
quelle
2
export "JAVA_HOME=$(readlink -f /usr/bin/java | sed "s:bin/java::")" | tee -a /etc/profile && source /etc/profile && echo $JAVA_HOME
Dashrath Mundkar
quelle
1

Wahrscheinlich ist es eine gute Idee, das von Ihnen bearbeitete Profil zu verwenden, um zu vermeiden, dass Sie ein neues Login verwenden müssen.

entweder: source / etc / oder. /etc/

Wo ist das Profil, das Sie bearbeitet haben?

Bryant Bernstein
quelle
1

Lassen Sie mich einige Vorteile des Festlegens von JAVA_HOME oder einer anderen Umgebungsvariablen erläutern, während wir JAVA_HOME festlegen:

1) Es ist einfach, JDK zu aktualisieren, ohne dass dies Auswirkungen auf den Start und die Konfigurationsdatei Ihrer Anwendung hat, die auf JAVA_HOME verweist. Sie müssen nur eine neue Version herunterladen und sicherstellen, dass JAVA_HOME auf eine neue Java-Version verweist. Dies ist der beste Vorteil der Verwendung von Umgebungsvariablen oder Links.

2) Die Variable JAVA_HOME ist kurz und prägnant anstelle des vollständigen Pfads zum JDK-Installationsverzeichnis.

3) Die Variable JAVA_HOME ist plattformunabhängig. Wenn Ihr Startskript JAVA_HOME verwendet, kann es ohne Änderungen unter Windows und UNIX ausgeführt werden. Sie müssen lediglich JAVA_HOME auf dem jeweiligen Betriebssystem festlegen.

Lesen Sie mehr: http://javarevisited.blogspot.com/2012/02/how-to-set-javahome-environment-in.html#ixzz4BWmaYIjH

Gast
quelle
1

Dies ist ein sehr einfaches Skript, um das Problem zu lösen

export JAVA_HOME_BIN=`which java`
export JAVA_HOME_DIR=`dirname $JAVA_HOME_BIN`
export JAVA_HOME=`dirname $JAVA_HOME_DIR`

Und zum Testen:

echo $JAVA_HOME
Dylan Breugne
quelle
1

Posting als Antwort, da ich nicht das Privileg habe zu kommentieren.

Hinweis : Befolgen Sie die akzeptierte Antwort von "That Dave Guy".

Stellen Sie nach dem Festlegen der Variablen sicher, dass Sie die entsprechenden Berechtigungen für das Java-Verzeichnis festgelegt haben, in dem es installiert ist.

chmod -R 755 /usr/java
Van Peer
quelle
0

Verwenden Sie SDKMAN sdkman.io , um übrigens zu wechseln. deine sdk's.

Es legt das JAVA_HOME für Sie fest.

Stefan Höltker
quelle
0

Öffnen Sie kafka-run-class.sh mit sudo, um zu schreiben

Sie finden kafka-run-class.sh in Ihrem kafka-Ordner: kafka / bin / kafka-run-class.sh

Überprüfen Sie diese Zeilen

Geben Sie hier die Bildbeschreibung ein

Ändern Sie die JAVA-Variable im else-Teil so, dass sie auf die ausführbare Java-Datei in Ihrem Java / Bin verweist. wie JAVA = "$ JAVA_HOME / java"

Ashish Verma
quelle
0

Alle operativen Schritte (Java finden, übergeordnetes Verzeichnis, Datei bearbeiten, ...) eine Lösung

zFileProfile="/etc/profile"
zJavaHomePath=$(readlink -ze $(which java) | xargs -0 dirname | xargs -0 dirname)
echo $zJavaHomePath

echo "export JAVA_HOME=\"${zJavaHomePath}\"" >> $zFileProfile
echo "export PATH=\$PATH:\$JAVA_HOME/bin" >> $zFileProfile

Ergebnis:

# tail -2 $zFileProfile
export JAVA_HOME="/usr/lib/jvm/java-11-openjdk-11.0.7.10-1.el8_1.x86_64"
export PATH=$PATH:$JAVA_HOME/bin

Erläuterung:

1) Lassen Sie uns den vollständigen Befehl in Teile zerlegen

$(readlink -ze $(which java) | xargs -0 dirname | xargs -0 dirname)

2) Finden Sie den Java-Pfad mit dem Java-Befehl

# $(which java)
"/usr/bin/java"

3) Ermitteln Sie den relativen Pfad vom symbolischen Pfad

# readlink -ze /usr/bin/java
"/usr/lib/jvm/java-11-openjdk-11.0.7.10-1.el8_1.x86_64/bin/java"

4) Holen Sie sich den übergeordneten Pfad von /usr/lib/jvm/java-11-openjdk-11.0.7.10-1.el8_1.x86_64/bin/java

# readlink -ze /usr/bin/java | xargs -0 dirname
"/usr/lib/jvm/java-11-openjdk-11.0.7.10-1.el8_1.x86_64/bin"

5) Holen Sie sich den übergeordneten Pfad von /usr/lib/jvm/java-11-openjdk-11.0.7.10-1.el8_1.x86_64/bin/

# readlink -ze /usr/bin/java | xargs -0 dirname | xargs -0 dirname
"/usr/lib/jvm/java-11-openjdk-11.0.7.10-1.el8_1.x86_64"
ahmet
quelle
0

Wenn Sie dies in / etc / profile öffnen, erfahren Sie, dass es nicht empfohlen wird, in diese Datei zu schreiben. Erstellen Sie stattdessen ein Skript für Ihre Befehle (vorausgesetzt, test.sh), gehen Sie zum Ordner /etc/profile.d und legen Sie dort test.sh ab. Jedes Mal, wenn Sie die Instanz neu starten, wird sie automatisch von / etc / profile aufgerufen.

Noha
quelle
-1

Ich benutze die Zeile:

export JAVA_HOME=$(readlink -f $(dirname $(readlink -f $(which java) ))/../)

zu meinem ~ / .profile, damit es bei der Anmeldung die Basis des Standard-Java-Verzeichnisses verwendet. Dies ist für Bash.

darkhipo
quelle