web-dev-qa-db-fra.com

Qu'est-ce qu'un pot ombragé? Et quelle est la différence / similitude entre le pot Uber et le pot ombré?

Pouvez-vous s'il vous plaît aider à expliquer ce qu'est un pot ombragé et comment est le maven-shade-plugin utile? Aussi qu'est-ce qu'un pot uber.

12
user3478709

Je vais expliquer ce qu'est un uber JAR en premier car cela sous-tend l'explication de l'ombrage.

ber JAR

Un uber JAR est un JAR qui contient le contenu de plusieurs JAR (ou, plus rarement, de plusieurs autres JAR eux-mêmes)

Votre application utilisera presque certainement d'autres packages et ces packages peuvent être fournis sous forme de fichiers JAR. Lorsque vous utilisez Maven, ces dépendances s'exprimeraient comme suit:

<dependency>
    <groupId>...</groupId>
    <artifactId>...</artifactId>
    <version>...</version>
</dependency>

Au moment de l'exécution, votre application s'attendra à trouver les classes contenues dans ce JAR sur son chemin de classe.

Plutôt que d'expédier chacun de ces fichiers JAR dépendants avec votre application, vous pouvez créer un fichier JAR uber qui contient toutes les classes, etc. à partir de ces fichiers JAR dépendants, puis exécuter simplement votre application à partir de ce fichier JAR uber.

ombrage

L'ombrage permet de créer un uber JAR et de renommer les packages qu'il contient. Si votre uber JAR est susceptible d'être utilisé comme dépendance dans une autre application, il existe un risque que les versions des classes dépendantes de l'uber JAR se heurtent aux versions de ces mêmes dépendances dans cette autre application. L'ombrage permet d'éviter tout problème de ce type en renommant les packages dans le uber JAR.

Par exemple:

  1. Vous créez un JAR uber qui contient la v1.0.0 de la bibliothèque Foo.
  2. Quelqu'un d'autre utilise votre uber JAR dans son application, Bar
  3. L'application Bar a sa propre dépendance sur Foo mais sur la v1.2.0 de cette bibliothèque.

Maintenant, s'il y a un conflit entre les versions 1.0.0 et 1.2.0 de Foo, nous pouvons avoir un problème car le propriétaire de Bar ne peut pas compter sur celle qui sera chargée, donc soit leur code se comportera mal ou votre code - lorsqu'il s'exécutera dans leur application - se comportera mal.

L'ombrage permet d'éviter des problèmes comme celui-ci et permet également au fournisseur de Foo d'être explicite sur les versions des bibliothèques dépendantes qu'il utilise.

Le maven-shade-plugin vous permet (a) de créer un JAR uber et (b) de masquer son contenu.

Résumé


La création d'un uber JAR est une technique utile pour simplifier votre processus de déploiement.

L'ombrage est une extension de l'idée uber JAR qui est généralement limitée aux cas d'utilisation où

  • Le JAR est une bibliothèque à utiliser dans une autre application/bibliothèque
  • Les auteurs du JAR veulent être sûrs que les dépendances utilisées par le JAR sont sous leur contrôle
  • Les auteurs du JAR veulent éviter les problèmes de "conflit de version" pour toutes les applications/bibliothèques utilisant le JAR
30
glytching