externe JARs in die eigene JAR einbinden

mhinz

Mitglied
Hallo,

ist es möglich, dass ich verschiedene JARs, die ich in meinem Projekt eingebunden haben, so in meine eigene JAR zu übernehmen, dass diese auch verwendet werden können. Wir erhalten leider aktuell immer eine Fehlermeldung, dass die entsprechende Klasse nicht vorhanden ist... Dabei liegt diese über die JARs vor...

Vielen Dank für eure Hinweise.
 
Eine .jar innerhalb einer .jar funktioniert nicht so einfach.
Was du machen kannst, wäre die anderen .jar Dateien erst auszupacken und dann alles zusammen wieder in eine große .jar zusammentun.
Unter Umständen ist dies allerdings bei manchen Libraries aufgrund von Lizenzen nicht gestattet.

Was spricht aber eigentlich gegen einen "libs"-Ordner?
 
Joa, Jar in Jar geht prinzipiell schon. Allerdings brauchst du dafür nen speziellen ClassLoader der das managed, von Haus aus geht das nicht.
Eclipse kann das wenn man den Haken "Package required libraries into the generated JAR" setzt. Vielleicht kannst du mal schauen was Eclipse dann daraus baut.
 
Hallo,

wenn ich das richtig sehe, müsste man dann ja immer alle JARs mitliefern, anstelle von einer einzigen JAR. Das finde ich ein wenig unpraktisch... Da wir habe nur eine JAR erzeugen, welche nicht lauffähig ist, sondern in weiteren Projekten eingesetzt werden sollen, ist die eine Antwort mit dem einbinden der JARs leider auch nicht so einfach möglich...
 
Wenn das keine Runnable .jar sein soll, sondern eine Library, dann solltest du einmal deine eigene .jar (ohne abhängende Libraries) anbieten und einmal die abhängenden .jars. In der Tat sollte man diese nicht miteinander verschachteln.
Allerdings wird der Gegenüber nichts mit deiner .jar anfangen können, wenn du die Schubjars (sagt man das so?) geheimhältst.
So machen das zumindest die meisten Libraries, die von einer anderen abhängen.
 
Hallo,

wenn ich das richtig sehe, müsste man dann ja immer alle JARs mitliefern, anstelle von einer einzigen JAR. Das finde ich ein wenig unpraktisch... Da wir habe nur eine JAR erzeugen, welche nicht lauffähig ist, sondern in weiteren Projekten eingesetzt werden sollen, ist die eine Antwort mit dem einbinden der JARs leider auch nicht so einfach möglich...

Genau das ist der Sinn von "Libs" das diese halt jede in ihren eigenen Jars liegen die dann entweder mit ausgeliefert werden oder es wird dem User ein Hinweis gegeben welche Libs er sich zu besorgen hat.
Mal davon abgesehen ist es nicht bei allen Libs gestattet diese einfach mal geheim mit in sein Projekt zu packen. Viele Lizenzen verlangen sogar das ausliefern des Source.
Klar ist es in dem Sinne nichts weiter als alle Libs auspacken und dann in ein riesiges "fettes" JAR zu packen, aber das ist weder Sinn dieser Idee noch ist es attraktiv da ich nicht wirklich ein großes 100MB JAR laden will sondern entsprechend meiner Config nur die nötiges Libs.
Außerdem muss man sich dann auch immer um Versionen und eventuelle Versions-Konflikte kümmern, gerade wenn man selbst eine Lib baut die Abhängigkeiten zu anderen Libs hat die aber im gesamt Projekt vielleicht schon unter anderer Version eingebunden wurden.
 

Zurück
Oben