2009-05-22 7 views
1

Ich habe ein Multi-Modul-Projekt, wo es verschiedene Komponenten gibt, die einem ziemlich Standard-Layout folgen. Zum Beispiel:Maven Abhängigkeiten über Projekte hinweg gruppieren

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

(wo es viele Modul-NN Projekte)

Jedes * -launcher Projekt verwendet eine proprietäre API einen Rahmen bietet eine generische API zu starten. Die * -Runtime-Projekte werden dann in dieses Framework geladen, um "Dinge zu tun".

Nach derzeitigem Stand, ich habe Abhängigkeiten für die in jedem * -launcher/pom.xml definiert Werfer. Ebenso habe ich die generischen APIs Referenzen in der * -runtime/pom.xml. Ich konnte die Projektstruktur aktualisieren, etwas zu sein wie:

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

und legte die entsprechenden Abhängigkeiten in den Launcher/runtime pom.xml-Dateien, aber das macht das Layout der Projekte viel weniger intuitiv.

Hat jemand diese Art von Problem vor sich gestellt? Welchen Rat können Sie bei der Erstellung eines aussagekräftigen Layouts geben, ohne Details über ähnliche Projekte hinweg zu duplizieren?

Antwort

0

Ich habe etwas über 90% ähnlich gemacht.

Sie können ein Projekt namens "runtime-common" erstellen. Fügen Sie in dieser pom.xml alle Laufzeitabhängigkeiten hinzu, die Laufzeiten gemeinsam haben.

Im pom.xml für Modul-NN-Laufzeit, dieses Sie

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

Alles add Zu Kind Projekte für Runtime-common hinzugefügt werden zur Laufzeit-common. Dies hat keine Auswirkungen auf die Fähigkeit des Root-Projekts, alle Module zu erstellen.

Sie werden mit etwas am Ende wie folgt:

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

Sie brauchen nicht wirklich die Launcher und Runtime-commons im Projekt zu halten, wenn Sie es nicht wollen, gibt. In diesem Fall etwas tun, wie diese

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