wake-up-neo.net

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

Unter Windows muss Java_HOME Auf den JDK-Installationsordner verweisen (damit Java_HOME/bin Alle ausführbaren Dateien und Java_HOME/libs Alle Standardbibliotheken jar enthält).

Wenn ich das JDK-Bundle von Sun herunterlade und es unter Linux installiere, geschieht dies auf die gleiche Weise.

Ich muss jedoch Kubuntus Standard-OpenJDK-Paket verwenden. Das Problem ist, dass alle ausführbaren Dateien in /usr/bin Abgelegt werden. Die Gläser werden jedoch in /usr/share/Java Platziert. Da sie sich nicht im selben Java_HOME Ordner befinden, habe ich Probleme mit Grails und möglicherweise gibt es Probleme mit anderen Anwendungen, die die Standardstruktur Java) erwarten.

  1. Wenn ich benutze:

    Java_HOME=/usr
    

    Alle Anwendungen und Skripte, die eine beliebige Java ausführbare Datei verwenden möchten, können die Standardprozedur call $Java_HOME/bin/executable Verwenden. Da sich die Jars jedoch an einer anderen Stelle befinden, 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
    

    Keine der Java ausführbaren Dateien (Java, javac usw.) kann gefunden werden.

Was ist nun die richtige Art und Weise, mit der Java_HOME - Variable in einem Debian-basierten Linux umzugehen?

Danke für deine Hilfe, Luis

82
Luis Soeiro

Was letztendlich für mich funktioniert hat (Grails funktioniert jetzt reibungslos), ist fast so, wie Steve B. es hervorgehoben hat:

Java_HOME=/usr/lib/jvm/default-Java

Wenn der Benutzer das Standard-JDK für das System ändert, wird auf diese Weise Java_HOME funktioniert noch.

default-Java ist ein Symlink zur aktuellen JVM.

91
Luis Soeiro

Wenn Sie Alternativen zum Verwalten mehrerer Java Versionen verwenden, können Sie Java_HOME basierend auf dem symlinked Java (oder javac) wie folgt:

export Java_HOME=$(readlink -f /usr/bin/Java | sed "s:bin/Java::")
64
bbaassssiiee

Die Ubuntu-Standardinstallation scheint die verschiedenen Java Versionen in /usr/lib/jvm. Das javac, Java), das Sie in Ihrem Pfad finden, wird einen Softlink dazu erstellen.

Es gibt kein Problem mit der Installation Ihrer eigenen Java Version, wo immer Sie möchten, solange Sie das Java_HOME Umgebungsvariable und stellen Sie sicher, dass das neue Java bin auf Ihrem Pfad ist.

Eine einfache Möglichkeit, dies zu tun, besteht darin, das Java= home als Softlink zu verwenden. Wenn Sie also Versionen aktualisieren oder wechseln möchten, müssen Sie nur das Verzeichnis ändern, auf das dies verweist - z. B .:

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

/opt/jdk --> /opt/jdk1.6.011
5
Steve B.

Versuchen Sie auch, die Variable Java_LIB festzulegen.

0
Cantillon

Als Update für Fedora-Benutzer setzen Alternativen das aktuelle Java Verzeichnis auf/usr/Java/default

sie müssen also Ihr Java_HOME auf/usr/Java/default setzen, damit in Ihrem Klassenpfad immer Alternativen zur Auswahl stehen

HTH!

0
Greg Henry

Wenn Sie Probleme damit haben, dass JAR-Dateien nicht gefunden werden, stelle ich auch sicher, dass CLASSPATH den Speicherort dieser Dateien enthält. Ich finde jedoch, dass der KLASSENPFAD oft für verschiedene Programme unterschiedlich eingestellt werden muss und am Ende oft etwas ist, das für einzelne Programme eindeutig eingestellt werden kann.

0
MVang

Soweit ich mich erinnere, habe ich das Skript update-Java-alternatives anstelle der update-alternatives verwendet. Und es hat das Java_HOME für mich richtig eingestellt.

0
Tobias Schulte

Ich habe ähnliche Probleme mit den 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.

Nachfolgend finden Sie ein Beispiel für die Installation nach dem Entleeren:

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 darüber sehen, dass update-alternatives wird ausgeführt, um Links für die verschiedenen Java binaries) 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 mit der Installation ohne Bereinigung abwägen.

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 du siehst, update-alternatives wird nicht ausgelöst.

Nach dieser Installation gibt es keine Dateien für die Java binaries 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 auch update-Java-alternatives.

0
Saturn Junction

Ubuntu 12.04 das funktioniert ...

Java_HOME =/usr/lib/jvm/Java-6-openjdk-i386/jre

0
Alex

Eine aktualisierte Antwort, die Ihr Problem löst, sowie eine allgemeine Anleitung zur Installation von Oracle Java 7 auf Ubuntu finden Sie hier: http://www.wikihow.com)/Install-Oracle-Java-on-Ubuntu-Linux

0
Jack

Normalerweise habe ich keine Java_HOME-Umgebungsvariable. Java kann es selbst einrichten. Innerhalb Java java.home sollte die Systemeigenschaft verfügbar sein.

0
iny