2010-12-14 6 views
12

J'ai actuellement environ 16 projets que je construis avec maven qui sont déployés sur le même serveur d'applications qui composent quelque chose comme un "portail". J'ai construit un parent pom pour gérer les dépendances communes et les configurations de plugin. Actuellement, ma structure SVN ressemble à ceci:Projet multi-module maven avec parent pom et svn layout

portal_root 
    +project1 
     +tags 
     +branches 
     +trunk 
    +project2 
     . 
     . 
     . 
    +projectn 
    pom.xml 

Les différents projets sont déployés séparément. Autrement dit, project1 n'a pas de dépendance sur project2 et chacun peut être modifié et déployé sans avoir à modifier quoi que ce soit d'autre. Ceci pose un problème avec SVN comme si un autre développeur voulait vérifier toute la racine du "portail" (pour obtenir aussi le pom parent) ils auraient aussi par défaut des copies de tous les tags et branches! Pas vraiment idéal.

La seule autre chose que je peux penser est d'utiliser quelque chose comme ceci:

portal_root 
    +tags 
    +branches 
    +trunk 
     +project1 
       +src 
       pom.xml 
     +project2 
      . 
      . 
      . 
     pom.xml 

Cependant, maintenant toutes les modifications du projet seront suivis dans le dossier tags. Ce n'est pas un gros problème pour moi, mais l'embranchement semble maintenant devenir une douleur.

Je suis également en train d'y intégrer Teamcity, ce qui serait un peu plus simple maintenant, car je n'aurais qu'à regarder un seul répertoire (par exemple des balises) pour attraper tout ce qui doit être construit. Je déploie également des artefacts dans un référentiel Nessus d'entreprise. J'espère que quelqu'un pourrait me donner quelques suggestions ici car j'ai été incapable de trouver une documentation décente qui parle de l'ensemble du cycle de vie de la construction et des meilleures pratiques ici.

J'aime l'idée de pouvoir construire et déployer tous les projets avec une seule commande maven. J'aime aussi avoir toutes les dépendances communes, les informations de référentiel et les informations de plugin en un seul endroit.

Répondre

25

Vous pouvez utiliser suivant la mise en page:

+parent-project 
    pom.xml 
+child-project-1 
    pom.xml 
+child-project-2 
    pom.xml 

En projet parent pom ajouter:

<modules> 
    <module>../child-project-1</module> 
    <module>../child-project-2</module> 
</modules> 

Chez les enfants projets pom ajouter:

<parent> 
    <artifactId><!-- parent artifactId --></artifactId> 
    <groupId><!-- parent groupdId --></groupId> 
    <version><!-- parent version --></version> 
    <relativePath>../parent-project</relativePath> 
</parent> 

enfants Les projets peuvent éventuellement être dépendants.

liens peuvent aussi aider:

+0

Cela a parfaitement résolu mon problème! Merci! – Casey

+0

Veillez à ajouter des données parent en tant que dépendance si vous souhaitez utiliser le projet parent dans l'enfant. – cevaris

4

Une variante à l'approche de JohnS serait d'utiliser svn:externals pour accrocher trunk/tags/branches appropriées de vos sous-projets à la trunk/tag/branche appropriée de votre projet parent. De cette façon, vérifier une variante de votre parent sortirait toute la bonne version des autres projets.

Cela n'a de sens que s'il est raisonnable de vérifier tous vos projets ensemble.

+0

Il serait plus utile de commenter mon approche, plutôt que de simplement faire un downvote en silence. Considérant que cette approche nous a aidé à gérer plusieurs versions spécifiques aux clients au cours des quatre dernières années tout en minimisant les différences de code, je serais intéressé de savoir ce que j'ai fait de mal tout ce temps. –

+1

Je pense que svn: externals est vraiment intelligent, surtout dans les grandes entreprises svn repos. De cette façon, vous pouvez lier ensemble une mise en page de répertoire maven si nécessaire sans changer toute la structure de repo. – Sylar

Questions connexes