[Java]Bedeutung von jar-files

vox24

Cadet 3rd Year
Registriert
Nov. 2005
Beiträge
44
Hi,
habe eine allg. Verständnisfrage zu jar-files (z.B in Eclipse). Jar-files aus denen ich etwas benutzen will müssen ja im classpath eingebunden werden (z.B. log4j.jar). Wird dann beim compilieren der Code aus den Jar-files den ich benutze direkt in meinen Code mit eingebunden? Oder braucht Eclipse nur die jar-files um die korrekte Syntax usw. zu überprüfen?
Wenn ich z.B. ein SessionBean auf einem AppServer deploy muß ich ja auch die jar-files mitgeben. Braucht er die dann erst bei der Laufzeit?
Ich kann mit den ganzen Sachen schon umgehen, mich interessiert aber auch was dahinter steht, also für alle Antworten bin ich dankbar.
mfg vox24
 
Der Code wird nicht mit eingebunden, sondern ganz im Sinne der Wiederverwendbarkeit in der objektorientierten Programmierung genutzt. In den Code wird davon nur eingebunden, was du selbst hineinschreibst (Importbefehle für die Bibliotheken, deren bereitgestellte Methoden usw). Die Jars werden immer dann benötigt, wenn sie in irgendwie abgefragt werden (Kompilieren von Quellcode oder beim Aufruf einer JSP etc.).
 
Ein jar-File hat aber auch noch andere Anwendungsgebiete. Wenn du zum Beispiel eine Java-Anwendung weitergeben willst, dann kannst du das in Form eines jaes machen. Hier wird dann in das jar ein Manifest eingebettet, in Angaben stehen wie zum Beispiel in welcher Klasse im jar-File die main()-Methode zu finden ist, die aufgerufen werden soll, oder welche externen jars für die Anwendung als (zusätzlicher) classpath benutzt werden sollen.
 
Kannst dir ein JAR file auch wie eine dll datei vorstellen, also eine lib die irgendwelche methoden bereit stellt (und log4j war da schon ein sehr gutes Beispiel)

Noch eine kleine nebensache, beim kompilen könnte der code gar nicht in dein code eingebunden werden da er normalerweise nicht in dem JAR file drin steckt :-)
 
Die jars haben allerdings gegenüber dll's noch einen Vorzug: Java behandelt den Inhalt von jar-Files wie Verzeichnisse im Dateisystem, das heisst, du kannst mit Pfaden auf einzelne Dateien im jar-File zugreifen, zum Beispiel um Konfigurationsdateien einzulesen, die der Benutzer im Normalfall nicht zu sehen bekommt (außer er öffnet das jar-File mit einem Packprogramm, denn prinzipiell sind die jars nichts anderes als umbenannte Zip-Dateien).
 
Hi,
danke erstmal für die Antworten! Also kann ich mir das so vorstellen das mein Programm so wie es ist compiliert wird, und wenn ich eine Funktion aus z.B. log4j aufrufe zur Laufzeit dann auf das jar-file zugegriffen wird?!? Hab ich das richtig verstanden?

@Scheuch: deine Erklärung paßt aber nicht zum meinem Verständnis. Du schreibst als Bsp Kompilieren von Quellcode. Dann würde ja das jar nicht erst zur Laufzeit verwendet werden sondern mit in den Bytecode hineincompiliert werden.
 
Der Compiler muss wissen, was er mit den Aufrufen anfangen soll, also z.B. welche Methode welche Parameter verwendet. Dazu braucht er das jar-File. Beim Ausführen wird dann das jar-File für den Inhalt der Methoden verwendet.
 
Die Jar-Datei muss beim Kompilieren im Klassenpfad sein, sonst gibts bei Verwendung einer Methode aus der betroffenen Jar-Datei einen Fehler ... und du kommst gar nicht erst zum Ausführen der Anwendung.;)
 
Zurück
Oben