web-dev-qa-db-de.com

Maven: Versionseigenschaften in pom.xml ändern

Ich habe eine Maven pom.xml, ich baue ein Projekt und lasse ein Projekt mit Jenkins bereitstellen.

Aber vor und nach dem Build "Release Version" müssen wir meine Version einstellen 

Zum Beispiel: Ich habe in pom.xml

<properties>
   <version-own>0.0.21-SNAPSHOT</version-own>
</properties>

vor der Veröffentlichung muss ich so eingestellt werden

<properties>
   <version-own>0.0.25</version-own>
</properties>

nach der Veröffentlichung muss ich so eingestellt werden

<properties>
   <version-own>0.0.27-SNAPSHOT</version-own>
</properties>

Wie kann das gemacht werden?

17
user2004266

Wenn Sie keine eigene Versionseigenschaft verwenden müssen, beachten Sie Folgendes, das für Ihr <project><version>0.0.21-SNAPSHOT</version></project>-Element gilt:

mvn versions:set versions:commit -DnewVersion="0.0.25"

Das ändert Ihren Pom und passt die Version Ihren Wünschen an. Sie möchten diese Änderung wahrscheinlich in Ihrem Quellcode-Kontroll-Repository festschreiben. Dazu funktioniert das scm: checkin-Ziel von scm plugin einwandfrei (vorausgesetzt, Sie möchten, dass dies automatisiert wird):

mvn scm:checkin -Dincludes=pom.xml -Dmessage="Setting version, preping for release."

Dann können Sie Ihre Freigabe durchführen (ich empfehle das maven-release-plugin ), woraufhin Sie Ihre neue Version festlegen und wie oben festschreiben können.

Das versions Plugin ist dein Freund. Wenn Sie das obige Scripting durchführen, ist wahrscheinlich ein parametrisierter Build erforderlich, oder vorzugsweise das groovige Plugin für Jenkins, mit dem Sie die Maven-spezifischen Build-Variablen erhalten können.

27
Anew

Es gibt einen einfachen Weg dazu. Mit einem Befehl können Sie den gewünschten Teil ändern:

Zum Ausschneiden und Einfügen:

mvn build-helper:parse-version versions:set -DbuildNumber=555 '-DnewVersion=${parsedVersion.majorVersion}.${parsedVersion.minorVersion}.${parsedVersion.incrementalVersion}-${buildNumber}'

Zur Klarheit:

mvn build-helper:parse-version versions:set -DbuildNumber=555
   '-DnewVersion=
                  ${parsedVersion.majorVersion}
                 .${parsedVersion.minorVersion}
                 .${parsedVersion.incrementalVersion}
                 -${buildNumber}'

Dies ist ein kurzes Beispiel für das Aktualisieren von Versionen mit Buildwerten

6

Für den Anfang können Sie es von Hand tun. Wenn Ihr Build die Maven-Konventionen gut befolgt, könnten Sie wahrscheinlich eines von mehreren Maven-Plugins nutzen, die bei der Verwaltung von Versionsnummern helfen.

Das maven-versions-plugin hilft dabei, manuelle Änderungen an Versionsnummern zu automatisieren. Es verfügt über Nice CLI-Befehle, mit denen Sie Ihre Poms vor der Veröffentlichung optimieren können.

Dann gibt es noch das maven-release-plugin , das den gesamten Prozess des Ausschneidens eines Releases automatisiert. Der Snapshot wird in eine Release-Version geändert und anschließend auf den nächsten Snapshot nach dem Release-Build gerollt. Während dieses gesamten Prozesses werden diskrete Versionen der POMs zur Quellcodeverwaltung festgelegt.

Das Geheimnis für den Erfolg in den automatisierteren Teilen der Maven-Community ist wiederum, ob Ihr Build die Maven-Art macht oder nicht. Gehackte, stark optimierte, nicht konventionelle Builds haben normalerweise viele Hindernisse für eine erfolgreiche Verwendung des Release-Plugins. 

6
chad

Build-Helper-Plugin unterstützt Regex-Ersetzungen und kann bei Bedarf sogar Versionsnummern analysieren. . http://www.mojohaus.org/build-helper-maven-plugin/

2
John Smith

Es gibt so etwas wie parsedVersion.nextIncrementalVersion

mvn build-helper:parse-version versions:set -DnewVersion=\${parsedVersion.majorVersion}.\${parsedVersion.minorVersion}.\${parsedVersion.nextIncrementalVersion} versions:commit

1
MariuszS

Betrachten Sie diesen Kommentar Sie beschreiben, dass Sie diese Version verwenden, um eine Abhängigkeit bereitzustellen. maven-release-plugin soll Ihnen helfen, die Versionen für Sie zu verwalten. Stellen Sie dieses Plugin also in Ihrer pom.xml bereit. 

Erstellen Sie für den Schritt der manuellen Bereitstellung der Release- und Entwicklungsversion einen Job in Jenkins, der 2 String-Parameter hat:
entwicklungsversion
Veröffentlichungsversion
Fügen Sie den Build-Schritt "Maven-Ziele der obersten Ebene aufrufen" hinzu, um die Freigabe auszuführen (beispielsweise): 

clean release:clean release:prepare release:perform -DdevelopmentVersion=${developmentVersion} -DreleaseVersion=${releaseVersion}

Beim Erstellen des Jobs werden Sie aufgefordert, sowohl die developmentVersion als auch die releaseVersion einzufügen.

Prost,
Despot

0
despot