Nicht ausführbares JAR, externe jars mit einbinden

  • Themenstarter Themenstarter Gelöschtes Mitglied 56712
  • Beginndatum Beginndatum
G

Gelöschtes Mitglied 56712

Gast
Guten Tag Profis
Habe eine Hauptanwendung in diese wird per ClassLoader ein von mir erstelltes jar (meinJar.jar) geladen.

meinJar.jar enthält Importe wie z.B. "fontbox-2.0.2.jar"

Meine Frage:
Wie kann ich "fontbox-2.0.2.jar" dem meinJar.jar mitgeben, ohne es in der Hauptanwendung erneut zu importieren?

Die "fontbox-2.0.2.jar" wird ausschliesslich im JAR meinJar.jar verwendet!

Wie muss ich da vorgehen?

Vielen Dank
Richi
 
Die Frage ist, was du genau machst.

Eine einfache Antwort wäre: wenn du die Maven Repositories nutzt, dann veröffentlichst du neben der jar Datei auch die Beschreibung und jeder, dein Projekt als Abhängigkeit einbindet (Maven, Gradle, Ivy), der kriegt automatisch auch die transitiven Abhängigkeiten.

Wenn du diese Automatik nicht willst und andere sollen nur das jar einbinden:
  • du kannst eine fat jar bauen (bei Maven z.B. über das Shade Plugin). Dann wird nur die jar gebraucht, denn da ist dann alles drin.
  • Du kannst mit der jar auch alle Abhängigkeiten mitgeben. Dann hast du im Manifest deiner jar die Abhängigkeiten beschrieben … aber du lieferst die Abhängigkeiten dann mit.

Das wären so die üblichen Wege aus meiner Sicht.
 
Habe eine Hauptanwendung in diese wird per ClassLoader ein von mir erstelltes jar (meinJar.jar) geladen.

meinJar.jar enthält Importe wie z.B. "fontbox-2.0.2.jar"

Meine Frage:
Wie kann ich "fontbox-2.0.2.jar" dem meinJar.jar mitgeben, ohne es in der Hauptanwendung erneut zu importieren?

Die "fontbox-2.0.2.jar" wird ausschliesslich im JAR meinJar.jar verwendet!
Mal angenommen du redest hier wirklcih von der Laufzeit, dann wuerde es reichen fontbox-2.0.2.jar einfach in dem selben ClassLoader zu laden wie meinJar.jar.
 
Vielen Dank!
Auf Grund Eurer Kommentare habe ich mein Problem nicht richtig dargestellt.

Habe ein JInternalFrame (meinJar.jar) erstellt, welches "fontbox-2.0.2.jar" benötigt und welches ich via externe Jars in (meinJar.jar) importiert habe.

In der Hauptanwendung importiere ich (meinJar.jar).
Wenn ich die Hauptanwendung starte kommt da wo ich (meinJar.jar) aufrufe eine Fehlermeldung "fontbox-2.0.2.jar" wurder nicht gefunden.

So...
Wenn ich jetzt in der Hauptanwendung "fontbox-2.0.2.jar" auch importiere gibt es keine Fehlermeldung.

Mein Wunsch wäre, dass ich "fontbox-2.0.2.jar" meinem Jar (meinJar.jar) mitgeben könnte und es nicht mehr in der Hauptanwendung nochmals als externes JAR deklarieren müsste.

Wenn ich die Hauptanwendung als Ausführbares JAR exportiere, werden die Extenen Jars eingebunden.
Wie kann mann Externe JARs in einem nicht ausführbaren JAR mit Exportieren?

Je nach Benutzer wird (meinJar.jar) NICHT benötigt und somit müsste "fontbox-2.0.2.jar" auch nicht vorhanden sein.

Geht sowas überhaupt?

Vielen Dank.

PS:
Die Hauptanwendung exportiere ich mit "Copy required libraries into a sub-folder..."
Für den Export von meinJar.jar habe ich die Auswahl: "Extract required libraries into generated JAR" nicht.
Das würde ja dann dem meinJar.jar die required ("fontbox-2.0.2.jar") librarie einbinden...

Wie könnte man das Umsetzen?
@KonradN
Projekt als Abhängigkeit einbindet (Maven, Gradle, Ivy)
Wie geht das? Gibts da eine, für mich (ohne Englisch Kenntnisse) irgendwo eine Anleitung?
 
Zuletzt bearbeitet von einem Moderator:
Wenn ich alle externen JARs für meine Module (20 externe Module welche Benutzer abhängig geladen werden) deren Externe JARs schon in der Hauptanwendung importieren müsste, wird das Ausführbare Programm (JAR) extrem gross.

Die Hauptanwendung wäre eigentlich nur +/- 180MB gross.
Wenn ich aber alle benötigten externe JARs der 20 Module importieren muss, wird sie über 600MB bis 1.5GB gross.

Die 20 Module werden vom Server nur geladen (abhängig seiner Rechte) wenn der angemeldete Benutzer sie auch nutzen darf.

Ja, ja ich weiss 600MB sind für heutige Geräte kein Problem.
Es werden aber Arduino dummys verwendet und dann wäre eine kleine Speicherplatz verwendung schon angebracht.
 
Mein Wunsch wäre, dass ich "fontbox-2.0.2.jar" meinem Jar (meinJar.jar) mitgeben könnte und es nicht mehr in der Hauptanwendung nochmals als externes JAR deklarieren müsste.

Wenn ich die Hauptanwendung als Ausführbares JAR exportiere, werden die Extenen Jars eingebunden.
Wie kann mann Externe JARs in einem nicht ausführbaren JAR mit Exportieren?
Unter dem Strich geht es genau so. Das ausführbar oder eben nicht ausführbar ist ja nur ein Eintrag im Manifest.

Das ist also lediglich ein Problem des verwendeten Frontends … was nutzt du da? Eclipse oder so?

Ich nutze soweit möglich immer Maven und da wäre es das Shade Plugin, dass ich für sogenannte fat jar Dateien nutze.

Dirty Hack: mach deine jar doch einfach ausführbar … das ändert ja nichts an der Nutzbarkeit als Library …
 

Zurück
Oben