10
votes

Créer des groupes de dépendance dans Maven pour la réutilisation - y compris les dépendances "fournies"

Je suis nouveau à Maven et je confie mon premier projet Maven. Je crée également des atouts mavennes sous la forme de certains POMS qui peuvent être hérités ou utilisés comme dépendances dans tous les projets futurs. Je souhaite collecter des dépendances ensemble et pour pouvoir les ajouter sélectivement à un projet au besoin.

J'ai lu Cet article sur les meilleures pratiques du POM. J'aime l'idée de regrouper les dépendances connexes dans les POMS, puis d'ajouter le POM comme une dépendance à un projet au besoin. Cette approche fonctionne bien pour compiler des dépendances scopées. Cependant, il échoue pour condition que les dépendances transitives sont fournies, elles sont omises.

Voici un exemple de ce que je veux dire: permet de dire que je regroupe des dépendances Web pour mes projets dans un site Web pom.xml. Celles-ci incluent compile Cadres-cadres de ressort spécifiés et également un fourni javaee scopé one: xxx

i puis ajoutez ce pom comme Une dépendance dans un autre projet: xxx

Les dépendances dans mvn-web-deps deviennent maintenant transitif . Étant donné que la référence de dépendance ci-dessus est compile scopé, le fourni la dépendance transitive est omis.

Je veux éviter de les ajouter à la dépendance < / Code> Section d'un parent Comme il ne peut y avoir qu'un parent et qu'un projet ne peut avoir besoin que de certains de ces groupes de dépendance, pas tous. Je peux peut-être les ajouter à la section de dépendance , mais je devrai redéclaré chaque dépendance (sans la version) dans chaque projet enfant.

Quelle est la bonne / meilleure façon de regrouper des dépendances tout en évitant les problèmes tels que ci-dessus?


1 commentaires

Cela ne fonctionne pas pour même compiler scopé


3 Réponses :


6
votes

La réponse courte à votre question est que vous ne devriez inclure que des dépendances «fournies» localement lorsque le code le requiert de compiler, mais pas dans la parente pom.xml ou d'autres structures. Indiquant que vous avez une dépendance «fournie» dans Global Pom.xML n'est pas sensée pour Maven, car elle n'en a pas besoin pour compiler dans de tels pom.xml.

Voici la longue réponse:

Quand j'ai commencé à utiliser Maven, j'ai eu la même idée d'essayer de regrouper des artefacts et des dépendances dans des modules POM.XML en espérant qu'ils seraient utiles à l'avenir. Maintenant que j'ai un peu plus d'expérience, je dois comprendre que c'est une perte de temps totale. Pour moi, c'était une forme de sur-ingénierie.

J'ai appris à scinder mes grands projets en modules distincts, chacun dans son propre référentiel de subversion. Je comprends des dépendances si nécessaire pour chaque module local de leur pom.xml. Je libère des balises de versions de chaque module car je codage et aussi nécessaire (c'est-à-dire lorsqu'il est testé et stable).

Je construis mes grands projets en créant un projet maven séparé avec sa propre pom.xml et en important mes modules comme dépendances. De temps en temps, je mettez à jour la version du module dans la dépendance lorsque j'ai effectué une libération. Ensuite, j'ai laissé Maven faire le travail de tirer tout ce qu'il faut tirer, de manière transitée, en cas de compilation / de libération du grand projet.

Maven permet toutes sortes de constructions complexes et de hiérarchies entre POM.XMLS, mais IMHO Cette fonctionnalité crée des dégâts et des complexités inutiles. Jusqu'à présent, cela ne s'est pas révélé être un véritable avantage pour moi. Au début, j'espérais que la compilation d'un pom.xml compilerait correctement le reste de manière en cascade. J'ai eu un certain résultat, mais quel gâchis à maintenir dans tous les pom.xml globaux.

libérer les artefacts de mon module séparément et construire mon projet sur ces communiqués m'a sauvé beaucoup de temps que je ne peux que le recommander. Au total, j'ai moins de pom.xml à entretenir et ils sont également moins complexes. Pour le même résultat final ...

Donc, si votre seule raison de la construction de la construction mondiale / structurelle pom.xml est un espoir de gagner du temps, je vous recommande d'abandonner cette idée ... Code séparé dans des projets distincts, relâchez puis compilez globalement.


2 commentaires

Merci pour la réponse. Peut-être que je n'ai pas fait ma motivation pour utiliser de telles dépendances groupées très claires. Je brise également mes projets dans les modules. Ce que je veux parvenir au regroupement des dépendances liés à la réunion, c'est la capacité de les gérer à un endroit unique et de les réutiliser à travers des projets par simple référence. suite ..


J'ai un ensemble de technologies plus ou moins fixes que j'utilise pour développer des projets Web, par exemple à mon organisation. Tous les projets Web ont donc au moins un ensemble commun de dépendances qui seraient un must. Je tiens à maintenir ceux-ci à un endroit unique afin que la connaissance du référentiel, de l'ID de groupe, de l'identifiant d'artefact et des numéros de version est localisée et que chaque développeur commence un nouveau projet Web n'a pas à s'inquiéter d'eux et peut simplement faire référence à ces dépendances. .



4
votes

J'ai conclu que Maven n'a pas été conçu pour ce type d'utilisation. J'ai fini par avoir un parent pom.xml avec toutes les bibliothèques que j'utilise ajouté à son section. Tous les nouveaux projets / modules que je crée ont leur pom.xml hériter à partir du parent pom.xml et ajoutent chaque dépendance dont ils ont besoin pour leur propre < / code> section, moins la version. Ce schéma me permet de gérer les versions des bibliothèques que j'utilise et des déclarations de rémunération dont ils ont besoin à une seule place. Un autre avantage (sur l'essai de créer des paquets de dépendance en quelque sorte) est que cela donne une plus grande commande à grain de la bibliothèque ajoutée aux pompons enfants - seules les dépendances réellement nécessaires sont ajoutées.


0 commentaires

0
votes

Les dépendances de la portée fournies sont bien héritées de parent pom, mais pas de POM définie comme dépendances et je considère qu'une faiblesse mavenaire.

Étant donné que Maven a également des difficultés à ajouter des modules comme des dépendances à travers les hiérarchies de module, je ne peux pas dire que Maven est un outil sophistiqué pour gérer des projets multi-module. Maven s'attend à une hiérarchie stricte à racine unique qui convient uniquement aux projets les plus simples.


0 commentaires