324 votes

Qu'est-ce qu'un uber jar ?

Je suis en train de lire la documentation de Maven et je suis tombé sur le nom uber-jar .

Que fait un uber-jar et quels sont ses caractéristiques/avantages ?

0 votes

J'ai également vu occasionnellement qu'on l'appelait "onejar" ou "one-jar".

443voto

paxdiablo Points 341644

Über est le mot allemand pour above o over (il s'agit en fait d'un équivalent de l'anglais over ).

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

L'avantage est que vous pouvez distribuer votre uber-jar sans vous soucier de savoir si les dépendances sont installées ou non à la destination, puisque votre uber-jar est en réalité a aucune dépendance.

Toutes les dépendances de votre propre matériel dans l'uber-jar sont également dans cet uber-jar. Comme le sont toutes les dépendances de ces dépendances. Et ainsi de suite.


(a) Je dois probablement ne devrait pas Je n'ai pas besoin d'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, c'est-à-dire un fichier unique qui contient généralement un certain nombre de fichiers de classe Java ainsi que des métadonnées et des ressources associées.

0 votes

C'est é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 de Maven ? Dans ce cas, cela signifie qu'une ou plusieurs choses sont rassemblées et sont accessibles via le jar généré. Malheureusement, cette astuce n'a pas résolu mon problème Maven ;-)

24 votes

BTW, über y over sont le résultat d'un changement vocal systématique en vieux germanique qui peut également être observé dans ces paires de mots : geben/give , leben/live , haben/have , heben/heave et bien d'autres encore.

0 votes

Description très intelligente : Exemple lien

97voto

premraj Points 120

ubar jar est également connu sous le nom de pot de graisse c'est-à-dire jar avec des dépendances.
Il existe trois méthodes courantes pour construire un pot d'uber :

  1. Non nuancé : Décompresse tous les fichiers JAR, puis les reconditionne en un seul JAR. Fonctionne avec le chargeur de classes par défaut de Java. Outils maven-assembly-plugin
  2. Ombragé : Identique à non ombragé, mais renomme (c.-à-d., "ombrager") toutes les données. paquets de toutes les dépendances. Fonctionne avec le chargeur de classes par défaut de Java. Évite certains conflits de versions de dépendances (pas tous). Outils maven-shade-plugin
  3. Le JAR des JAR : Le fichier JAR final contient les autres fichiers JAR incorporés. Cela évite les conflits de version des dépendances. Tous les fichiers de ressources sont préservés. Outils : Exportateur de fichiers JAR pour Eclipse

pour plus

62voto

Jean-Rémy Revy Points 2920

La définition de Paxdiablo est vraiment bonne.

En outre, veuillez considérer que la livraison d'un uber-jar est parfois très utile, si vous voulez vraiment distribuer un logiciel et ne voulez pas que le client télécharge les dépendances par lui-même. En revanche, si leur propre politique ne permet pas l'utilisation d'une bibliothèque, ou s'ils doivent lier des composants supplémentaires (slf4j, librairies compatibles avec le système, librairies spéciales pour l'architecture, ...), cela augmentera probablement les difficultés pour eux.

Vous pouvez le faire :

Une solution plus propre est de fournir leur bibliothèque séparément ; maven-shade-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 beaucoup de bons tutoriels sur ce sujet :)

Pour une configuration plus détaillée, veuillez lire ces rubriques :

12voto

Mark Han Points 366

Les différents noms ne sont que des façons d'emballer les applications Java.

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

Mince - Contient tout ce qui précède PLUS les dépendances directes de votre application (pilotes de db, bibliothèques utilitaires, etc.).

Creux - L'inverse de Thin - Contient seulement les bits nécessaires pour faire fonctionner votre application mais ne contient PAS l'application elle-même. Il s'agit essentiellement d'un "serveur d'applications" préemballé sur lequel vous pouvez déployer votre application ultérieurement, dans le même style que les serveurs d'applications Java EE traditionnels, mais avec des différences importantes.

Fat/Uber - Contient la partie que vous avez littéralement écrite vous-même PLUS les dépendances directes de votre application PLUS les éléments nécessaires pour faire fonctionner votre application "toute seule".

Source : Article de Dzone

Visual representation of JAR types

Reposé de : https://stackoverflow.com/a/57592130/9470346

4voto

Rasheed Points 575

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

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X