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.
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:
Foo
.Bar
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ù