# Libraries in einem Jar-File



## dadevelopa (28. Oktober 2005)

Hallo zusammen, 
ich habe ein kleines Problem mit einem Jar-File.
Ich habe einen kleinen Server geschrieben, den ich gerne via Jar File verpacken würde um ihn so einfach zu starten.
Dieser Server verwendet dom4j, und hier tritt wohl auch das Problem auf. Wenn ich den Server via Eclipse starte, funktioniert alles wunderbar.
Das Exportierte Jar-File funktioniert jedoch nicht, da irgendwie die gewünschten Klasse nicht gefunden werden. Es tritt folgende Fehlermeldung auf:

```
Exception in thread "main" java.lang.NoClassDefFoundError: /org/dom4j/DocumentException
```

Könnt ihr mir bei diesem Problem wohl helfen?


----------



## matdacat (28. Oktober 2005)

Du musst den classpath-Parameter beim Starten auf den Pfad des verwendeten JAR-File setzen.


----------



## dadevelopa (28. Oktober 2005)

Hab ich gemacht, jedoch scheint es trozdem nicht zu funktionieren. 
Könnte es damit zusammenhängen, dass ich in Eclipse die Java-Version 1.4.2_08 verwende, in meiner sonstigen Umgebung jedoch die Version 1.5?


----------



## Thomas Darimont (28. Oktober 2005)

Hallo!

   Schau mal hier:
http://www.tutorials.de/tutorials212854.html&highlight=jar

   Beispiel:
   Das ausfuehrbare foo.jar enthaelt:
   die Bibliotheken barA.jar und barB.jar, und sonstige Klassen/Resourcen der Anwendung.

   Um nun innerhalb von foo.jar auf Klassen innerhalb von barA.jar und barB.jar zugreiffen zu koennen, brauchst du entweder:
   1) Einen eigenen ClassLoader der Classen auch in genesteten Jar-Archiven (Jar in Jar findet)
   ODER:
 2) Beim bootstrapping der Anwendungen entpackst du die enthaltenen jar Dateien in ein temporaeres Verzeichnis und fuegst es dynamisch zum Anwendungs-ClassPath hinzu.
   ODER:
 3) Du verwendest einen Mechanismus wie ihn beispielsweise das FatJar Eclipse Plugin bietet und entpackst alle Klassen in ein Verzeichnis und machst dann daraus ein jar (ohne jars im jar).
  ODER:
 4) Du entpackst die genesteten JARs und legst sie deiner Anwendung in einem entsprechenden Verzeichnis ab (z.Bsp. lib relativ zu der Anwendungs.jar).
  Dann nimmst du alle JARs dieses Lib Verzeichnis explizit in den ClassPath auf:
  java -cp ./lib/barA.jar;./lib/barB.jar -jar foo.jar

   Gruss Tom


----------

