mise en page du référentiel pour les grands projets Maven


13

J'ai une grande application (~ 50 modules) en utilisant une structure similaire à ce qui suit:

  • application
    • modules de communication
      • module de communication couleur
      • Module de communication SSN
      • module de communication
    • Module routeur
    • modules de service
      • module de service de vote
        • interface Web sous-module pour voter
        • collector Vote sous-module pour voter
        • etc. pour voter
      • module de service Quiz
      • etc. Module

Je voudrais importer l'application à Maven et Subversion. Après quelques recherches, j'ai trouvé que deux approches pratiques existent pour cela.

On utilise une structure arborescente comme la précédente. L'inconvénient de cette structure est que vous avez besoin de beaucoup de réglages/hacks pour que les rapports multi-modules fonctionnent bien avec Maven. Un autre inconvénient est que dans Subversion, l'approche standard trunk/tags/branches ajoute encore plus de complexité au référentiel.

L'autre approche utilise une structure plate, où il n'y a qu'un seul projet parent et tous les modules, sous-modules et parties des sous-modules sont un enfant direct du projet parent. Cette approche fonctionne bien pour les rapports et est plus facile dans Subversion, mais je sens que je perds un peu de la structure de cette façon.

De quelle façon choisiriez-vous sur le long terme et pourquoi?

14

Nous avons une application assez vaste (160+ bundles OSGi où chaque bundle est un module Maven) et la leçon que nous avons apprise, et continuez à apprendre, est que flat est meilleur. Le problème avec la sémantique d'encodage dans votre hiérarchie est que vous perdez de la flexibilité. Un module 100% dit "communication" aujourd'hui peut être en partie "service" demain et alors vous devrez déplacer des choses dans votre référentiel et cela va casser toutes sortes de scripts, documentation, références, etc.

Donc je recommanderais une structure plate et de coder la sémantique dans un autre endroit (disons par exemple un espace de travail IDE ou de la documentation).

J'ai répondu à une question à propos de la disposition de contrôle de version dans quelques détails with examples at another question, il peut être pertinent à votre situation.


3

Je pense qu'il vaut mieux aplatir votre structure de répertoires. Peut-être que vous voulez proposer une convention de nommage pour les répertoires tels qu'ils trient bien lors de la visualisation de tous les projets, mais finalement je ne pense pas que toute cette hiérarchie supplémentaire est nécessaire.

En supposant que vous utilisiez Eclipse comme IDE, tous les projets finiront dans une liste plate une fois que vous les aurez importés de telle sorte que vous ne gagnerez rien des sous-répertoires supplémentaires. Cela en plus du fait que la configuration est tellement plus simple sans toute la hiérarchie supplémentaire rend le choix assez clair dans mon esprit.

Vous pouvez également envisager de combiner certains modules. Je ne sais rien de votre application ou de votre domaine, mais il semble que beaucoup de ces modules au niveau de la feuille pourraient mieux convenir comme des paquets ou des ensembles de paquets dans un autre module de niveau supérieur. Je suis tout à fait pour garder les bocaux cohérents, mais on peut parfois aller trop loin.