Eine systemweite Möglichkeit, $ JAVA_HOME in Ubuntu festzulegen oder abzurufen?

8

Ich frage mich, ob Ubuntu selbst eine systemweite Möglichkeit bietet, den aktuellen Stand zu finden, JAVA_HOMEoder ob es den richtigen Ort für die Einstellung gibt JAVA_HOME.

Mac OS X macht dies gut, denn der /usr/libexec/java_homeBefehl gibt den aktuellen zurück JAVA_HOME. Aber für Ubuntu sagten mir die Materialien, die ich gefunden hatte, immer, ich solle den $JAVA_PATHHinweis auf einen statischen Pfad setzen, der in gespeichert ist ~/.bash_profile.

Ich denke jedoch, dass dieser Ansatz mehrere Nachteile hat:

  1. Sobald Java aktualisiert wurde, ändert sich die Mini-Versionsnummer, wodurch der statische Pfad nicht mehr verfügbar ist.
  2. Nachdem die JRE in meinem System zu ändern mit update-alternatives, muss ich ändern $JAVA_HOMEin .bash_profile. Diese zusätzliche Arbeit ist ärgerlich.
  3. Einige $JAVA_HOMEerforderliche Programme sind überhaupt nicht bekannt .bash_profile. Ich muss $JAVA_HOMEin ihrem Startskript festlegen , daher $JAVA_HOMEscheint mir eine standardmäßige und einfache Möglichkeit, sie zu erhalten , von entscheidender Bedeutung zu sein.

Jeder Rat ist willkommen. Vielen Dank.

Jianwen W.
quelle

Antworten:

6

Ein bisschen hacky, aber setzen Sie diese Zeile in Ihre, /etc/profileum sie systemweit einzustellen :

export JAVA_HOME=$(dirname $(dirname $(readlink -e /usr/bin/javac)))

quelle
Einige Systemadministratoren spielen gerne mit dem Pfad, so dass / usr / bin nicht unbedingt der erste Ort ist, an dem gesucht wird. Um sicherzugehen, dass Sie den Pfad der Version export JAVA_HOME=$(dirname $(dirname $(readlink -e $(which javac))))
auswählen,
Dies funktioniert, wenn der Pfad vorhanden ist. Gibt es eine Möglichkeit, es auf Systemen ohne Java stumm zu schalten?
greggles
Wie mache ich das in Mac? "readlink -e" funktioniert nicht.
Artanis Zeratul
1

Sie können Umgebungsvariablen festlegen /etc/environment, die von PAM eingerichtet werden. Es sollte auch Symlinks geben, /usr/lib/jvmdie sich bei kleineren Releases nicht ändern.

JAVA_HOME=/usr/lib/jvm/java-6-sun
mgorven
quelle
0

Legen Sie das Pfadsystemprofil fest

Bearbeiten Sie die Systempfaddatei / etc / profile

sudo gedit /etc/profile

Fügen Sie am Ende die folgenden Zeilen hinzu

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

Für http://javaandme.com/ finden Sie eine vollständige Installationsanleitung.

Pratap Singh
quelle
0

Wenn Sie sicher sind, dass der Befehl 'java' aufgerufen werden kann, funktioniert das nicht für Sie?

export JAVA_HOME=$(dirname $(java -XshowSettings:properties -version 2>&1 | grep 'java\.home' | awk '{ print $3 }'))
mlvnd
quelle
Das OP sucht nach einer Möglichkeit, $JAVA_HOMEsystemweit zu setzen, nicht nur in der aktuellen Shell.
Celada
0

Die akzeptierte Lösung von user13742 geht davon aus, dass auf dem Server definitiv Java installiert ist. Wenn Sie dies einem zentralisierten Skript für viele Server hinzufügen, werden einige Fehler angezeigt:

dirname: missing operand
Try 'dirname --help' for more information.

Um dies zu vermeiden und JAVA_HOME nur festzulegen, wenn der Server über eine Java-Umgebung verfügt, ist eine geringfügige Verbesserung:

if [ -f "$(which javac)" ]; then
    export JAVA_HOME=$(dirname $(dirname $(readlink -e $(which javac))))
fi

Ich habe auch die Änderung von SimonB übernommen, um whichherauszufinden, wo sich die Installation befindet.

greggles
quelle
Kann ich das einfügen /etc/environment?
Jin Kwon