[JAVA] Attribuer automatiquement la date et le numéro de build du jour à la version Maven

La version du projet Maven est essentiellement écrite en pom.xml, mais ~~ fondamentalement, vous devez augmenter la version manuellement. ~~

** Addendum 03/04/2020 ** Si vous utilisez le plug-in de version, z dans x.y.z sera incrémenté automatiquement.

Mais que faire si vous souhaitez donner une date, un horodatage et un numéro de build?

Réécrire pom.xml avec le script sh? N'est-ce pas trop difficile pour les multi-modules? Réécrivez tout d'un coup avec les versions mvn: set -DnewVersion = peu importe? Cela prendra plus de temps, non? Avez-vous besoin d'un script pour construire?

Il semble que les outils Jenkins et CI peuvent être réalisés avec des plug-ins ...

Ce que je veux faire ici n'est pas de gérer le nom de fichier qui est le produit d'Arfict, mais d'attacher la version d'Artefact elle-même.

Goal

Avec mvn install etc., la date et le numéro de build sont automatiquement attribués à la version du module. Exemple) 0.0.1.20200401-2

Pour le réaliser sans écrire vous-même un script, etc.

Il est permis d'utiliser certaines fonctions CI. ... Cela signifie que vous pouvez définir un modèle pour version pour le moment, et c'est OK si vous pouvez transmettre certaines valeurs de l'outil CI avec la commande build.

environnement

Outils 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

Méthode de réalisation

L'essentiel est que vous pouvez donner une date et un numéro de build en ** autorisant l'utilisation de certaines fonctionnalités CI **. De plus, ce projet a une configuration multi-modules, et tous les modules utilisent la version parente et les versions sont parfaitement adaptées. En termes simples, dans des sous-modules

pom.xml


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

Ne mettez simplement pas la balise version. Mettez-le uniquement à la racine pom.xml. Ensuite, tous les sous-modules seront de la même version.

1. Réglage de «» sur pom racine

root/pom.xml


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

2. Définition de «» sur le pom racine

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>
        <!--Date utilisée pour la gestion des versions-->
        <buildDate>${maven.build.timestamp}</buildDate>
        <!--Format de date utilisé pour la gestion des versions-->
        <timestamp>${maven.build.timestamp}</timestamp>
        <maven.build.timestamp.format>yyyyMMdd</maven.build.timestamp.format>

        <!--Numéro de révision utilisé pour la gestion des versions.
        CI/Avec l'outil CD-Drevision=Écraser avec buildNumber-->
        <revision>SNAPSHOT</revision>
    </properties>

Comme vous pouvez le voir dans les commentaires, «» peut être spécifié à partir de la ligne de commande. S'il est omis, «SNAPSHOT» sera ajouté.

3. Modifiez également la «» du sous-module «»

submodule/pom.xml


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

N'oubliez pas de le faire pour tous les sous-modules.

4. Construire

Essayez de construire avec mvn clean install et mvn install -Drevision = 2. Vous pouvez le vérifier par le pom.properties dans le dossier target de chaque module et le nom de fichier du fichier jar / war généré. (S'il n'est pas écrasé par <build> / <finalName>)

(1) Aucune révision spécifiée

$ 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) Avec révision spécifiée

$ 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. Donnez le numéro de build dans CI

Je pense que la commande d'exécution dans CI est mvn install etc., donc vous devriez y ajouter l'option` -Drevision = ʻ. Veuillez vous référer à l'outil CI pour le "numéro de build du jour", car il existe différentes manières de l'obtenir.

Pour le moment, avec Jenkins, si vous utilisez un plug-in appelé Numéro de version, vous pouvez utiliser BUILDS_TODAY. (Cependant, le fuseau horaire à réinitialiser est inconnu ...)

Pour Azure Pipelines, accédez à la page Configurer les numéros d'exécution ou de build Selon lui, vous pouvez aller en utilisant $ (Rev: r).

référence

C'était une référence pour savoir comment faire -Dreivision. https://stackoverflow.com/questions/18456111/what-is-the-maven-way-for-automatic-project-versions-when-doing-continuous-deliv

Cela a été utile pour la gestion des versions en multi-module. https://qiita.com/ms0_mtRiver/items/85593b17d6ebb8fb2cfd

Recommended Posts

Attribuer automatiquement la date et le numéro de build du jour à la version Maven
Comment ajouter un autre projet en tant que bibliothèque Maven avec CircleCI et l'utiliser pour la construction
Importez la chaîne de date automatiquement convertie en Excel avec java.time.LocalDate
Commande pour vérifier le nombre et l'état des threads Java
Je veux appeler une méthode et compter le nombre
Difficile de gérer les valeurs minimales avec Java8 LocalDateTime et Java6 Date
[Java] Utilisez ResolverStyle.LENIENT pour bien gérer la date et l'heure
J'ai essayé d'exprimer les résultats avant et après de la classe Date avec une ligne droite numérique
Apprenez le cycle de vie de construction de Maven 3.5
Méthode pour additionner le nombre d'années et obtenir la fin du mois
Comment installer le langage utilisé dans Ubuntu et comment créer l'environnement
"Attendez que le processus se termine" et arrêtez le processus car il reste
Installez Ubuntu20.04 sur RaspberryPi 4 et compilez Kubernetes pour exécuter le conteneur