Uber POT, en un mot court, est un récipient contenant de tout.
Normalement dans Maven, on s'appuie sur la gestion de la dépendance. Un artefact juste contient les classes et/ou des ressources d'elle-même. Maven sera chargé de trouver tous les objets (Pots, etc) que le projet est tributaire, lors de la compilation et de l'exécution des etc.
Un uber-jar est quelque chose que prendre toutes les dépendances, et d'extraire le contenu de l'dépendances et le mettre dans un BOCAL, avec les classes et/ou des ressources du projet lui-même. Grâce à uber-pot, il est facile pour l'exécution, parce que vous aurez besoin d'un seul gros POT au lieu des tonnes de petits Pots pour exécuter votre application. Il a également facilité la distribution dans certains cas.
Juste une note. Évitez d'utiliser uber-jar comme Maven dépendance, comme il est de ruiner la dépendance de la fonction de résolution de Maven. Normalement, nous créer uber-jar seulement pour la finale de l'artefact pour le déploiement réel ou pour la distribution manuelle, mais pas pour la mise à Maven repo.
Mise à jour: je viens de découvrir que je n'ai pas répondu à une partie de la question : "Quel est le point de renommer les ensembles de dépendances?". Juste une brève mise à jour, et j'espère aider les autres.
La création d'uber-pot pour la facilité de déploiement est un cas d'utilisation de l'aide de l'ombre plugin. Il y a aussi un autre cas d'utilisation courants qui impliquent paquet renommer.
Je suis en train d'élaborer Foo
bibliothèque, qui dépend d'une version spécifique (par exemple, 1.0) Bar
bibliothèque. En supposant que je ne peut pas faire usage de l'autre version de l' Bar
lib (parce que l'API de modifier, ou d'autres problèmes techniques, etc). Si je déclare simplement Bar:1.0
comme Foo
s'dépendance Maven, il est possible de tomber sur un problème: Un Qux
projet dépend Foo
, et également Bar:2.0
(et il ne peut pas utiliser Bar:1.0
car Qux
besoin d'utiliser la nouvelle fonctionnalité Bar:2.0
). Alors c'est un dilemme: dois-je utiliser Bar:1.0
( Qux
s'code ne fonctionnera pas) ou Bar:2.0
( Foo
s'code ne fonctionnera pas).
Afin de résoudre ce problème, le développeur de Foo
pouvez choisir d'utiliser l'ombre plugin pour renommer son utilisation de l' Bar
, de sorte que toutes les classes en Bar:1.0
bocal est maintenant intégré dans Foo
pot, et le paquet de l'embedded Bar
classes est modifié à partir d' com.bar
de com.foo.bar
. Ce faisant, Qux
pouvez en toute sécurité dépend Bar:2.0
parce que maintenant, en Foo
n'est plus en fonction Bar
, et c'est à l'aide de sa propre copie de "modifié" Bar
situé dans un autre package.