Konzeptionell unterscheidet Maven zwischen Snapshot-Versionen und Release-Versionen. Für Maven-Projekte auf höchster Ebene, die kontinuierlich integriert werden, ist es unnatürlich, diese Unterscheidung zu treffen. Insbesondere wenn eine Art von kontinuierlichem Deployment implementiert ist, macht es nicht viel Sinn, Artefakte mit einer Snapshot-Version zu erstellen und zu verteilen. Snapshot-Versionen können nicht mit einer eindeutigen Revision in einem Versionskontrollsystem verknüpft werden und können mehrdeutige Snapshot-Abhängigkeiten aufweisen. Deshalb sollten solche Artefakte nicht in einer Live-Umgebung bereitgestellt werden.
Obwohl es möglich ist, Versionskontrollinformationen als Metadaten in Artefakte einzubetten, z.B. über die Manifest-Datei, wird empfohlen, Snapshot-Versionen ganz zu vermeiden. Stattdessen sollten nur eindeutige Release-Versionen kontinuierlich erstellt und bereitgestellt werden. Tatsächlich kann jede einzelne Revision als Release betrachtet werden, wie weiter unten gezeigt wird.
<Version>${release}-${revision}</version> <Elternteil><version>1.0-SNAPSHOT</version></parent>
Das übergeordnete POM ist ein geeigneter Ort, um geeignete Standardwerte für die Eigenschaften Release und Revision festzulegen:
<version>1.0-SNAPSHOT</version> <Eigenschaften><release>1.0</release><Revision>SNAPSHOT</revision></properties>
Damit die tatsächliche Revisionsnummer korrekt in die Projektversion jedes Moduls aufgenommen werden kann, muss sie als Systemeigenschaft -Drevision=$N an den Maven Build-Prozess übergeben werden. Beachten Sie, dass das Build Number Maven Plugin dafür nicht verwendet werden kann, da es die Revisionsnummer erst setzen kann, nachdem die Projektversionen bereits von Maven aufgelöst wurden.
Angenommen, Jenkins wird als Build-Server und Subversion als Versionskontrollsystem verwendet, kann N einfach durch die in Jenkins eingebaute Variable SVN_REVISION ersetzt werden. Im Falle von nachgelagerten Builds innerhalb einer
${JENKINS_URL}plugin/repository/everything/
Ein weiterer wichtiger Vorteil der ausschließlichen Erstellung von Release-Versionen besteht darin, dass kontinuierliche Integration und kontinuierliche Bereitstellung jetzt noch besser zusammenpassen. Mit dem Deployit-Plugin ist es sehr einfach, Deployment-Pakete zu erstellen, zu importieren und bereitzustellen. Solche Deployment-Pakete haben die gleiche eindeutige Anwendungsversion wie die generierten Deployables, die in diesen Paketen enthalten sind. Abgesehen von der übergeordneten POM-Version gibt es keine Snapshot-Versionen, so dass keine anderen Identifikatoren wie Zeitstempel verwendet werden müssen, um die bereitgestellten Anwendungen zu identifizieren. Obwohl kein Maven-Release mehr durchgeführt wird, muss die statische Hauptversionsnummer von Zeit zu Zeit aktualisiert werden, um bestimmte Anwendungsänderungen zu berücksichtigen. Dies kann einfach durch einen einzigen manuellen Commit erfolgen. Das übergeordnete POM und die untergeordneten POMs können ganz einfach mit dem Versions Maven Plugin:
mvn versions:set -DgenerateBackupPoms=false
Die Release-Eigenschaft im übergeordneten POM muss ebenfalls entsprechend aktualisiert werden.
Bei der Vorbereitung eines Maven-Release wird automatisch überprüft, dass die freizugebende Revision keine Snapshot-Abhängigkeiten hat. Da nun jede Revision als Release betrachtet wird, gilt diese Regel eigentlich für jede Revision. Um dies automatisch überprüfen zu lassen, wird das
Verfasst von
Marcus Martina
Unsere Ideen
Weitere Blogs
Contact



