Was ist das richtige Ziel für die Umgebungsvariable JAVA_HOME für eine Linux-OpenJDK Debian-basierte Distribution?
-
20-08-2019 - |
Frage
Unter Windows JAVA_HOME
auf die JDK-Installationsordner zeigen muss (so dass JAVA_HOME/bin
enthält alle ausführbaren Dateien und JAVA_HOME/libs
enthält alle Standard jar
Bibliotheken).
Wenn ich Suns JDK-Bundle herunterladen und installiert es in Linux, es ist das gleiche Verfahren.
Ich brauche aber Kubuntu-Standard OpenJDK-Paket zu verwenden. Das Problem ist, dass alle ausführbaren Dateien in /usr/bin
platziert werden. Aber die Gläser werden in /usr/share/java
platziert. Da sie Ordner nicht unter demselben JAVA_HOME
sind Probleme Ich habe mit Grails und vielleicht wird es mit anderen Anwendungen, die die Standard-Java-Struktur erwarten Schwierigkeiten.
-
Wenn ich:
JAVA_HOME=/usr
Alle Anwendungen und Skripte, die alle ausführbaren Java verwenden möchten, können Sie die Standardprozedur
call $JAVA_HOME/bin/executable
verwenden. Da jedoch die Gläser an einem anderen Ort sind, sind sie nicht immer gefunden (Beispiel: in Grails Ich erhalteClassDefNotFound
fürnative2ascii
). -
Auf der anderen Seite, wenn ich benutze:
JAVA_HOME=/usr/share/java
Keiner der Java ausführbaren Dateien (
java
,javac
, etc.) gefunden werden kann.
Also, was ist der richtige Weg, um die JAVA_HOME
Variable in einem Debian-basierten Linux-Handling?
Danke für Ihre Hilfe, Luis
Lösung
Was für mich endlich geklappt (Grails funktioniert jetzt reibungslos) tut fast wie Steve B. bemerkt hat:
JAVA_HOME=/usr/lib/jvm/default-java
Auf diese Weise, wenn der Benutzer das Standard-JDK für das System ändert, JAVA_HOME
noch funktioniert.
default-java
ist ein symbolischer Link auf die aktuelle JVM.
Andere Tipps
Wenn Sie Alternativen verwenden mehrere Java-Versionen zu verwalten, können Sie die JAVA_HOME
basierend auf der Symlink Java (oder javac) wie folgt aus:
export JAVA_HOME=$(readlink -f /usr/bin/java | sed "s:bin/java::")
Die Standard-Ubuntu installieren scheint die verschiedenen Java-Versionen in /usr/lib/jvm
zu setzen. Die javac
, java Sie auf Ihrem Weg zu finden, um diesen Softlink.
Es gibt kein Problem mit Ihrer eigenen Java-Version überall zu installieren Sie mögen, solange Sie den JAVA_HOME
Umgebungsvariable gesetzt und stellen Sie sicher, dass die neue Java bin
auf Ihrem Weg haben.
Ein einfacher Weg, dies zu tun, ist der Java-Home als Softlink existiert haben, so dass, wenn Sie aktualisieren möchten oder Versionen wechseln Sie das Verzeichnis ändern müssen, dass diese Punkte auf - z.
/usr/bin/java --> /opt/jdk/bin/java,
/opt/jdk --> /opt/jdk1.6.011
ich habe in der Regel keine Umgebungsvariable JAVA_HOME. Java kann es bis selbst festgelegt. Innerhalb java java.home sollte Systemeigenschaft zur Verfügung.
Versuchen Sie auch die JAVA_LIB variable Einstellung.
Soweit ich mich erinnere, habe ich die Update-java-Alternativen Skript anstatt die update-Alternativen. Und es hat richtig für mich, das JAVA_HOME gesetzt.
Wenn Sie Probleme mit JAR-Dateien haben nicht gefunden werden Ich würde auch CLASSPATH sicherzustellen, stellen Sie den Speicherort der Dateien aufzunehmen. Ich finde aber, dass der CLASSPATH muss oft unterschiedlich für verschiedene Programme eingestellt wird, und endet oft etwas, einzigartig für einzelne Programme zu setzen.
aktualisiert Antwort, die Ihr Problem lösen und auch nur eine allgemeine gute How-to zur Installation von Oracle Java 7 auf Ubuntu finden Sie hier: http://www.wikihow.com/Install-Oracle-Java-on-Ubuntu-Linux
Ich habe ähnliche Probleme mit dem openjdk-6-jre entdeckt und openjdk-6-jre-headless Paketen in Ubuntu.
Mein Problem durch Spülen des OpenJDK-6-jre und openjdk-6-jre-headless Pakete und neu installieren gelöst wurde. Die Alternativen sind nur auf einem frischen aktualisiert installieren des OpenJDK-6-jre und openjdk-6-jre-headless Pakete.
Im Folgenden ist ein Beispiel für die Installation nach dem Spülen:
aptitude purge openjdk-6-jre openjdk-6-jre-headless # to ensure no configuration exists
aptitude install --without-recommends openjdk-6-jre # Installing without some extras
Reading package lists... Done
Building dependency tree
Reading state information... Done
Reading extended state information
Initializing package states... Done
The following NEW packages will be installed:
ca-certificates-java{a} java-common{a} libavahi-client3{a} libavahi-common-data{a} libavahi-common3{a} libcups2{a} libflac8{a} libgif4{a} libnspr4-0d{a} libnss3-1d{a} libogg0{a} libpulse0{a} libsndfile1{a} libvorbis0a{a} libvorbisenc2{a} libxi6{a} libxtst6{a}
openjdk-6-jre openjdk-6-jre-headless{a} openjdk-6-jre-lib{a} tzdata-java{a}
The following packages are RECOMMENDED but will NOT be installed:
icedtea-6-jre-cacao icedtea-netx ttf-dejavu-extra
0 packages upgraded, 21 newly installed, 0 to remove and 119 not upgraded.
Need to get 0B/34.5MB of archives. After unpacking 97.6MB will be used.
Do you want to continue? [Y/n/?]
Writing extended state information... Done
Selecting previously deselected package openjdk-6-jre-lib.
(Reading database ... 62267 files and directories currently installed.)
Unpacking openjdk-6-jre-lib (from .../openjdk-6-jre-lib_6b24-1.11.5-0ubuntu1~10.04.2_all.deb) ...
...
Processing triggers for man-db ...
Setting up tzdata-java (2012e-0ubuntu0.10.04) ...
...
Setting up openjdk-6-jre-headless (6b24-1.11.5-0ubuntu1~10.04.2) ...
update-alternatives: using /usr/lib/jvm/java-6-openjdk/jre/bin/java to provide /usr/bin/java (java) in auto mode.
update-alternatives: using /usr/lib/jvm/java-6-openjdk/jre/bin/keytool to provide /usr/bin/keytool (keytool) in auto mode.
update-alternatives: using /usr/lib/jvm/java-6-openjdk/jre/bin/pack200 to provide /usr/bin/pack200 (pack200) in auto mode.
update-alternatives: using /usr/lib/jvm/java-6-openjdk/jre/bin/rmid to provide /usr/bin/rmid (rmid) in auto mode.
update-alternatives: using /usr/lib/jvm/java-6-openjdk/jre/bin/rmiregistry to provide /usr/bin/rmiregistry (rmiregistry) in auto mode.
update-alternatives: using /usr/lib/jvm/java-6-openjdk/jre/bin/unpack200 to provide /usr/bin/unpack200 (unpack200) in auto mode.
update-alternatives: using /usr/lib/jvm/java-6-openjdk/jre/bin/orbd to provide /usr/bin/orbd (orbd) in auto mode.
update-alternatives: using /usr/lib/jvm/java-6-openjdk/jre/bin/servertool to provide /usr/bin/servertool (servertool) in auto mode.
update-alternatives: using /usr/lib/jvm/java-6-openjdk/jre/bin/tnameserv to provide /usr/bin/tnameserv (tnameserv) in auto mode.
update-alternatives: using /usr/lib/jvm/java-6-openjdk/jre/lib/jexec to provide /usr/bin/jexec (jexec) in auto mode.
Setting up openjdk-6-jre (6b24-1.11.5-0ubuntu1~10.04.2) ...
update-alternatives: using /usr/lib/jvm/java-6-openjdk/jre/bin/policytool to provide /usr/bin/policytool (policytool) in auto mode.
...
Sie können über diesem update-alternatives
sehen ausgeführt 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 jeden binären in /var/lib/dpkg/alternatives
.
ls -l /usr/bin/java /etc/alternatives/java /var/lib/dpkg/alternatives/java
lrwxrwxrwx 1 root root 40 2013-01-16 14:44 /etc/alternatives/java -> /usr/lib/jvm/java-6-openjdk/jre/bin/java
lrwxrwxrwx 1 root root 22 2013-01-16 14:44 /usr/bin/java -> /etc/alternatives/java
-rw-r--r-- 1 root root 158 2013-01-16 14:44 /var/lib/dpkg/alternatives/java
Lassen Sie uns dies contast mit ohne Spülung zu installieren.
aptitude remove openjdk-6-jre
aptitude install --without-recommends openjdk-6-jre
Reading package lists... Done
Building dependency tree
Reading state information... Done
Reading extended state information
Initializing package states... Done
The following NEW packages will be installed:
ca-certificates-java{a} java-common{a} libavahi-client3{a} libavahi-common-data{a} libavahi-common3{a} libcups2{a} libflac8{a} libgif4{a} libnspr4-0d{a} libnss3-1d{a} libogg0{a} libpulse0{a} libsndfile1{a} libvorbis0a{a} libvorbisenc2{a} libxi6{a} libxtst6{a}
openjdk-6-jre openjdk-6-jre-headless{a} openjdk-6-jre-lib{a} tzdata-java{a}
The following packages are RECOMMENDED but will NOT be installed:
icedtea-6-jre-cacao icedtea-netx ttf-dejavu-extra
0 packages upgraded, 21 newly installed, 0 to remove and 119 not upgraded.
Need to get 0B/34.5MB of archives. After unpacking 97.6MB will be used.
Do you want to continue? [Y/n/?]
Writing extended state information... Done
Selecting previously deselected package openjdk-6-jre-lib.
(Reading database ... 62293 files and directories currently installed.)
Unpacking openjdk-6-jre-lib (from .../openjdk-6-jre-lib_6b24-1.11.5-0ubuntu1~10.04.2_all.deb) ...
...
Processing triggers for man-db ...
...
Setting up openjdk-6-jre-headless (6b24-1.11.5-0ubuntu1~10.04.2) ...
Setting up openjdk-6-jre (6b24-1.11.5-0ubuntu1~10.04.2) ...
...
Wie Sie sehen, ist update-alternatives
nicht ausgelöst wird.
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
.
Die Entfernung der Dateien in /var/lib/dpkg/alternatives
auch bricht update-java-alternatives
.
Ubuntu 12.04 das funktioniert ...
JAVA_HOME = / usr / lib / jvm / java-6-openjdk-i386 / jre
Als Update für Fedora Benutzer, stellen Alternative aktuelles Java-Verzeichnis / Usr / java / default
so haben Sie Ihre JAVA_HOME nach / usr / java setzen / default immer Alternativen haben curent Auswahl in Ihrem Classpath
HTH!
Mein richtiges Ziel ist es immer, es von Sun herunterladen und ihm nur auf diese Weise installieren. Dann wissen Sie genau, was Verzeichnis geht alles in.
Wenn Sie aber mit dem ungeraden Weg bleiben würden es vorziehen, dass Debian installiert es, meine beste Vermutung wäre das übergeordnete Verzeichnis nur oben, wo die Java und javac Binärdateien befinden.
(da, wenn Sie es in Ihrem Pfad angeben, es ist $ JAVA_HOME / bin) (Also in Ihrem Fall wäre es ... $ JAVA_HOME / Aktie und $ JAVA_HOME würden / usr sein?)
Eh, das klingt nicht richtig ...
Ich bin daran interessiert, die Antwort auf diese Frage zu hören!
Bitte sehen, was die update-alternativen Befehl tut (es hat einen netten Mann ...).
Kurz - was passiert, wenn Sie Java-sun-1.4 und Java-OpenSouce-1.0 ... die man braucht "java" haben? Es debian "/ usr / bin / java" ist symbolischer Link und "/usr/bin/java-sun-1.4" ist eine Alternative zu "/ usr / bin / java"
Edit:
Wie Richard sagte, ist update-alternatives
nicht genug. Sie müssen tatsächlich update-java-alternatives
verwenden. Mehr Infos unter: