2009-02-13 18 views
17

Wenn ich einen Eltern-Pom habe und dies auf mehrere Projekte erben möchte. Normalerweise tue ich dies, indem ich oben das Projekt <parent> ... </parent> hinzufüge. Was ich an diesem Ansatz nicht mag, ist, dass, wenn sich etwas in meinem Elternteil ändert, ich alle Projekte bearbeiten muss, die von diesem Elternteil geerbt werden, um die Versionsnummer zu ändern. Gibt es einen besseren Ansatz? Ich hoffe es ist verständlich, was ich versuche zu erklären.Maven2 Vererbung

Vielen Dank im Voraus.

Antwort

2

denke ich, das Wichtigste ist, zu erkennen, in einem Multi-Modul zu bauen ist, dass Maven immer die die Version verwendet, die von Ihrem lokalen Repository ist. Dies gilt auch für Multi-Modul-Builds! Wenn Sie also auf den "Eltern" -Pom verweisen, erhalten Sie das veröffentlichte Elternartefakt von Ihrem lokalen Maven-Repository. Also, wenn Sie mvn installieren Sie wiederholt jedes Modul in Ihrem lokalen Repo veröffentlichen.

Während der Entwicklung, Ihre eigenen Module sind wahrscheinlich zu etwas wie X.X-SNAPSHOT versioniert. Der Verweis auf das Eltern-Pom ist X.X-SNAPSHOT. Ändern Sie diese nicht, bevor Sie bereit sind, sie zu veröffentlichen.

So ein einfacher Fall wäre: Vor der ersten Veröffentlichung werden alle Module 1.0-SNAPSHOT genannt. Wenn Sie die erste Version "golden build" erstellen, benennen Sie alle 1.0-SNAPSHOT-Module in 1.0 um. Wenn Sie mit der Entwicklung von Version 1.1 beginnen, ändern Sie alle Versionsnummern in 1.1-SNAPSHOT. Und so weiter ...

Die Gewohnheit ist, mit Schnappschussversionen zu arbeiten, bis Sie freigeben, an welchem ​​Punkt Sie die Versionszahlen überall aktualisieren. In der täglichen Entwicklung ändern Sie die Versionsnummern nicht, da Snapshot-Releases anders behandelt werden als Hard-Versions-Releases.

Edit: Nach einigen dachte, ich denke, einige Ihrer Verwirrung im Feld „Anmerkungen“ Daraus ergibt sich: Die Versionsnummer in Ihrem pom spiegelt die allgemeine Anwendungsversion. Jede gegebene pom Änderung ändert nicht notwendigerweise die Anwendung Versionsnummer. Wenn Sie Änderungen in der Pom verfolgen müssen, würde ich vorschlagen, dass Sie ein Quellcodeverwaltungssystem verwenden. In den 3 Monaten, in denen Sie an Version 1.0 arbeiten, ist es sinnvoll, die Versionsnummer bei 1.0-SNAPSHOT zu belassen. In der (zB) 3-wöchigen Periode arbeiten Sie an 1.1, die Versionsnummer ist 1.1-SNAPSHOT.

+0

, wenn meine Eltern die Version 1.0-SNAPSHOT hat. Und ich ändere mein Elternteil und erhöhe die Version, sagen wir 1,1-SNAPSHOT, ich muss es in jedem Kind erhöhen, oder? Ich verstehe nicht, was du meinst, jedes Mal aktualisiert. – kukudas

+0

Ich habe versucht zu bearbeiten;) – krosenvold

+0

? Ich verstehe nicht :) – kukudas

6

Automatische Parent-Versionsverwaltung (d. H. Weglassen des Tags) ist ein umstrittenes Problem im Maven-Raum. There is a defect logged against it. Für jetzt wird es als eine Verbesserung oder Verbesserung in der 2.1 Version Zweig betrachtet,

8

Sie können die Maven Release Plugin bei der Freigabe verwenden. Es aktualisiert automatisch alle Versionsnummern und erstellt ein Tag in Ihrer Quellcodeverwaltung (wenn SCM im POM konfiguriert ist).

Meine Befehle für die Durchführung einer Freigabe sind normalerweise wie folgt, nach denen ich das Tag von SCM exportieren und es mit "mvn clean package" oder "mvn clean deploy" erstellen.

svn update (or whatever SCM you use) 
    mvn clean 
    mvn release:prepare -DautoVersionSubmodules=true 
    mvn release:clean 

So zum Beispiel, wenn Sie Version zuerst "1.0-snapshot", dann ist die Release-Plugin einen Tag "Projektname-1.0" mit der Version "1.0" schaffen wird, und erhöht schließlich die aktuelle Version „1.1- SCHNAPPSCHUSS".Das Plugin fragt Sie nach den Versionen und dem Tag-Namen, damit Sie die Standardeinstellungen überschreiben können.

3

Sie sollten Ihre Versionen als Snapshots behalten, bis sie veröffentlicht werden. Auf diese Weise müssen Sie es nicht jedes Mal ändern, wenn Sie den Pom ändern. Sobald Sie jedoch einen Eltern-Pom veröffentlicht haben, möchten Sie die Änderung an allen Kindern vornehmen (vorausgesetzt, der Elternteil befindet sich außerhalb des "Reactor" Builds ... sonst wäre alles durch das Release-Plugin zusammengestoßen worden). Es gibt ein relativ neues Plugin namens versions-maven-plugin, das beim Ändern der Versionen helfen kann.

16

Was ich über diesen Ansatz nicht mag ist, dass, wenn etwas in meinem Elternteil ändert muß ich alle Projekte bearbeiten, die von diesem Elternteil zu ändert die Versionsnummer vererbt werden. Gibt es einen besseren Ansatz für ?

Ja, gibt es! Werfen Sie einen Blick auf die Maven Versions Plugin, speziell:

Versionen: update-Kind-Module aktualisiert die übergeordneten Abschnitt der Kind Module eines Projekts so die Version die Version des aktuellen Projekt übereinstimmt.
Zum Beispiel, wenn Sie einen Aggregator pom haben das heißt auch die Eltern für die Projekte, die es Aggregate und die Kinder und Eltern Versionen nicht mehr synchronisiert sind, diese mojo helfen die Versionen der Kinder Module beheben .
(Beachten Sie Maven mit der Option -N, um Lauf dieses Ziel, wenn Ihr Projekt ist gebrochen so schlecht, dass es nicht bauen kann, weil der Version mis-match aufrufen müssen).


Edit: Natürlich mit Maven3 Sie jetzt < Version haben> -weniger < parent> Elemente in Teilmodule:

Entwickler arbeiten in mehreren Modulen oder multi- pom-Projekte müssen nicht die übergeordnete Version in jedem Untermodul in Maven 3 angeben. Stattdessen können Sie versionslose übergeordnete Elemente hinzufügen.

Ref

+1

Es scheint, dass versionslose Elternelemente noch nicht implementiert wurden. http://jira.codehaus.org/browse/MNG-624 – davidmc24