[JAVA] Weisen Sie der Maven-Version automatisch Datum und Build-Nummer für den Tag zu

Die Version des Maven-Projekts ist im Grunde genommen in pom.xml geschrieben, aber ~~ im Grunde müssen Sie die Version manuell erhöhen. ~~

** Nachtrag 2020/04/03 ** Wenn Sie das Release-Plug-In verwenden, wird z in x.y.z automatisch erhöht.

Aber was ist, wenn Sie ein Datum, einen Zeitstempel und eine Build-Nummer angeben möchten?

Pom.xml mit sh script umschreiben? Ist es nicht zu schwer für Multi-Module? Alles auf einmal mit mvn-Versionen umschreiben: set -DnewVersion = was auch immer? Es wird mehr Zeit brauchen, oder? Benötigen Sie am Ende ein Skript zum Erstellen?

Es scheint, dass Jenkins- und CI-Tools mit Plug-Ins erstellt werden können ...

Goal

Bei mvn install usw. werden das Datum und die Build-Nummer automatisch der Version des Moduls zugewiesen. Beispiel) 0.0.1.20200401-2 Realisieren Sie, ohne selbst ein Skript usw. zu schreiben. Es ist zulässig, einige CI-Funktionen zu verwenden. Dies bedeutet, dass Sie vorerst eine Vorlage für "version" definieren können. Wenn Sie mit dem Befehl build einige Werte aus dem CI-Tool übergeben können, ist dies in Ordnung. Umgebung

Werkzeuge etc. Version etc.
MacbookPro macOS Mojave 10.14.5
IntelliJ IDEA Ultimate 2019.3.3
Java AdoptOpenJDK 11
apache maven 3.6.3
Spring Framework 5.2.4.RELEASE
JUnit 5.6.0
Tomcat apache-tomcat-8.5.51

Realisierungsmethode

Unter dem Strich können Sie ein Datum und eine Build-Nummer angeben, indem Sie ** die Verwendung einiger CI-Funktionen zulassen **. Darüber hinaus verfügt dieses Projekt über eine Konfiguration mit mehreren Modulen. Alle Module verwenden die übergeordnete Version und die Versionen stimmen vollständig überein. Einfach ausgedrückt in Submodulen

pom.xml


	<artifactId>openfhir-api</artifactId>
	<packaging>war</packaging>

Setzen Sie einfach nicht das Tag "version". Legen Sie es nur in der Wurzel pom.xml. Dann haben alle Submodule die gleiche Version.

1. Setzen Sie <version> auf root pom

root/pom.xml


    <version>0.0.1.${buildDate}-${revision}</version>

2. Setzen Sie <properties> auf den Root-Pom

root/pom.xml


    <properties>
        <maven.compiler.target>11</maven.compiler.target>
        <maven.compiler.source>11</maven.compiler.source>
        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
        <!--Datum der Versionierung-->
        <buildDate>${maven.build.timestamp}</buildDate>
        <!--Datumsformat für die Versionierung-->
        <timestamp>${maven.build.timestamp}</timestamp>
        <maven.build.timestamp.format>yyyyMMdd</maven.build.timestamp.format>

        <!--Die für die Versionierung verwendete Versionsnummer.
        CI/Mit CD-Tool-Drevision=Mit buildNumber überschreiben-->
        <revision>SNAPSHOT</revision>
    </properties>

Wie Sie in den Kommentaren sehen können, kann "" über die Befehlszeile angegeben werden. Wenn nicht angegeben, wird "SNAPSHOT" hinzugefügt.

3. Ändern Sie auch die des Submoduls

submodule/pom.xml


	<parent>
		<groupId>jp.example.myapp</groupId>
		<artifactId>testsample</artifactId>
		<version>0.0.1.${buildDate}-${revision}</version>
	</parent>

Vergessen Sie nicht, dies für alle Submodule zu tun.

4. Bauen

Versuchen Sie, mit mvn clean install und mvn install -Drevision = 2 zu erstellen. Sie können dies anhand der Datei "pom.properties" im Ordner "target" jedes Moduls und des Dateinamens der generierten Datei "jar" / "war" überprüfen. (Wenn nicht mit <build> / <finalName> überschrieben)

(1) Keine Überarbeitung angegeben

$ mvn clean install
$ ls -la **/target/*.?ar
17:02 submodule/target/submodule-0.0.1.20200402-SNAPSHOT.war
17:02 core/target/core-0.0.1.20200402-SNAPSHOT.jar

submodule/target/maven-archiver/pom.properties


#Generated by Maven
#Thu Apr 02 17:02:10 JST 2020
groupId=jp.example.myapp
artifactId=testsample
version=0.0.1.20200402-SNAPSHOT

(2) Mit angegebener Überarbeitung

$ mvn clean install -Drevision=2
$ ls -la **/target/*.?ar
17:29 submodule/target/openfhir-api-0.0.1.20200402-2.war
17:29 core/target/openfhir-core-0.0.1.20200402-2.jar

submodule/target/maven-archiver/pom.properties


#Generated by Maven
#Thu Apr 02 17:29:47 JST 2020
groupId=jp.example.myapp
artifactId=testsample
version=0.0.1.20200402-2

5. Geben Sie die Build-Nummer in CI an

Ich denke, dass der Ausführungsbefehl in CI "mvn install" usw. ist, daher sollten Sie dort die Option "-Drevision =" hinzufügen. Die "Build-Nummer des Tages" finden Sie im CI-Tool, da es verschiedene Möglichkeiten gibt, diese zu erhalten.

Wenn Sie mit Jenkins ein Plug-In namens Versionsnummer verwenden, können Sie derzeit "BUILDS_TODAY" verwenden. (Die zurückzusetzende Zeitzone ist jedoch unbekannt ...)

Wechseln Sie für Azure-Pipelines zur Seite Lauf- oder Build-Nummern konfigurieren Demnach können Sie mit $ (Rev: r) gehen.

Referenz

Es war eine Referenz für die Durchführung von "-Dreivision". https://stackoverflow.com/questions/18456111/what-is-the-maven-way-for-automatic-project-versions-when-doing-continuous-deliv

Dies war hilfreich für die Versionsverwaltung in mehreren Modulen. https://qiita.com/ms0_mtRiver/items/85593b17d6ebb8fb2cfd

Recommended Posts

Weisen Sie der Maven-Version automatisch Datum und Build-Nummer für den Tag zu
So fügen Sie mit CircleCI ein weiteres Projekt als Maven-Bibliothek hinzu und verwenden es zum Erstellen
Importieren Sie die Datumszeichenfolge, die mit java.time.LocalDate automatisch in Excel konvertiert wird
Befehl zum Überprüfen der Anzahl und des Status von Java-Threads
Ich möchte eine Methode aufrufen und die Nummer zählen
Mit Java8 LocalDateTime und Java6 Date ist es schwierig, Mindestwerte zu verarbeiten
[Java] Verwenden Sie ResolverStyle.LENIENT, um Datum und Uhrzeit gut zu handhaben
Ich habe versucht, die Ergebnisse vor und nach der Date-Klasse mit einer geraden Zahl auszudrücken
Lernen Sie den Build-Lebenszyklus von Maven 3.5 kennen
Methode, um die Anzahl der Jahre zu addieren und das Monatsende zu erhalten
Wie installiere ich die in Ubuntu verwendete Sprache und wie erstelle ich die Umgebung?
"Warten Sie, bis der Prozess abgeschlossen ist" und beenden Sie den Prozess, da er bestehen bleibt
Installieren Sie Ubuntu20.04 auf RaspberryPi 4 und erstellen Sie Kubernetes, um den Container auszuführen