Wie bestimme ich JAVA_HOME unter Debian / Ubuntu?

95

Unter Ubuntu ist es möglich, mehrere JVMs gleichzeitig zu haben. Die Standardeinstellung wird mit ausgewählt update-alternatives. Die JAVA_HOMEUmgebungsvariable wird jedoch aufgrund einer Debian-Richtlinie nicht festgelegt .

Ich schreibe ein Launcher-Skript (Bash), das eine Java-Anwendung startet. Diese Java-Anwendung benötigt die JAVA_HOMEUmgebungsvariable. Wie erhält man den Pfad der JVM, die aktuell von ausgewählt ist update-alternatives?

Witek
quelle

Antworten:

137

Für die JRE sollte so etwas den Trick machen:

JAVA_HOME=$(readlink -f /usr/bin/java | sed "s:bin/java::")
danadam
quelle
17
Ich brauchte das Home des JDK anstelle des JRE, aber ich habe Folgendes verwendet: JAVA_HOME = $ (readlink -f / usr / bin / javac | sed "s: bin / javac ::") Vielen Dank!
Witek
Als ich den Befehl ausprobierte echo $(readlink -f /usr/bin/java | sed "s:bin/java::"), war die Ausgabe /usr/lib/jvm/java-7-oracle/jre/und nicht/usr/lib/jvm/java-7-oracle/
Sumit Ramteke
Der in rsaddey angegebene Code funktioniert ordnungsgemäß
Sumit Ramteke
43

Die Lösung von danadam kann einfach übernommen werden, um den JDK-Pfad (dh nicht JRE) nach Bedarf abzurufen:

JAVA_HOME=$(readlink -f /usr/bin/javac | sed "s:/bin/javac::")
  • Sucht nach Java-Java-Compiler (anstelle von Java) in JDK (aber nicht JRE).
  • Hat kein abschließendes / (wird von sed s: / bin ... anstelle von s: bin ... entfernt)
rsaddey
quelle
12

export JAVA_HOME=$(dirname $(dirname $(readlink -f /usr/bin/java)))

Es .bashrcwar praktisch für mich.

David
quelle
9

Sie sagen also, dass dieser Befehl nichts für Sie tut?

sudo update-alternatives --config java 
Djangofan
quelle
2
Soll das dein JAVA_HOME sein? Ich habe festgestellt, dass update-java-alternatives eine bessere Möglichkeit ist, Java zu aktualisieren, da update-alternatives nicht alle Java-bezogenen Alternativen aktualisiert. Siehe askubuntu.com/questions/141791
James McMahon
Stimmt, aber ich bin auf Linux-Instanzen gestoßen, auf denen Update-Alternativen, aber keine Update-Java-Alternativen installiert waren.
Djangofan
3

Ich habe Java mit installiert

sudo apt-get install openjdk-7-jre-headless

und dann den Ort zu finden

ls -al /etc/alternatives/java
prule
quelle
2

Als Erweiterung von Danadams antworten:

Installieren Sie zunächst die 2. Java-JRE als 3. Java-Option mit der Priorität "3":

sudo alternatives --install /usr/lib/jvm/jre jre /opt/IBM/java/jre/bin/java 3

Dann können Sie sie auflisten:

update-alternatives --list java

Sie können die Alternative manuell festlegen, indem Sie Folgendes ausführen:

sudo alternatives --config java /opt/IBM/java/jre/bin/java

Dann kann Ihr Skript es im laufenden Betrieb so einstellen:

sudo alternatives --set java /opt/IBM/java/jre/bin/java
JAVA_HOME=$(readlink -f /usr/bin/java | sed "s:bin/java::")

Dies veranschaulicht besser, was der Befehl "sed" tut. Obwohl Sie die Links für javaw und javac usw. immer noch festlegen müssen, wird jeder Vorgang separat ausgeführt.

Djangofan
quelle
1

Vor einiger Zeit habe ich im Ubuntu-Forum ein Tutorial zum Installieren des neuesten JRE / JDK von der Java-Website erstellt. Außerdem erfahren Sie, wie Sie es systemweit aktivieren, indem Sie der PATH-Variablen den JRE / JDK-Speicherort hinzufügen. Wenn Sie möchten, können Sie auch JAVA_HOME zum Skript hinzufügen, das am Ende des Themas erwähnt wird.

Probieren Sie es aus: http://ubuntuforums.org/showthread.php?t=1437100

EarthMind
quelle
1

Wenn Java mit update-alternativesIhrer PATH-Variablen konfiguriert ist oder manuell hinzugefügt wurde, ist keine Hardcodierung "/usr/bin/java"erforderlich. Ich verwende diese Lösung in meinem .bashrc:

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

Freddy
quelle