(Linux) Welche Dateien wertet Java wann und wie aus?
*Markus
- java
0 迪拉斯0 迪拉斯
0 Biesterfeld0 *Markus0 Biesterfeld0 *Markus
0 Jens Holzkämper0 *Markus
Hallo,
Ich möchte hier mal alle javabezogenen Dateien auflisten und würde gerne wissen, wie diese zusammenspielen, da mich eines wundert: Wie kann es sein, dass java-config -L folgendes ausgibt...
The following VMs are available for generation-2:
1) Sun JDK 1.4.2.13 [sun-jdk-1.4]
*) Sun JDK 1.5.0.08 [sun-jdk-1.5]
3) Sun JRE 1.5.0.08 [sun-jre-bin-1.5]
...aber keine der folgenden Dateien irgendetwas mit Java 1.5 beinhaltet, zumal Java-1.5 tadellos funktioniert?
Zum einen sind das im Verzeichnis /etc/env.d/ folgende Dateien:
20java
------------------------------------------
LDPATH=/opt/sun-jdk-1.4.2.13/jre/lib/i386/:/opt/sun-jdk-1.4.2.13/jre/lib/i386/native_threads/:/opt/sun-jdk-1.4.2.13/jre/lib/i386/classic/:/opt/sun-jdk-1.4.2.13/jre/lib/i386/server/
JDK_HOME=/opt/sun-jdk-1.4.2.13
JAVAC=/opt/sun-jdk-1.4.2.13/bin/javac
GENERATION=2
ROOTPATH=/opt/sun-jdk-1.4.2.13/bin:/opt/sun-jdk-1.4.2.13/jre/bin:/opt/sun-jdk-1.4.2.13/jre/javaws
VMHANDLE=sun-jdk-1.4
MANPATH=/opt/sun-jdk-1.4.2.13/man
PATH=/opt/sun-jdk-1.4.2.13/bin:/opt/sun-jdk-1.4.2.13/jre/bin:/opt/sun-jdk-1.4.2.13/jre/javaws
JAVA_HOME=/opt/sun-jdk-1.4.2.13
20java-config
-----------------------------------------
MANPATH=/etc/java-config/system-vm/man/
CONFIG_PROTECT_MASK="/etc/java-config/vms/ /etc/env.d/java/"
30java-finalclasspath
----------------------------------------
CLASSPATH=.:/opt/sun-java3d-bin/lib/ext/j3dcore.jar:/opt/sun-java3d-bin/lib/ext/j3dutils.jar:/opt/sun-java3d-bin/lib/ext/vecmath.jar
In diesem Verzeichnis /etc/env.d/ befindet sich noch ein weiteres Verzeichnis "java", das folgende Dateie beinhaltet:
20sun-jdk-1.4.2.13
----------------------------------------
VERSION="Sun JDK 1.4.2.13"
JAVA_HOME=/opt/sun-jdk-1.4.2.13
JDK_HOME=/opt/sun-jdk-1.4.2.13
JAVAC=${JAVA_HOME}/bin/javac
PATH="${JAVA_HOME}/bin:${JAVA_HOME}/jre/bin:${JAVA_HOME}/jre/javaws"
ROOTPATH="${JAVA_HOME}/bin:${JAVA_HOME}/jre/bin:${JAVA_HOME}/jre/javaws"
LDPATH="${JAVA_HOME}/jre/lib/i386/:${JAVA_HOME}/jre/lib/i386/native_threads/:${JAVA_HOME}/jre/lib/i386/classic/:${JAVA_HOME}/jre/lib/i386/server/"
MANPATH="/opt/sun-jdk-1.4.2.13/man"
GENERATION="2"
ENV_VARS="JAVA_HOME JDK_HOME JAVAC PATH ROOTPATH LDPATH MANPATH"
VMHANDLE="sun-jdk-1.4"
Irgendwoher muss doch Java die Information bekommen, dass /opt/sun-jdk-1.5.0.08 das "richtige" Verzeichnis ist, aber woher tut es das?
java -version gibt ebenfalls folgendes aus:
java version "1.5.0_08"
Java(TM) 2 Runtime Environment, Standard Edition (build 1.5.0_08-b03)
Java HotSpot(TM) Client VM (build 1.5.0_08-b03, mixed mode)
Markus
Hey,
überprüfe die Variable PATH.
Posting zurück, ist ja schon indirekt gesetzt. Ich geh besser ins Bett.
Hej,
Ich möchte hier mal alle javabezogenen Dateien auflisten
Es sind keine Dateien, sondern die bei dir installierten und am System registrierten Java-Umgebungen.
und würde gerne wissen, wie diese zusammenspielen
Soweit ich das von Ubuntu kenne, gar nicht! Und das ist auch der Gag.
Wie kann es sein, dass java-config -L folgendes ausgibt...
Du weißt ja inzwischen, dass ich von Gentoo kaum einen Blaßen habe, aber der erste Google-Treffer bestätigte meine Vermutung: Die meisten Linuxe sind mit einem Alternativen-System ausgestattet, welches erlaubt verschiedene Versionen von einer Anwendung installiert zu haben und diese verwaltet.
Beispiel: Du benötigst zu Entwicklungszwecken Java 1.6, für den Produktiv-Einsatz aber Java 1.4. Wenn du jetzt beide installiert hast, welche Version wird dann bei dem Aufruf von 'java' gestartet?
Das Alternativen-System kennt alle installierten Versionen und bietet die Möglichkeit im Betrieb zwischen den Versionen umzuschalten. Dabei bedeutet umschalten eben auch nicht nur den link in /usr/bin/ zu setzen, sondern z.B. auch eine ganz andere Konfiguration an Umgebungsvariablen oder anderen Abhängigkeiten zu laden. Und wenn ich das richtig sehe, ist java-config ein solches Alternativen-System speziell für Java.
...aber keine der folgenden Dateien irgendetwas mit Java 1.5 beinhaltet, zumal Java-1.5 tadellos funktioniert?
??? Und was ist das:
The following VMs are available for generation-2:
1) Sun JDK 1.4.2.13 [sun-jdk-1.4]
*) Sun JDK 1.5.0.08 [sun-jdk-1.5]
^---------------------------------- ?
3) Sun JRE 1.5.0.08 [sun-jre-bin-1.5]
^---------------------------------- ?
Vielleicht kurz zu den Bezeichnungen: Das JRE ist das reine Java Runtime Environment, welches die VM und die kompilierten Klassen des RT, eventuell noch Plugins und Hilfsprogramme einschließt. Das JDK hingegen ist das Java Development Kit, welches zusätzlich zur JRE auch die Quellcodes, die Javadocs zur API und weitere Hilfsprogramme wie Compiler und Debugger beinhaltet.
Irgendwoher muss doch Java die Information bekommen, dass /opt/sun-jdk-1.5.0.08 das "richtige" Verzeichnis ist, aber woher tut es das?
*) Sun JDK 1.5.0.08 [sun-jdk-1.5]
^------------------------------------------ !
Beste Grüße
Biesterfeld
Hallo,
??? Und was ist das:
The following VMs are available for generation-2:
1) Sun JDK 1.4.2.13 [sun-jdk-1.4]
*) Sun JDK 1.5.0.08 [sun-jdk-1.5]
^---------------------------------- ?
3) Sun JRE 1.5.0.08 [sun-jre-bin-1.5]
^---------------------------------- ?
Ja, das ist ja auch klar, denn das ist eine Konsolenausgabe der zur Verfügung stehenden JDKs, wobei ich die 1.5er standardmäßig benutze, wie ich auch sagte. Warum man aber in den Dateien davon nichts sieht, ist natürlich die große Preisfrage.
Markus
Hej,
Warum man aber in den Dateien davon nichts sieht, ist natürlich die große Preisfrage.
Achso ... jetzt versteh ich. Naja, da kann ich dir wahrscheinlich auch nicht helfen, da ich kein java-config zur Verfügung habe (schade eigentlich, das sieht ganz nett aus) und wie du weißt für meine JDKs auch keine Paketverwaltung einsetze. Genau aus solchen Gründen.
Mal auf die Suche nach dem JDK gegangen?
locate bin/java | grep 1.5
Beste Grüße
Biesterfeld
Hallo,
Mal auf die Suche nach dem JDK gegangen?
locate bin/java | grep 1.5
locate habe ich zur Zeit nicht im System, bin jetzt auch zu faul es zu "emergen". :) Die Frage hat sich letzendlich durch Jens' Hinweis beantwortet.
Markus
Tach,
Zum einen sind das im Verzeichnis /etc/env.d/ folgende Dateien:
was in /etc/env.d/ steht spielt frühestens eine Rolle, wenn env-update ausgeführt wurde. Die systemweite JVM wird in /etc/profile.d/java-config-2.sh abgelegt, wenn du da reinsiehst, ist die systemweite JVM unter /etc/java-config-2/current-system-vm verlinkt.
mfg
Woodfighter
Hallo,
was in /etc/env.d/ steht spielt frühestens eine Rolle, wenn env-update ausgeführt wurde. Die systemweite JVM wird in /etc/profile.d/java-config-2.sh abgelegt, wenn du da reinsiehst, ist die systemweite JVM unter /etc/java-config-2/current-system-vm verlinkt.
Das env-Update ist mir klar. Bei mir ist in /etc/java-config-2/current-system-vm nichts verlinkt (es sind nur Verzeichnisse), sondern durch deinen Hinweis fand ich gerade heraus, dass das Wechseln zwischen den JDKs mittels java-config dazu führt, dass die Dateien der jeweils ausgewählten VM dort hineinkopiert werden. Jetzt verstehe ich auch, warum das Wechseln zwischen den VMs eine gewisse Verzögerung beim "Umschalten" verursacht. Das ist offensichtlich die Zeit, in der die Daten dort hineinkopiert werden.
Ich habe dies mit ./java -version überprüft, wobei ich mich genau in diesem Verzeichnis befand um ganz sicher zu gehen.
Die Frage ist somit beantwortet.
Markus