Was ist das richtige Ziel für die Umgebungsvariable JAVA_HOME für eine Linux-OpenJDK Debian-basierte Distribution?

StackOverflow https://stackoverflow.com/questions/663658

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.

  1. 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 erhalte ClassDefNotFound für native2ascii).

  2. 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

War es hilfreich?

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:

https://help.ubuntu.com/community/Java

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top