JAVA_HOME
Muss in Windows auf den JDK-Installationsordner verweisen ( JAVA_HOME/bin
der alle ausführbaren Dateien und JAVA_HOME/libs
alle Standardbibliotheken enthält jar
).
Wenn ich das JDK-Bundle von Sun herunterlade und unter Linux installiere, ist es das gleiche Verfahren.
Ich muss jedoch Kubuntus Standard-OpenJDK-Paket verwenden. Das Problem ist, dass alle ausführbaren Dateien in platziert werden /usr/bin
. Aber die Gläser werden hineingelegt /usr/share/java
. Da sie sich nicht im selben JAVA_HOME
Ordner befinden, habe ich Probleme mit Grails und möglicherweise Probleme mit anderen Anwendungen, die die Standard-Java-Struktur erwarten.
Wenn ich benutze:
JAVA_HOME=/usr
Alle Anwendungen und Skripte, die eine ausführbare Java-Datei verwenden möchten, können das Standardverfahren verwenden
call $JAVA_HOME/bin/executable
. Da jedoch die Gläser an einem anderen Ort sind, sind sie nicht immer gefunden (Beispiel: in Grails Ich bin immerClassDefNotFound
fürnative2ascii
).Auf der anderen Seite, wenn ich benutze:
JAVA_HOME=/usr/share/java
Keiner der Java ausführbaren Dateien (
java
,javac
usw.) gefunden werden kann.
Wie geht man also mit der JAVA_HOME
Variablen in einem Debian-basierten Linux richtig um ?
Danke für deine Hilfe, Luis
quelle
Wenn Sie Alternativen zum Verwalten mehrerer Java-Versionen verwenden, können Sie die
JAVA_HOME
basierend auf dem symlinked Java (oder Java) wie folgt festlegen:quelle
/usr/bin/java
auf ein Skript verweisen (/usr/libexec/eselect-java/run-java-tool.bash
). Trotzdem ist es ein schöner Ansatz. Das einzige, was ich ändern würde, ist die Verwendung von Bashs eingebauter Substitution, um das Laichen zu vermeidensed
, z. B.:JAVA_HOME=$( j=$( readlink -f /usr/bin/java ) ; echo ${j%%/bin/java} )
javac
,java
weil nicht jeder das JDK installiert hat; nur die JREDie Standard-Ubuntu-Installation scheint die verschiedenen Java-Versionen einzufügen
/usr/lib/jvm
. Dasjavac
Java, das Sie in Ihrem Pfad finden, wird mit diesem Softlink verknüpft.Es ist kein Problem, Ihre eigene Java-Version an einem beliebigen Ort zu installieren, solange Sie die
JAVA_HOME
Umgebungsvariable festlegen und sicherstellen, dass sich das neue Javabin
auf Ihrem Pfad befindet.Eine einfache Möglichkeit, dies zu tun, besteht darin, dass das Java-Home als Softlink vorhanden ist. Wenn Sie also Versionen aktualisieren oder wechseln möchten, müssen Sie nur das Verzeichnis ändern, auf das dies verweist - z.
quelle
Normalerweise habe ich keine JAVA_HOME-Umgebungsvariable. Java kann es selbst einrichten. Innerhalb von Java sollte die Systemeigenschaft java.home verfügbar sein.
quelle
Versuchen Sie auch, die Variable JAVA_LIB festzulegen.
quelle
Soweit ich mich erinnere, habe ich anstelle der Update-Alternativen das Skript update-java-alternatives verwendet. Und es hat das JAVA_HOME für mich richtig eingestellt.
quelle
Wenn Sie Probleme mit nicht gefundenen JAR-Dateien haben, würde ich auch sicherstellen, dass Ihr CLASSPATH so eingestellt ist, dass er den Speicherort dieser Dateien enthält. Ich finde jedoch, dass der KLASSENPFAD für verschiedene Programme oft unterschiedlich eingestellt werden muss und häufig für einzelne Programme eindeutig festgelegt werden muss.
quelle
Eine aktualisierte Antwort, die Ihr Problem löst, sowie eine allgemeine Anleitung zur Installation von Oracle Java 7 unter Ubuntu finden Sie hier: http://www.wikihow.com/Install-Oracle-Java-on-Ubuntu-Linux
quelle
Ich habe ähnliche Probleme mit den Headless-Paketen openjdk-6-jre und openjdk-6-jre-headless in Ubuntu entdeckt.
Mein Problem wurde gelöst, indem die Pakete openjdk-6-jre und openjdk-6-jre-headless gelöscht und neu installiert wurden. Die Alternativen werden nur bei einer Neuinstallation der Pakete openjdk-6-jre und openjdk-6-jre-headless aktualisiert.
Unten finden Sie ein Beispiel für die Installation nach dem Löschen:
Oben sehen Sie, dass ausgeführt
update-alternatives
wird, um Links für die verschiedenen Java-Binärdateien einzurichten.Nach dieser Installation gibt es auch Links in
/usr/bin
, Links in/etc/alternatives
und Dateien für jede Binärdatei in/var/lib/dpkg/alternatives
.Lassen Sie uns dies mit der Installation ohne Löschen vergleichen.
Wie Sie sehen,
update-alternatives
wird nicht ausgelöst.Nach dieser Installation gibt es keine Dateien für die Java-Binärdateien in
/var/lib/dpkg/alternatives
, keine Links in/etc/alternatives
und keine Links in/usr/bin
.Das Entfernen der Dateien in
/var/lib/dpkg/alternatives
bricht auchupdate-java-alternatives
.quelle
Ubuntu 12.04 das funktioniert ...
JAVA_HOME = / usr / lib / jvm / java-6-openjdk-i386 / jre
quelle
Als Update für Fedora-Benutzer setzen Alternativen das aktuelle Java-Verzeichnis auf / usr / java / default
Daher müssen Sie JAVA_HOME auf / usr / java / default setzen, damit in Ihrem Klassenpfad immer alternative aktuelle Auswahlmöglichkeiten vorhanden sind
HTH!
quelle
Ich neige immer dazu, das JAVA_HOME entsprechend dem einzustellen
/usr/bin/java
.Auf diese Weise verweisen beide Alternativen auf denselben Ort
quelle
Mein richtiges Ziel war es immer, es von Sun herunterzuladen und einfach so zu installieren. Dann wissen Sie genau, in welches Verzeichnis alles geht.
Aber wenn Sie es vorziehen, bei der seltsamen Art und Weise zu bleiben, wie Debian es installiert, wäre meine beste Vermutung das übergeordnete Verzeichnis direkt über dem Ort, an dem sich die Java- und Java-Binärdateien befinden.
(seitdem, wenn Sie es in Ihrem Pfad angeben, ist es $ JAVA_HOME / bin) (In Ihrem Fall wäre es also ... $ JAVA_HOME / share und $ JAVA_HOME wäre / usr?)
Eh, das klingt nicht richtig ...
Ich bin auch daran interessiert, die Antwort darauf zu hören!
quelle
Bitte sehen Sie, was der Befehl update-alternatives macht (er hat einen netten Mann ...).
Kurz - was passiert, wenn Sie Java-Sun-1.4 und Java-OpenSouce-1.0 haben ... welches nimmt "Java"? Das Debian "/ usr / bin / java" ist ein symbolischer Link und "/usr/bin/java-sun-1.4" ist eine Alternative zu "/ usr / bin / java".
Edit: Wie Richard sagte,
update-alternatives
ist nicht genug. Sie müssen tatsächlich verwendenupdate-java-alternatives
. Weitere Infos unter:https://help.ubuntu.com/community/Java
quelle