Allgemeine Fragen zu Java packages

DarthShader

Erfahrenes Mitglied
Hallo,

ich hätte mal zwei sehr allgemeine Fragen zu Java:

1. Es gibt ja das Package "javax" mit vielen Unterpackages. Nun habe ich gerlernt, dass "javax" für die Extensions steht. Zitat:

The extensions to standard java belong in the javax.* packages. They
are not included in the JDK or JRE. You must download them separately.
They include things like: Servlets and Enterprise JavaBeans, JAF,
JavaMail and Swing.
(Quelle: http://mindprod.com/jgloss/javax.html)

Ist die Aussage "You must download them separately." noch aktuell? Ich meine, wenn ich mit das JDK runterlade, dann sind die javax Packages, vor allem z.B. für Swing, doch schon mit dabei? Hat Sun die irgendwann mit in die JDK und JRE integriert?


2. Dann eine Frage zu Java Bibliotheken:

Ich nehme als Beispiel mal "JDOM". Dort gibt es ja die jdom.jar Datei im Download, sodass man dies in seinen eigenen Projekten verwenden kann. In dem Download ist aber auch ein Verzeichnis "lib", dort sieht man die Abhängigkeiten von JDOM bzw. welche Bibliotheken JDOM selbst verwendet. Aber wieso funktioniert JDOM wenn ich die einzelne jdom.jar verwende? Wieso benötigt es dann diese libs nicht mehr? (die jdom.jar ist ja auch viel kleiner als die jars in JDOM's lib-Verzeichnis).


Ich würde mich sehr freuen, wenn hier jemand etwas Licht ins Dunkel bringen könnte :)


Vielen Dank für Eure Hilfe!
 

Oliver Gierke

Erfahrenes Mitglied
zu 1.: Die Aussage ist veraltet. Die Begründung hast du dir ja quasi schon selbst gegeben. Mit Java 6 sind nochmal reichlich Extensions in den Core gewandert (JAXB usw.).

zu 2.: Das liegt an den sogenannten Runtime Dependencies. Wenn du in Java eine Bibliothek einbindest, werden zur Laufzeit ja nur die Klassen geladen, die dur wirklich benutzt. Wenn du jetzt z.B. JDom dazu verwendest XML Dateien einzulesen, aber nicht zu transformieren, benötigst du JAXP z.B. nicht. Benutzt du allerdings eine Klasse die XML manipuliert wird die JAXP benötigen und du bekommst, wenn du die Drittbibliothek nicht eingebunden hast, eine NoClassDefFoundException oder ClassNotFoundException, je nachdem wie JDom die Klasse laden will.
Wie gesagt, das passiert aber erst, wenn du wirklich eine JDom Klasse nutzt, die die Dependency benötigt.

Gruß
Ollie
 

DarthShader

Erfahrenes Mitglied
Hi,

danke für Deine Antwort - jetzt ist alles klar :)

Eigentlich hätte ich 2. auch selbst wissen müssen. JDOM braucht ja zum Kompilieren alle Abhängigkeiten, aber bei der Verwendung der schon kompilierten Klassen (in der jdom.jar) braucht man ja nur jene, die auch vom ClassLoader geladen werden müssen.

Danke!