Verwenden des Maven Release Plugins

Es ist eine ausgezeichnete und weit verbreitete bewährte Methode, jede Ihrer stabilen Versionen in Ihrem Versionskontrollsystem als zukünftige Referenz zu kennzeichnen. Diese Art der Buchhaltung ist jedoch im besten Fall mühsam und fehleranfällig. Wie viele mühsame, fehleranfällige Aufgaben ist dies eines der Dinge, die mit ein wenig Automatisierung erledigt werden können. Zum Glück kann Maven helfen. Das

Maven Release Plugin

hilft Ihnen dabei, den gesamten Prozess der Aktualisierung Ihrer POM-Versionsnummer und der Kennzeichnung einer Release-Version in Ihrem Versionskontrollsystem zu automatisieren. Mal sehen, wie es funktioniert. Hier ist ein Auszug aus einer POM-Datei mit der Versionsnummer, die diese Version eindeutig identifiziert:

  ... com.wakaleo.myapp myapp-core jar 1.0.1-SNAPSHOT ... 

Das SNAPSHOT-Suffix bedeutet, dass jedes Mal, wenn ich diese Version bereitstelle, ein neuer Snapshot in meinem Maven-Repository bereitgestellt wird. Jeder, der die neueste, neueste SNAPSHOT-Version verwenden möchte, kann seinem Projekt eine SNAPSHOT-Abhängigkeit hinzufügen. Dies sind normalerweise ich selbst oder andere Mitglieder des Entwicklungsteams. Schnappschüsse sind per Definition ziemlich instabile Bestien.

  com.wakaleo.myapp myapp-core 1.0.1-SNAPSHOT  

Nebenbei bemerkt, die Furchtlosen und die Rücksichtslosen können noch einen Schritt weiter gehen, indem sie immer die NEUESTE Version verwenden, unabhängig von ihrer tatsächlichen Versionsnummer und unabhängig davon, ob es sich um eine offizielle Veröffentlichung oder nur um einen Schnappschuss handelt:

  com.wakaleo.myapp myapp-core LATEST  

Wenn die Version 1.0.1 fertig ist, müssen wir die POM-Datei aktualisieren, die neue POM-Datei der Versionskontrolle übergeben, diese Version als Release kennzeichnen und dann mit der Arbeit an Version 1.0.2 fortfahren. Das Maven Release Plugin kann einen Großteil dieses Prozesses automatisieren. Bevor das Maven Release-Plugin seine Magie entfalten kann, müssen Sie jedoch sicherstellen, dass Sie alles, was es benötigt, in Ihrer POM-Datei eingerichtet haben.

Zunächst müssen Sie mit einer SNAPSHOT-Version arbeiten. Wenn Sie jedoch bereit sind, Ihre neue Version zu veröffentlichen, sollten Sie alle Verweise auf Snapshots in Ihren Abhängigkeiten entfernen. Dies liegt daran, dass eine Version stabil sein muss und ein Build mit Snapshots per Definition nicht immer reproduzierbar ist.

Das nächste, was Sie brauchen, ist ein

blockieren, damit es herausfinden kann, wo ein neues Release-Tag erstellt und die Änderungen festgeschrieben werden sollen. Hier ist ein Beispiel aus der Praxis:
  scm:svn://wakaleo.devguard.com/svn/maven-plugins/maven-schemaspy-plugin/tr... scm:svn://wakaleo.devguard.com/svn/maven-plugins/maven-schemaspy-plugin/tr... //wakaleo.devguard.com/svn/maven-plugins/maven-schemaspy-plugin/tr...  

Als nächstes müssen Sie das Release-Plugin selbst konfigurieren. Dies beinhaltet hauptsächlich, Maven über das Konfigurationselement "tagBase" mitzuteilen, wohin Ihre Release-Tags gehen. Wenn Sie die Konvention Subversion trunk / tags / branch verwenden, legt Maven Release-Tags automatisch im Verzeichnis "tags" ab. Im folgenden Beispiel verwenden wir eine geringfügige Abweichung von der normalen Konvention und platzieren Releases im Verzeichnis "tags / release":

  ...  ...   org.apache.maven.plugins maven-release-plugin  //wakaleo.devguard.com/svn/maven-plugins/maven-schemaspy-plugin/ta...    ...  ...  

Jetzt können Sie zur Sache kommen und eine (halb-) automatisierte Version ausprobieren. Als erstes müssen Sie sicherstellen, dass alle Ihre letzten Änderungen (in unserem Fall) Subversion übernommen wurden. Wenn noch Änderungen ausstehen, lässt Maven Sie keine Veröffentlichung zu. Zunächst müssen Sie die Veröffentlichung mit dem Ziel "Vorbereiten" vorbereiten:

 $ mvn release:prepare 

Dieses Ziel stellt Ihnen eine Reihe von Fragen, um zu bestätigen, welche Versionsnummer Sie veröffentlichen möchten, welche neue Snapshot-Versionsnummer Sie verwenden möchten und wo Sie das Release-Tag platzieren möchten. Wenn Sie Ihre POM-Datei korrekt eingerichtet haben, haben diese sinnvolle Standardeinstellungen und Sie müssen nicht viel nachdenken. Mit der Befehlszeilenoption "--batch-mode" können Sie diese Fragen sogar vollständig deaktivieren.

Wenn Sie im Voraus genau wissen möchten, was Maven mit Ihrer POM-Datei und Ihrem SCM macht (im Allgemeinen eine gute Idee), können Sie den Vorgang im "Trockenlauf" -Modus ausführen, wie hier gezeigt:

 $ mvn release:prepare -DdryRun=true 

Dieser nützliche Trick simuliert die SCM-Vorgänge (indem er sie in die Konsole schreibt) und erstellt zwei Beispiel-POM-Dateien, die Sie einsehen können: pom.xml.tag, die POM-Datei, die für Subversion festgeschrieben und mit Tags versehen wird, und pom .xml.next, die die nächste Snapshot-Versionsnummer enthält. Sobald Sie mit dem, was Maven tun wird, zufrieden sind, können Sie das Richtige tun:

 $ mvn release:clean release:prepare 

Das Ziel "vorbereiten" macht eigentlich ziemlich viel. In der Tat wird es:

  • Stellen Sie sicher, dass keine nicht festgeschriebenen Änderungen oder SNAPSHOT-Abhängigkeiten vorhanden sind (siehe oben).
  • Aktualisieren Sie die SNAPSHOT-Versionsnummer auf eine Release-Version (z. B. von "1.0.1-SNAPSHOT" auf "1.0.1").
  • Aktualisieren Sie den SCM-Abschnitt der POM-Datei so, dass er auf das Release-Tag und nicht auf den Trunk im Subversion-Repository verweist
  • Führen Sie alle Anwendungstests aus, um sicherzustellen, dass alles noch funktioniert
  • Übernehmen Sie die an der POM-Datei vorgenommenen Änderungen
  • Erstellen Sie in Subversion ein neues Tag für diese Version
  • Aktualisieren Sie die SNAPSHOT-Versionsnummer auf eine neue SNAPSHOT-Version (z. B. von "1.0.1" auf "1.0.2-SNAPSHOT").
  • Übernehmen Sie die an der POM-Datei vorgenommenen Änderungen

Sobald Sie fertig sind, haben Sie Ihre Release-Version in Subversion markiert und arbeiten an einer neuen SNAPSHOT-Version.

Aber warte, eine Minute, könnte man sagen. Haben wir nicht vergessen, unsere Version irgendwo bereitzustellen? Nun, deshalb heißt das Ziel "vorbereiten". Wir haben alles nur zur Vorbereitung der Veröffentlichung eingerichtet, wir haben noch nichts veröffentlicht. Aber keine Sorge, die Veröffentlichung ist auch ziemlich einfach. Verwenden Sie einfach "mvn release: perform":

 $ mvn release:perform 

Dies führt effektiv zu einer "MVN-Bereitstellung" mit der soeben erstellten Version. Genauer gesagt wird die Datei release.properties verwendet, die vom Ziel "release: prepare" generiert wurde, um Folgendes zu tun:

  • Schauen Sie sich die Version an, die wir gerade markiert haben
  • Erstellen Sie die Anwendung (Kompilieren, Testen und Packen)
  • Stellen Sie die Release-Version in lokalen und Remote-Repositorys bereit

Natürlich sind diese beiden Schritte sehr einfach auf einem Hudson-Server zu platzieren, sodass sie zentral ausgeführt werden können. > Alles in allem eine sehr bequeme Möglichkeit, Ihren Release-Prozess zu automatisieren.

"Bester Entwicklungskurs, an dem ich seit langer Zeit teilgenommen habe ... Ich habe den Kurs sehr genossen ... Ein Muss für ernsthafte Java-Entwickler ..." - Lesen Sie, was die Leute über die Java Power Tools Bootcamps sagen.

Diese Geschichte "Using the Maven Release Plugin" wurde ursprünglich von JavaWorld veröffentlicht.