380 Stimmen

Was ist ein Uber-Glas?

Ich lese gerade die Maven-Dokumentation und bin auf den Namen uber-jar .

Was bedeutet ein uber-jar und was sind seine Merkmale/Vorteile?

512voto

paxdiablo Punkte 809679

Über ist das deutsche Wort für above o over (tatsächlich ist es verwandt mit dem englischen over ).

In diesem Zusammenhang ist ein Uber-Jar also ein "Über-Jar", eine Stufe höher als ein einfaches JAR (a) definiert als eines, das sowohl Ihr Paket y alle seine Abhängigkeiten in einer einzigen JAR-Datei. Der Name stammt vermutlich aus dem gleichen Stall wie Ultrageek, Superman, Hyperspace und Metadata, die alle eine ähnliche Bedeutung haben wie "jenseits des Normalen".

Der Vorteil ist, dass Sie Ihr uber-jar verteilen können und sich nicht darum kümmern müssen, ob die Abhängigkeiten am Zielort installiert sind oder nicht, da Ihr uber-jar tatsächlich hat keine Abhängigkeiten.

Alle Abhängigkeiten von Ihren eigenen Sachen innerhalb des uber-jar sind auch in diesem Uber-Glas. Das Gleiche gilt für alle Abhängigkeiten von diesen Abhängigkeiten. Und so weiter.


(a) Ich habe wahrscheinlich sollte nicht einem Java-Entwickler nicht erklären müssen, was ein JAR ist, aber ich füge es der Vollständigkeit halber ein. Es ist ein Java-Archiv, im Grunde eine einzelne Datei, die in der Regel eine Reihe von Java-Klassendateien zusammen mit den zugehörigen Metadaten und Ressourcen enthält.

124voto

Premraj Punkte 65511

ubar jar ist auch bekannt als Fettnäpfchen d.h. jar mit Abhängigkeiten.
Es gibt drei gängige Methoden, um ein Uber-Glas zu konstruieren:

  1. Unbeschattet: Entpacken Sie alle JAR-Dateien und packen Sie sie dann wieder in ein einziges JAR. Funktioniert mit dem Standard-Klassenlader von Java. Werkzeuge maven-assembly-plugin
  2. Schattiert: Wie nicht schattiert, aber Umbenennung (d. h. "schattieren") aller Pakete aller Abhängigkeiten. Funktioniert mit dem Standard-Klassenlader von Java. Vermeidet einige (nicht alle) Versionskonflikte bei Abhängigkeiten. Werkzeuge maven-shade-plugin
  3. JAR der JARs: Die endgültige JAR-Datei enthält die anderen darin eingebetteten JAR-Dateien. Dadurch werden Versionskonflikte bei den Abhängigkeiten vermieden. Alle Ressourcendateien bleiben erhalten. Werkzeuge: Eclipse JAR-Datei-Exporter

für mehr

64voto

Jean-Rémy Revy Punkte 5469

Die Definition von Paxdiablo ist wirklich gut.

Außerdem sollte man bedenken, dass die Auslieferung eines Uber-Jars manchmal ganz nützlich ist, wenn man eine Software wirklich verteilen will und nicht möchte, dass die Kunden die Abhängigkeiten selbst herunterladen. Ein Nachteil ist, dass, wenn die eigenen Richtlinien die Verwendung einiger Bibliotheken nicht zulassen, oder wenn sie einige zusätzliche Komponenten (slf4j, systemkonforme Bibliotheken, Arch-Specialiez-Bibliotheken, ...) binden müssen, dies wahrscheinlich zu größeren Schwierigkeiten für sie führt.

Das können Sie tun:

Eine sauberere Lösung ist es, ihre Bibliothek separat bereitzustellen; maven-shade-plugin hat dafür einen vorkonfigurierten Deskriptor. Dies ist nicht komplizierter zu tun (mit Maven und seinem Plugin).

Eine wirklich gute Lösung ist schließlich die Verwendung eines OSGI-Bündels. Dazu gibt es viele gute Tutorials :)

Zur weiteren Konfiguration lesen Sie bitte diese Themen:

24voto

Mark Han Punkte 2465

Die verschiedenen Namen sind nur eine Art der Verpackung von Java-Anwendungen.

Skinny - Enthält NUR die Teile, die Sie buchstäblich in Ihren Code-Editor eingeben, und NICHTS anderes.

Dünn - Enthält alle oben genannten Elemente sowie die direkten Abhängigkeiten Ihrer Anwendung (db-Treiber, Dienstprogramm-Bibliotheken usw.).

Hohle - Das Gegenteil von Thin - Enthält nur die Bits, die zum Ausführen Ihrer Anwendung benötigt werden, aber NICHT die Anwendung selbst. Im Grunde ein vorgefertigter "App-Server", auf dem Sie Ihre App später bereitstellen können, im gleichen Stil wie traditionelle Java EE-App-Server, aber mit wichtigen Unterschieden.

Fett/Uber - Enthält den Teil, den Sie buchstäblich selbst schreiben PLUS die direkten Abhängigkeiten Ihrer Anwendung PLUS die Bits, die benötigt werden, um Ihre Anwendung "allein" auszuführen.

Quelle: Artikel von Dzone

Visual representation of JAR types

Nachgetragen von: https://stackoverflow.com/a/57592130/9470346

4voto

Rasheed Punkte 891

Ein in sich geschlossenes, ausführbares Java-Archiv. Im Fall von WildFly Swarm uberjars handelt es sich um eine einzelne .jar-Datei, die Ihre Anwendung, die für ihre Unterstützung erforderlichen Teile von WildFly, ein internes Maven-Repository mit Abhängigkeiten sowie ein Shim zum Booten des Ganzen enthält. siehe dies

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X