Bewährte Methode: Versionierung und Releases in Multiprojekten

8

Was ist die beste Vorgehensweise für die Versionsverwaltung und Versionsverwaltung im folgenden Fall mit Multiprojekten?

Projektstruktur

  • globaler Elternteil
    • Elternprojekt (Version: 1.0-SNAPSHOT)
      • Kindprojekt 1 (gleich wie Eltern)
      • Kindprojekt 2 (gleich Eltern)
      • Kindprojekt 3 (gleich Eltern)
      • Kindprojekt 4 (gleich Eltern)
      • ...

Ich möchte nur die Version für das übergeordnete und alle untergeordneten Projekte festlegen, da jeder Teil des Projekts die gleiche Version haben muss.

Was ich auch will, ist, das Projekt mit Kontinuum / Maven zu veröffentlichen.

Aktuelle "schlechte" Lösung:

Normalerweise sollte es einfach sein, die Version im Elternpom zu setzen und in jedem Kind "letzte Version von Eltern" zu sagen, aber das funktioniert nicht mit maven & lt; 3.1 (Siehe hier) [http: //jira.codehaus. org / browse / MNG-624] Jetzt setze ich in jedem Kindprojekt die Version des Elternprojekts und für jedes Release muss ich die Version in allen Childs und Eltern ändern.

Beispiel:

Parent

%Vor%

Kind

%Vor%

Wenn ich meine Projekte jetzt mit Continuum freigeben möchte, verwende ich die folgende Reihenfolge, um es freizugeben:

  1. Übergeordnetes Projekt
  2. Kindprojekt 1
  3. Kindprojekt 2
  4. ...

Aber das funktioniert nicht, weil nach dem Ändern der Version des Elternteils, die Kinder nicht mehr eine SNAPSHOT-Version im Elternteil haben und ich denke, dass es einen besseren Weg geben muss, ein Multiprojekt mit Kontinuum freizugeben.

    
Rene Herget 20.08.2012, 13:52
quelle

3 Antworten

2

Wenn Sie Ihre untergeordneten Module im <dependencyManagement/> -Tag hinzufügen, bin ich mir ziemlich sicher, dass Sie dieses Problem nicht haben werden.

Parent

%Vor%

Kind1

%Vor%

Child2 (hängt von Child1 ab)

%Vor%

Wenn Sie versuchen, die dependencyManagement zu verwenden, müssen die Abhängigkeiten zwischen Modulen nie irgendwelche Versionen definieren, da sie in der Eltern-POM definiert sind.

Ich hatte nie Probleme mit der Freigabe von Multi-Modul-Projekten mit diesem Ansatz.

Bearbeiten

Um es klar zu stellen: dependencyManagement hat nichts mit der Vererbung zwischen Eltern-Kind zu tun. Es löst alle Probleme mit der Version von Abhängigkeiten zwischen untergeordneten Modulen. Und es funktioniert während der Veröffentlichung.

    
maba 20.08.2012, 14:04
quelle
1

Sie sollten für die gleichzeitig identisch versionierten Module eine Struktur mit mehreren Modulen unter einer einzigen Versionskontrollhierarchie erstellen. Mit Continuum können Sie sie entweder als einzelnen Job oder als mehrere Jobs pro Modul zu einer Gruppe hinzufügen. Der Release-Mechanismus wird auf beide Arten vom übergeordneten Element ausgelöst und löst automatisch die Versionen für Sie auf.

Übrigens können Sie <version>${parent.version}</version> und die identische groupId löschen, da sie vom übergeordneten Element übernommen werden.

Wenn das globale Parent separat freigegeben wird, sollten Sie es in ein separates Modul aufteilen, anstatt es Teil derselben Struktur mit mehreren Modulen zu machen. Ein Beispielprojekt in diesem Layout finden Sie hier: Ссылка

    
Brett Porter 21.08.2012 03:43
quelle
0

Wenn Sie möchten, dass alle Versionsnummern synchron bleiben, können Sie das autoVersionSubmodules Flag des Maven Release Plugins. Wenn Sie diesen Wert auf "true" setzen, können Sie eine Veröffentlichung auf der obersten Projektebene durchführen und alle Untermodule mit derselben Version wie die übergeordnete Version veröffentlichen.

Dies kann in der Befehlszeile angegeben werden, wenn Sie mvn -DautoVersionSubmodules release:prepare oder in einer POM-Datei wie folgt ausführen:

%Vor%

Ich habe Continuum nicht benutzt, aber ich glaube, dass es das Maven Release-Plugin unter den Deckeln verwendet? Einige Googler schlagen vor, dass dies funktionieren könnte (basierend auf einer Anzahl von "nice to have" Bugs in Bezug darauf, wie die Continuum Schnittstelle dieses Szenario handhabt).

    
Duncan Jones 20.08.2012 14:55
quelle