2010-12-14 10 views
12

Ich habe derzeit etwa 16 Projekte, die ich mit Maven, die auf dem gleichen Anwendungsserver, die sich so etwas wie ein "Portal". Ich habe einen Eltern-Pom erstellt, um häufige Abhängigkeiten und Plugin-Konfigurationen zu behandeln. Momentan sieht meine SVN-Struktur ähnlich aus:Multi-Modul Maven-Projekt mit Eltern Pom und Svn Layout

Die einzelnen Projekte werden jeweils separat bereitgestellt. Das heißt, Projekt1 hat keine Abhängigkeit von Projekt2 und jeder kann modifiziert und bereitgestellt werden, ohne dass etwas anderes geändert werden muss.

Dies stellt ein Problem mit SVN, als ob ein anderer Entwickler das gesamte "Portal" -Root auschecken wollte (um auch das Eltern-Pom zu erhalten), sie würden auch standardmäßig Kopien aller Tags und Zweige herunterziehen! Nicht wirklich ideal.

Das einzige, was ich denken kann, ist, so etwas zu verwenden:

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

jedoch nun alle Projektänderungen werden in den Tags Ordner verfolgt werden. Das ist kein großes Problem für mich, aber Verzweigung scheint jetzt ein Schmerz zu werden.

Ich arbeite gerade daran, auch Teamcity einzubinden, was jetzt etwas einfacher wäre, da ich nur ein einziges Verzeichnis (z. B. Tags) sehen müsste, um alles zu erfassen, was gebaut werden muss. Ich stelle auch Artefakte in einem Nessus-Repository des Unternehmens bereit.

Ich hoffe, jemand könnte mir hier einige Vorschläge geben, wie ich keine anständige Dokumentation finden konnte, die hier über den gesamten Build-Lebenszyklus und Best Practices spricht.

Ich mag die Idee in der Lage zu sein, alle Projekte mit einem einzigen maven-Befehl zu erstellen und bereitzustellen. Ich mag auch alle gemeinsamen Abhängigkeiten, Repository-Informationen und Plugin-Informationen an einem Ort.

Antwort

25

können Sie folgende Layout verwenden:

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

In geordneten Projekt pom add:

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

Bei Kindern Projekte pom hinzufügen:

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

Kinder Projekte optional abhängig sein kann.

folgende Links können auch helfen:

+0

Das hat mein Problem perfekt gelöst! Vielen Dank! – Casey

+0

Stellen Sie sicher, dass übergeordnete Daten als Abhängigkeit hinzugefügt werden, wenn Sie das übergeordnete Projekt im untergeordneten Projekt verwenden möchten. – cevaris

4

Eine Variation zu JohnS Ansatz wäre svn:externals zu verwenden, um geeignetes trunk/tags/branches Ihrer Teilprojekte an den Haken passende Trunk/Tag/Zweig Ihres Elternprojekts. Auf diese Weise würde das Auschecken einer Variante Ihres Elternteils die richtige Version der anderen Projekte hervorbringen.

Dies macht nur Sinn, wenn es sinnvoll ist, alle Ihre Projekte zusammen zu überprüfen.

+0

Es wäre hilfreicher, meine Herangehensweise zu kommentieren, als nur stillschweigend zu verweilen. Wenn man bedenkt, dass dieser Ansatz uns in den letzten vier Jahren dabei geholfen hat, mehrere kundenspezifische Versionen zu handhaben und gleichzeitig die Unterschiede zwischen den Codes zu minimieren, würde mich interessieren, was ich die ganze Zeit falsch gemacht habe. –

+1

Ich denke, svn: externals ist wirklich schlau, vor allem in großen Unternehmen SVN Repos. Auf diese Weise können Sie bei Bedarf ein Maven-Verzeichnislayout verknüpfen, ohne die gesamte Repostruktur zu ändern. – Sylar

Verwandte Themen