Maven, Spring configuration multi-modules de projet

Je suis désireux de mettre en place un multi module maven du projet (décrit ci-dessous) qui sera mise à l'échelle. J'ai quelques questions à propos de la démarche qui est en grande partie tirée de la Sonatype exemple.

J'ai fait une certaine quantité de lecture sur maven multi projets de module, mais ne pouvait pas trouver un exemple aller au-delà du niveau de base.

Questions:

  1. Est-ce (ci-dessous) un bon projet de structure pour commencer? Ou faut-il l'odeur de la catastrophe dès le début - c'est à dire conduirait à une forte restructuration lors de la configuration construit? En bref, je suis à la recherche pour éviter de mettre en place quelque chose qui va à l'encontre du grain avec Maven.
  2. Je m'attends à ce que certains modules pour être tout à fait indépendant, alors que la plupart seront intimement liés. Est-il bon de commencer avec chaque module comme un repo Git et, plus tard, refactoriser dans l'ensemble des modules qui sont étroitement liés?

Objectifs:

  1. Bonne structure de projet pour une modulaire Printemps, JSF2, Maven en fonction du projet, qui permettrait construit impliquant un choix de modules et de leurs dépendances.
  2. Il devrait être possible de déployer un individu module web sur un conteneur léger comme Tomcat/Jetty grâce à Maven de configuration (comme jetty-maven-plugin). Ce devrait être en mesure de tirer dans les dépendances requises par Maven. Qui le rend facile en cours de développement pour se concentrer sur le module en cours d'élaboration (ne pas avoir à faire un plein de génération et de déploiement) et de déployer l'application que dans une construction complète.
  3. Le programme d'installation devrait permettre de multiples distributions basées sur une sélection de modules à inclure dans la construction. Je le prends ceci peut être réalisé grâce à l'utilisation de construire des modules de traction et d'emballage des modules correspondants.

Structure de projet

Core domain classes.  
somapp.core (maven project)  
 |- someapp.core (maven module)  
 |- someapp.core.tests  

Account Management Domain classes   
someapp.accountmgmt   
|- someapp.accountmgmt   
|- someapp.accountmgmt.tests   

component1 domain classes   
someapp.component1   
|- someapp.component1   
|- someapp.component1.tests

Service 1 - # account management (User login)
someapp.accountmgmt  
 |- someapp.accountmgmt.api  
 |- someapp.accountmgmt.impl  
 |- someapp.accountmgmt.mocks  
 |- someapp.accountmgmt.tests  

someapp.service2  
 |- someapp.service2.api  
 |- someapp.service2.impl  
 |- someapp.service2.mocks   
 |- someapp.service2.tests   
 |- someapp.service2.cli    # CLI access for service2

someapp.service3  
 |- like above  

someapp.accountmgmt.web  
 |- someapp.accountmgmt.web  

someapp.service2.web  
 |- someapp.service2.web  

someapp.service3.web  
 |- someapp.service3.web  

someapp.build1 # bundle accountmgmt and service2 into 1 war file  

someapp.build2 # bundle accountmgmt and service3 into 1 war file  

somapp.build3 # bundle  accountmgmt, service2 and service3 into 1 war file  

(i.e. someapp.accountmgmt.web.war, someapp.accountmgmt.jar, someapp.service2.web.war, someapp.service2.jar, someapp.service3.web.war, someapp.service3.jar, someapp.core.jar)

Je comprends structures de projet ne sont pas définies dans la pierre. Je tiens à mettre en place un qui est un bon point de départ. Des Suggestions et des Liens vers des exemples sont les bienvenus.

OriginalL'auteur JetStream | 2013-03-14