Was ist ein Überglas?

251

Ich lese die Maven-Dokumentation und bin auf den Namen 'uber-jar' gestoßen.

Was bedeutet ein Überglas und was sind seine Eigenschaften / Vorteile?

Ashay Batwal
quelle
14
Ein anderer Begriff für ein "Überglas" oder "Superglas" ist "Fettglas". Siehe stackoverflow.com/questions/19150811/… .
Erwaman
Ich habe auch gelegentlich gesehen, dass es "onejar" oder "one-jar" genannt wird.
Jeen Broekstra

Antworten:

357

Überist das deutsche Wort für aboveoder over(es ist tatsächlich mit dem Englischen verwandt over).

In diesem Zusammenhang ist ein Uber-JAR ein "Over-JAR", eine Ebene höher als eine einfache JAR (a) , definiert als eine, die sowohl Ihr Paket als auch alle seine Abhängigkeiten in einer einzigen JAR-Datei enthält. Es kann angenommen werden, dass der Name aus demselben Stall stammt wie Ultrageek, Superman, Hyperraum und Metadaten, die alle ähnliche Bedeutungen von "jenseits des Normalen" haben.

Der Vorteil ist , dass Sie Ihr uber-jar verteilen können und kümmern sich nicht auf allen , ob nicht Abhängigkeiten am Ziel installiert, wie Ihr uber-jar tatsächlich hat keine Abhängigkeiten.

Alle Abhängigkeiten Ihrer eigenen Sachen innerhalb des Überglases befinden sich auch in diesem Überglas. Wie alle Abhängigkeiten dieser Abhängigkeiten. Und so weiter.


(a) Ich sollte einem Java-Entwickler wahrscheinlich nicht erklären müssen, was eine JAR ist, aber ich werde sie der Vollständigkeit halber hinzufügen. Es handelt sich um ein Java-Archiv, im Grunde genommen um eine einzelne Datei, die normalerweise eine Reihe von Java-Klassendateien sowie zugehörige Metadaten und Ressourcen enthält.

paxdiablo
quelle
Seltsam ... Ich bin Deutscher und kenne natürlich das Wort "über" und die Bedeutung. Aber warum wird es hier im Maven-Kontext verwendet? In diesem Fall bedeutet dies, dass ein oder mehrere Dinge zusammengetragen werden und über das generierte Glas zugänglich sind. Leider hat dieser Hinweis mein Maven-Problem nicht gelöst ;-)
Bjoern
7
BTW, überund overist das Ergebnis einer systematischen Vokalverschiebung in altgermanischen , die auch in diesen Wortpaaren beobachtet werden können: geben/give, leben/live, haben/have, heben/heaveund viele mehr.
Biziclop
Sehr kluge Beschreibung: Beispiel Link
Veniamin
Angesichts der Trauer, die ich über den Versuch hatte , Menschen zu erziehen , habe ich beschlossen, nur die Dinge zu entfernen, über die sich einige immer wieder beschweren. Ich definiere uber immer noch im Kontext der deutschen Sprache, aber die (etwas ausführliche) Geschichtsstunde ist jetzt weg :-)
paxdiablo
58

Ubars Glas ist auch bekannt als Fett jar dh Glas mit Abhängigkeiten.
Es gibt drei gängige Methoden zum Aufbau eines Überglases:

  1. Unschattiert: Entpacken Sie alle JAR-Dateien und packen Sie sie erneut in eine einzelne JAR. Funktioniert mit Javas Standardklassenlader. Tools Maven-Assembly-Plugin
  2. Schattiert: Wie nicht schattiert, jedoch alle Pakete aller Abhängigkeiten umbenennen (dh "Schatten") . Funktioniert mit Javas Standardklassenlader. Vermeidet einige (nicht alle) Konflikte mit Abhängigkeitsversionen. Tools Maven-Shade-Plugin
  3. JAR von JARs: Die endgültige JAR-Datei enthält die anderen darin eingebetteten JAR-Dateien. Vermeidet Konflikte mit Abhängigkeitsversionen. Alle Ressourcendateien bleiben erhalten. Tools: Eclipse JAR File Exporter

für mehr

Premraj
quelle
57

Die Paxdiablo-Definition ist wirklich gut.

Darüber hinaus ist es manchmal sehr interessant, ein Uber-JAR zu liefern, wenn Sie wirklich eine Software vertreiben möchten und nicht möchten, dass der Kunde Abhängigkeiten selbst herunterladen muss. Wenn ihre eigene Richtlinie die Verwendung einer Bibliothek nicht zulässt oder wenn sie einige zusätzliche Komponenten (slf4j, systemkonforme Bibliotheken, Arch Specialiez-Bibliotheken, ...) binden müssen, wird dies wahrscheinlich die Schwierigkeiten für sie erhöhen .

Sie können das ausführen:

Eine sauberere Lösung besteht darin, ihre Bibliothek separat bereitzustellen. Das Maven-Shade-Plugin hat dafür einen vorkonfigurierten Deskriptor. Dies ist nicht komplizierter (mit Maven und seinem Plugin).

Eine wirklich gute Lösung ist schließlich die Verwendung eines OSGI-Bundles. Es gibt viele gute Tutorials dazu :)

Lesen Sie zur weiteren Konfiguration die folgenden Themen:

Jean-Rémy Revy
quelle
4

Ein in sich geschlossenes, ausführbares Java-Archiv. Bei WildFly Swarm-Uberjars handelt es sich um eine einzelne JAR-Datei, die Ihre Anwendung, die zur Unterstützung erforderlichen Teile von WildFly, ein internes Maven-Repository mit Abhängigkeiten sowie einen Shim zum Booten aller Elemente enthält. Sieh dir das an

Rasheed
quelle
0

Die verschiedenen Namen sind nur Möglichkeiten zum Packen von Java-Apps.

Dünn - Enthält NUR die Bits, die Sie buchstäblich in Ihren Code-Editor eingeben, und NICHTS anderes.

Dünn - Enthält alle oben genannten PLUS die direkten Abhängigkeiten der App von Ihrer App (DB-Treiber, Dienstprogrammbibliotheken usw.).

Hollow - Die Umkehrung von Thin - Enthält nur die zum Ausführen Ihrer App erforderlichen Bits, enthält jedoch NICHT die App selbst. Grundsätzlich ein vorgefertigter „App-Server“, auf dem Sie Ihre App später bereitstellen können, im gleichen Stil wie herkömmliche Java EE-App-Server, jedoch mit wichtigen Unterschieden.

Fett / Uber - Enthält das Bit Sie sich buchstäblich schreiben PLUS die direkten Abhängigkeiten Ihrer Anwendung PLUS die Bits benötigt , um Ihre App „auf seinem eigenen“ laufen.

Quelle: Artikel von Dzone

Visuelle Darstellung von JAR-Typen

Neu gepostet von: https://stackoverflow.com/a/57592130/9470346

Mark Han
quelle