Eclipse Wie mit Ant build.xml externe Jar´s einbinden?

ghostbuster

Mitglied
Bin fast am verzweifeln : In ein einfaches Eclipse-Projekt, das mit einem Ant build-File (build.xml) kompiliert wird, soll zum Test ein zusätzliches JAR-File eingebunden werden.
Wenn ich das Projekt (nur die Ausgabe von "HelloWorld") ohne die Verwendung zusätzlicher JAR-Files kompiliere, kann ich das erzeugte JAR-File von der Konsole aus mit dem Standardbefehl "java -jar build\jar\HelloWorld.jar" korrekt ausführen.
Wenn eine zusätzlicher Befehl, der ein externes JAR-File benötigt, mit dazu genommen wird, erscheint die Meldung "java.lang.NoClassDefFoundError"
Ich weiss, man muss Manifest-Informationen mit in das erzeugte JAR-File einbinden.
Ich weiss auch, dass es vermutlich daran liegt, dass die externen Jar-Files bei der Ausführung nicht gefunden werden.
Um das Problem zu lösen, habe ich schon mögliche versucht, leider ohne Erfolg.
Hat jemand vielleicht ein kleines Projekt inc. build.xml-File das so was kann als Demo ?
 
Zuletzt bearbeitet von einem Moderator:
Dir ist aber schon klar das du ohne Tricks keine jars in jars verpacken kannst? Die externen Bibliotheken müssen zum Start also ebenfalls bereitstehen. Der Pfad zu diesen Bibliotheken muss im Manifest hinterlegt sein, das funktioniert über den Jar Task von Ant.
 
Die externen JAR´s werden mitgeliefert und liegen in einem eigenen Verzeichnis des Projektes.
Der Pfad zu ihnen soll aber nicht von Eclipse, sondern mit der build.xml in das eigene JAR-File eingetragen werden. Leider funktioniert das aber nicht.
 
und du hast das build.xml NICHT in deinem jar ?

also zb die Struktur:

Code:
meinProjekt
 - build.xml
 - lib
    - meineLib.jar
    - dieandere.jar
    - nochwasfremdes.jar
?

dann Java Task vorbei schauen - da steht alles
 
Jetzt klappt es, das Verzeichnis mit den externen JAR´s war in der Directorystruktur um eine Stufe zu weit unten, daher wurden die externen JAR´s nicht gefunden.
 
Entweder du gibst die libs mit im manifest an:
[XML]
<jar destfile="${build.dist}/${build.distname}-xmlclient.jar" basedir="${build.compile.java.xmlclient}">
<manifest>
<attribute name="Built-By" value="${user.name}" />
<attribute name="Package" value="${package}" />
<attribute name="Extension-Name" value="${name}" />
<attribute name="Specification-Title" value="${title}" />
<attribute name="Implementation-Version" value="${version}" />
<attribute name="Implementation-Vendor" value="${vendor}" />
<attribute name="Class-Path" value="${manifest.class.path}"/>
<attribute name="Main-Class" value="${main.class}"/>

</manifest>
</jar>
[/XML]

Bei vielen libs ist es natürlich einfacher sich das generieren zu lassen:

ManifestClassPath Ant Task


Oder aber du gibst den classpath beim java -jar mit: java -cp meinlib.jar -jar mein.jar

EDIT: Zu langsam - aber evtl noch ein Blick für dich wert 😉
 

Zurück
Oben