2009-05-22 11 views
1

J'ai un projet multi-module où il y a plusieurs composants qui suivent une disposition assez standard. Par exemple:Grouper les dépendances maven entre les projets

 
     root (pom) 
      ... 
      module-NN (pom) 
      module-NN-launcher (jar) 
      module-NN-runtime (jar) 
      ... 

(où il y a de nombreux projets module NN)

Chaque projet * -launcher utilise une API propriétaire pour lancer un cadre fournissant une API générique. Les projets * -runtime sont ensuite chargés dans ce framework pour "faire des choses". En l'état actuel, j'ai des dépendances pour le lanceur défini dans chaque * -launcher/pom.xml. De même, j'ai les références génériques d'API dans le * -runtime/pom.xml. Je pourrais mettre à jour la structure du projet à quelque chose comme:

 
    root (pom) 
     launcher (pom) 
      ... 
      module-NN-launcher (jar) 
      ... 
     runtime (pom) 
      ... 
      module-NN-runtime (jar) 
      ... 
     applications (pom) 
      ... 
      module-NN (pom) 
      ... 

Et mettre les dépendances pertinentes dans les fichiers pom.xml lanceur/exécution, mais cela rend beaucoup moins intuitive la mise en page des projets.

Est-ce que quelqu'un a déjà fait face à ce genre de problème? Quels conseils pouvez-vous fournir pour produire une mise en page significative sans dupliquer les détails de projets similaires?

Répondre

0

J'ai fait quelque chose d'environ 90% similaire.

Envisagez de créer un projet appelé "runtime-common". Dans ce fichier pom.xml, ajoutez toutes les dépendances d'exécution communes aux runtimes.

Dans le pom.xml pour le module-NN-exécution, ajoutez ce

<parent> 
     <groupId>FOO</groupId> 
     <artifactId>runtime-common</artifactId> 
     <version>1.0.0</version> 
    </parent> 

Tout ce que vous ajoutez à runtime commun seront ajoutés aux projets enfants pour-commun d'exécution. Cela n'affecte pas la capacité du projet racine à construire tous les modules.

Vous finirez avec quelque chose comme ceci:

ROOT (POM) 
    Launcher-COMMON (POM) 
    ... 
    Launcher-1 (Jar) 
    ... 
    Runtime-COMMON (POM) 
    Runtime-1 (Jar) 
    ...  
    Runtime-2 (Jar) 
    ... 

Vous n'avez pas réellement besoin de garder les biens communs de lancement et d'exécution dans le projet si vous ne voulez pas là-bas. Dans ce cas, faites quelque chose comme ceci

ROOT (POM) 
    COMMON (POM) 
    Runtime-COMMON (POM) 
     ...  
    Launcher-COMMON (POM) 
     ...  
    Launcher-1 (Jar) 
    ...  
    Runtime-1 (Jar) 
    ...  
    Runtime-2 (Jar) 
    ... 
Questions connexes