Qu'est-ce qu'un pot Uber?

251

Je lis la documentation Maven et je suis tombé sur le nom «uber-jar».

Que signifie un uber-jar et quelles sont ses caractéristiques / avantages?

Ashay Batwal
la source
14
Un autre terme pour un "pot uber" ou "super pot" est "pot gras". Voir stackoverflow.com/questions/19150811/… .
erwaman
Je l'ai aussi parfois vu appelé "onejar" ou "one-jar".
Jeen Broekstra

Réponses:

357

Überest le mot allemand pour aboveou over(il est en fait apparenté à l'anglais over).

Par conséquent, dans ce contexte, un uber-jar est un "over-jar", un niveau supérieur à un simple JAR (a) , défini comme celui qui contient à la fois votre package et toutes ses dépendances dans un seul fichier JAR. On peut penser que le nom vient de la même écurie que ultrageek, superman, hyperespace et métadonnées, qui ont tous des significations similaires "au-delà de la normale".

L'avantage est que vous pouvez distribuer votre uber-jar sans vous soucier du fait que les dépendances soient installées ou non à la destination, car votre uber-jar n'a en fait aucune dépendance.

Toutes les dépendances de vos propres objets dans le uber-jar se trouvent également dans cet uber-jar. Comme toutes les dépendances de ces dépendances. Etc.


(a) Je ne devrais probablement pas avoir à expliquer ce qu'est un JAR à un développeur Java mais je vais l'inclure pour être complet. Il s'agit d'une archive Java, essentiellement un fichier unique qui contient généralement un certain nombre de fichiers de classe Java ainsi que les métadonnées et les ressources associées.

paxdiablo
la source
Étrange ... Je suis allemand et je connais bien sûr le mot "über" et sa signification. Mais pourquoi est-il utilisé ici dans le contexte Maven? Dans ce cas, cela signifie qu'une ou plusieurs choses sont rassemblées et sont accessibles via le pot généré. Malheureusement, cet indice n'a pas résolu mon problème de maven ;-)
Bjoern
7
BTW, überet oversont le résultat d'un changement vocal systématique dans le Vieux - germanique qui peut également être observée dans ces paires de mots: geben/give, leben/live, haben/have, heben/heaveet beaucoup d' autres.
biziclop
Description très intelligente: Exemple de lien
Veniamin
Étant donné le chagrin que j'ai éprouvé en essayant d' éduquer les gens, j'ai décidé de supprimer tout ce dont certains se plaignent. Je définis toujours uber dans le contexte de la langue allemande mais la leçon d'histoire (quelque peu verbeuse) a maintenant disparu :-)
paxdiablo
58

ubar jar est également connu sous le nom de fat jar ie pot avec dépendances.
Il existe trois méthodes courantes pour construire un pot Uber:

  1. Non ombré: décompressez tous les fichiers JAR, puis reconditionnez-les dans un seul JAR. Fonctionne avec le chargeur de classe par défaut de Java. Outils maven-assembly-plugin
  2. Ombré: Identique à non ombré , mais renommez (c'est-à-dire "ombre") tous les packages de toutes les dépendances. Fonctionne avec le chargeur de classe par défaut de Java. Évite certains (pas tous) conflits de versions de dépendances. Outils maven-shadow-plugin
  3. JAR de JAR: le fichier JAR final contient les autres fichiers JAR intégrés. Évite les conflits de version de dépendance. Tous les fichiers de ressources sont conservés. Outils: Exportateur de fichiers JAR Eclipse

pour plus

Premraj
la source
57

La définition de Paxdiablo est vraiment bonne.

De plus, veuillez considérer la livraison d'un uber-jar est parfois très intéressante, si vous voulez vraiment distribuer un logiciel et ne voulez pas que le client doive télécharger les dépendances par lui-même. Comme inconvénient, si leur propre politique n'autorise pas l'utilisation de certaines bibliothèques, ou s'ils doivent lier certains composants supplémentaires (slf4j, bibliothèques conformes au système, bibliothèques arch specialiez, ...) cela leur augmentera probablement les difficultés .

Vous pouvez effectuer cela:

Une solution plus propre consiste à fournir sa bibliothèque séparément; maven-shadow-plugin a un descripteur préconfiguré pour cela. Ce n'est pas plus compliqué à faire (avec maven et son plugin).

Enfin, une très bonne solution consiste à utiliser un bundle OSGI. Il y a plein de bons tutoriels là-dessus :)

Pour plus de configuration, veuillez lire ces rubriques:

Jean-Rémy Revy
la source
4

Une archive Java exécutable autonome. Dans le cas des uberjars WildFly Swarm, il s'agit d'un seul fichier .jar contenant votre application, les parties de WildFly nécessaires pour la prendre en charge, un référentiel interne Maven de dépendances, plus un shim pour tout amorcer. regarde ça

Rasheed
la source
0

Les différents noms ne sont que des moyens de créer des applications Java.

Skinny - Contient UNIQUEMENT les bits que vous tapez littéralement dans votre éditeur de code, et RIEN d'autre.

Mince - Contient tous les éléments ci-dessus PLUS les dépendances directes de votre application (pilotes db, bibliothèques d'utilitaires, etc.).

Hollow - L'inverse de Thin - Contient uniquement les bits nécessaires pour exécuter votre application mais ne contient PAS l'application elle-même. Fondamentalement, un «serveur d'applications» préemballé sur lequel vous pouvez ensuite déployer votre application, dans le même style que les serveurs d'applications Java EE traditionnels, mais avec des différences importantes.

Fat / Uber - Contient le peu que vous vous écrivez littéralement PLUS les dépendances directes de votre application PLUS les bits nécessaires pour exécuter votre application «seule».

Source: article de Dzone

Représentation visuelle des types JAR

Republié à partir de: https://stackoverflow.com/a/57592130/9470346

Mark Han
la source