2009-03-19 21 views
71

In Windows muss JAVA_HOME auf den JDK-Installationsordner verweisen (so dass alle ausführbaren Dateien enthält und JAVA_HOME/libs alle Standardbibliotheken jar enthält).Welches ist das korrekte Ziel für die JAVA_HOME-Umgebungsvariable für eine Linux-OpenJDK-Debian-basierte Distribution?

Wenn ich Suns JDK-Bundle herunterlade und es unter Linux installiere, ist es das gleiche Verfahren.

Allerdings muss ich Kubuntis Standard-OpenJDK-Paket verwenden. Das Problem besteht darin, dass alle ausführbaren Dateien in /usr/bin platziert werden. Aber die Gläser sind in /usr/share/java platziert. Da sie nicht unter dem gleichen Ordner JAVA_HOME sind, habe ich Probleme mit Grails und vielleicht wird es Probleme mit anderen Anwendungen geben, die die Standard-Java-Struktur erwarten.

  1. Wenn ich benutze:

    JAVA_HOME=/usr 
    

    Alle Anwendungen und Skripte, die alle ausführbaren Java verwenden möchten, können call $JAVA_HOME/bin/executable das Standardverfahren verwenden. Da die Gläser aber an einem anderen Ort sind, werden sie nicht immer gefunden (Beispiel: In Grails bekomme ich 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

+2

Ich kann nicht glauben, dass die Mods diese nützliche Frage nicht als "off topic" abgeschlossen haben! – HDave

Antwort

87

Was für mich endlich geklappt (Grails nun reibungslos funktioniert) ist fast wie Steve B. tun hat darauf hingewiesen:

JAVA_HOME=/usr/lib/jvm/default-java 

diese Weise, wenn der Benutzer die Standard-JDK für das System ändert, JAVA_HOME funktioniert immer noch.

default-java ist ein Symlink zur aktuellen JVM.

+5

Es scheint, dass es keinen solchen Link auf Debian 7 gibt – a1an

+3

Auf RHEL5.10 ist es/usr/lib/jvm/java – Brian

+1

Ich verwendete/usr/lib/jvm/java-7-openjdk-amd64 –

-1

Mein richtiges Ziel ist es immer, es von Sun herunterladen und ihm nur auf diese Weise installieren. Dann weißt du genau, in welches Verzeichnis alles hineingeht.

Aber wenn du es vorziehen würdest, mit der seltsamen Art zu bleiben, dass Debian es installiert, wäre meine beste Vermutung das übergeordnete Verzeichnis, in dem sich 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ürde/usr sein?)

Eh, das klingt nicht richtig ...

Ich bin interessiert, die Antwort zu diesem auch zu hören!

+0

Wenn Sie debian verwenden, müssen Sie wirklich mit den Debian-Strukturen oder späteren Systemaktualisierungen bleiben Sie mit einem defekten System. – RichieHH

0

Ich habe normalerweise keine Umgebungsvariable JAVA_HOME. Java kann es selbst einrichten. Innerhalb von Java sollte die Eigenschaft java.home system verfügbar sein.

+0

Ich habe es normalerweise auch nicht. Wenn ich es jedoch nicht aufstelle, beklagt grails, dass JAVA_HOME nicht da ist und abbricht. –

+0

ant braucht es auch in debian das ist der Kontext – RichieHH

6

Die Standard-Ubuntu-Installation scheint die verschiedenen Java-Versionen in /usr/lib/jvm zu setzen. Die javac, Java, die Sie in Ihrem Pfad finden, wird dies zu Softlink führen.

Es gibt kein Problem mit der Installation Ihrer eigenen Java-Version, wo Sie möchten, solange Sie die JAVA_HOME Umgebungsvariable setzen und sicherstellen, dass Sie das neue Java bin auf Ihrem Pfad haben.

Ein einfacher Weg, dies zu tun, ist der Java-Home existiert als Softlink haben, so dass, wenn Sie Versionen aktualisieren möchten oder wechseln Sie müssen nur das Verzeichnis ändern, dass diese Punkte - zB:

/usr/bin/java --> /opt/jdk/bin/java, 

/opt/jdk --> /opt/jdk1.6.011 
+0

es ist gefährlich, Ubuntu-Lösungen mit Debian zu empfehlen. Sie können und variieren. – RichieHH

+3

Beachten Sie, dass der Anfragende sagte, er habe Kubuntu verwendet, also sollten Ubuntu-Lösungen in Ordnung sein. –

-1

Bitte sehen Sie, was der Update-Alternativen Befehl tut (es hat einen netten Mann ...).

Kurz - was passiert, wenn Sie Java-Sun-1.4 und Java-Opensouce-1.0 haben ... welche nimmt "Java"? Es debian "/ usr/bin/java" ist symbolischer Link und "/usr/bin/java-sun-1.4" ist eine Alternative zu "/ usr/bin/java"

Edit: Als Richard sagte, update-alternatives ist nicht genug. Sie müssen tatsächlich update-java-alternatives verwenden. Mehr Infos unter:

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

+0

Update-Alternativen ist nicht genug. Es muss Update-Java-Alternativen sein – RichieHH

+0

@Richard: ja, notiert. Das erste Mal, dass ich mich darum kümmere, habe ich gegoogelt und Ubuntus Dokumentation gefunden. Vielen Dank! – elcuco

0

Versuchen Sie auch die JAVA_LIB variable Einstellung.

0

Soweit ich mich erinnere, habe ich das Update-Java-Alternativen-Skript anstelle der Update-Alternativen verwendet. Und es hat das JAVA_HOME für mich richtig gesetzt.

1

Wenn Probleme mit JAR-Dateien nicht gefunden werden, würde ich auch sicherstellen, dass CLASSPATH den Speicherort dieser Dateien enthält. Ich finde jedoch, dass der CLASSPATH oft für verschiedene Programme unterschiedlich eingestellt werden muss und oft für einzelne Programme individuell eingestellt wird.

48

Wenn Sie Alternativen verwenden, können Sie die JAVA_HOME basierend auf der festlegen Symlink java wie folgt aus:

export JAVA_HOME=$(readlink -f /usr/bin/java | sed "s:bin/java::") 
+0

Das funktioniert, außer ich habe "Java" und nicht "Javac". –

+3

Das funktioniert für mich: JAVA_HOME = $ (readlink -f/usr/bin/java | sed "s:/jre/bin/java ::") – dpnsan

+3

Brilliante Lösung, löst meine jahrelangen Kopfschmerzen mit JAVA_HOME, die dazu neigt, zu zeigen zu verschiedenen Orten auf verschiedenen Betriebssystemen. – Datageek

1

ich ähnliche Probleme mit der openjdk-6-jre und openjdk-6-jre-headless Pakete in Ubuntu entdeckt haben.

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 eine Probe 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 oberhalb dieser update-alternatives sehen kann, ist laufen 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.

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 bei der Installation ohne Spülung Contast.

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, wird update-alternatives 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. Die Entfernung der Dateien in /var/lib/dpkg/alternatives bricht auch update-java-alternatives.

0

Ubuntu 12.04 das funktioniert ...

JAVA_HOME =/usr/lib/jvm/java-6-openjdk-i386/jre

0

als Update für Fedora Benutzer, stellen Alternativen aktuellen Java-Verzeichnis /usr/java/default

so müssen Sie Ihre JAVA_HOME nach/usr/java/default eingestellt, um immer über Alternativen curent Auswahl in Ihrem classpath

HTH!

Verwandte Themen