Wäre toll, wenn Maven Guru-Community mir bei der folgenden Aufgabe helfen kann.Vollautomatische Freigabeverfahren mit release + Versionen Plugins
Ich möchte den Release-Prozess von Maven-Modul in Hudson in einer Weise automatisieren, dass Release-Prozess im Batch-Modus ausgeführt wird (braucht nichts von der Konsole gefragt werden). Zur Zeit verwende ich die gemeinsamen Schritte release:prepare
(mit <preparationGoals>versions:update-parent clean verify</preparationGoals>
, um Eltern vor der Festschreibung auf die neueste Version zu aktualisieren) + release:perform
. Allerdings würde ich Maven möchte folgendes tun:
Irgendwann während der Vorbereitungsschritt:
- Für alle Abhängigkeiten, die die
groupId
des aktuellen Moduls und Eltern, ersetzen-SNAPSHOT
mit freigegebene Version (zBversions:use-releases -Dincludes=???
) entsprechen .
Irgendwann nach Loslassen:
- Für alle Abhängigkeiten, die die
groupId
der aktuellen Moduls und Mutter ersetzen Release-Version mit-SNAPSHOT
Version (z.B.versions:use-latest-snapshots ...
) entsprechen.
Beispiel:
<parent>
<groupId>org.mycompany.myproject</groupId>
<artifactId>myproject-parent</artifactId>
<version>1.0-SNAPSHOT</version>
</parent>
<dependency>
<groupId>${project.groupId}</groupId>
<artifactId>myproject-api</artifactId>
<version>1.1-SNAPSHOT</version>
</dependency>
vor Modul markiert ist in umgewandelt wird:
<parent>
<groupId>org.mycompany.myproject</groupId>
<artifactId>myproject-parent</artifactId>
<version>1.0</version>
</parent>
<dependency>
<groupId>${project.groupId}</groupId>
<artifactId>myproject-api</artifactId>
<version>1.1</version>
</dependency>
und nach der Entlassung gelang es in umgewandelt wird:
<parent>
<groupId>org.mycompany.myproject</groupId>
<artifactId>myproject-parent</artifactId>
<version>1.1-SNAPSHOT</version>
</parent>
<dependency>
<groupId>${project.groupId}</groupId>
<artifactId>myproject-api</artifactId>
<version>1.2-SNAPSHOT</version>
</dependency>
es mir gefällt benötigt eine Mischung aus
versions:use-releases scm:commit release:prepare release:perform versions:use-latest-snapshots scm:commit
aber ich bin nicht sicher, was der beste Weg ist, dies zu tun. Vor allem wäre es schön, so wenig Commits wie möglich zu haben: Die Schwierigkeit ist, dass reparationGoals
nach -SNAPSHOT
Versionskontrolle ausgeführt werden.
Das beschriebene Projekt ist kein Multi-Modul-Projekt in dem Sinne, dass das Eltern-POM seine Kinder nicht über <modules>
bezieht. SCM-Struktur ist die folgende:
.
|
+-- myproject-parent
| +-- pom.xml
+-- myproject-api
| +-- pom.xml
+-- myproject-impl
+-- pom.xml
Abhängigkeiten sind:
myproject-api → myproject-parent
myproject-impl → myproject-parent
myproject-impl → myproject-api
Die Eltern Projekt POM (myproject-parent
) werden nur selten veröffentlicht werden und wird somit zum ersten Mal veröffentlicht werden. Dann myproject-api
(wenn nötig) und dann myproject-impl
.
Ich kann Ihnen nicht zustimmen. Wir haben eine flache Modulstruktur: Dies ist der einzige Weg, um sie in Hudson aufzuteilen und unabhängig zu machen (andernfalls schlägt der Test fehl in Submodul den gesamten Projektaufbau fehl). Einige der Module (z. B. Eltern-POM) werden selten geändert: Es gibt keine Notwendigkeit, sie freizugeben. Andere (wie "Modell") werden einige Male veröffentlicht. Und Ihr Ratschlag funktioniert nicht, wenn ich Abhängigkeiten zwischen zwei Multi-Modul-Projekten habe. Auch für den Multi-Modul-Build habe ich keinen Beweis, dass 'release: prepare'' -SNAPSHOT'-Abhängigkeiten durch "future release" -Versionen ersetzt. –
Zum ersten Mal kann ich sagen, es ist gut, wenn die Tests fehlschlagen, wird der ganze Build fehlschlagen, weil etwas nicht stimmt. Die Frage ist, warum möchten Sie sie in Hudson getrennt haben? Entweder ist dies ein Multi-Modul Build oder es ist nicht. Darüber hinaus, wenn Sie Eltern Pom ist selten geändert, so dass es klingt, es könnte ein separates Modul sein, die eigenen Release-Zyklus hat und Sie müssen es freigeben, weil es als Abhängigkeit/Eltern von anderen verwendet wird. Wenn Sie Abhängigkeiten zwischen den Modulen haben, funktioniert das in einem Multi-Modul-Build perfekt. Ich kann empfehlen, einen Blick hier zu werfen: https://github.com/khmarbaise/javaee als Beispiel. – khmarbaise
_Für den ersten kann ich sagen, es ist gut, wenn die Tests fehlschlagen, wird der gesamte Build fehlschlagen, weil etwas nicht stimmt. Es ist nicht immer praktisch. In unserem Projekt arbeiten kleine Gruppen von Entwicklern an einem eigenen Modul. Jedes Modul verfügt über eine eigene E-Mail-Benachrichtigungsliste, um E-Mails zu senden, wenn der Build fehlschlägt oder nach einem Fehler wiederhergestellt wird. Somit sind Personen X und Y für die Module A und B verantwortlich. –