web-dev-qa-db-fra.com

Comment ajouter des informations d'horodatage aux artefacts Maven?

Je mets à niveau un grand système de build pour utiliser Maven2 au lieu de Ant, et nous avons deux exigences liées sur lesquelles je suis bloqué:

  1. Nous devons générer un artefact horodaté, donc une partie de la phase package (ou n'importe où), au lieu de construire

    project-1.0-SNAPSHOT.jar
    

    nous devrions construire

    project-1.0-20090803125803.jar
    

    (où le 20090803125803 n'est qu'un YYYYMMDDHHMMSS horodatage de la date de construction du pot).

    La seule vraie exigence est que l'horodatage fasse partie du nom de fichier du fichier généré.

  2. Le même horodatage doit être inclus dans un fichier version.properties à l'intérieur du pot généré.

Ces informations sont incluses dans le pom.properties généré lorsque vous exécutez, par exemple, mvn package mais est commenté:

#Generated by Maven
#Mon Aug 03 12:57:17 PDT 2009

Toutes les idées par où commencer seraient utiles! Merci!

37
Ryan

Les versions Maven 2.1.0-M1 ou plus récentes ont intégré une variable spéciale maven.build.timestamp.

<build>
  <finalName>${project.artifactId}-${project.version}-${maven.build.timestamp}</finalName>
</build>

Voir Maven documentation pour plus de détails.


Pour les anciennes versions de Maven, regardez maven-timestamp-plugin ou buildnumber-maven-plugin .

Si vous utilisez le plugin maven-timestamp, vous pouvez utiliser quelque chose comme ceci pour manipuler le nom de l'artefact résultant.

<build>
   <finalName>${project.artifactId}-${project.version}-${timestamp}</finalName>
</build>

Et cette configuration pour buildnumber-maven-plugin devrait créer une propriété $ {timestamp} qui contient la valeur d'horodatage. Il ne semble pas y avoir de moyen de créer le fichier version.properties directement avec ce plugin.

<configuration>
   <format>{0,date,yyyyMMddHHmmss}</format>
   <items>
      <item>timestamp</item>
   </items>

</configuration>

Cestroissites valent également la peine d'être vérifiés.

46
Juha Syrjälä

Si vous utilisez une version de Maven> = 2.1.0-M1, vous pouvez utiliser la propriété $ {maven.build.timestamp}.

Pour plus d'informations, voir: http://maven.Apache.org/guides/introduction/introduction-to-the-pom.html#Available_Variables

38
Horia Chiorean

Si vous avez besoin de l'heure dans un fuseau horaire autre que UTC (la valeur par défaut lorsque vous utilisez ${maven.build.timestamp}) vous pouvez utiliser le build-helper-maven-plugin. Voir plus dans Brefs exemples sur la façon d'utiliser les objectifs du plugin Build Helper Maven .

Quoi qu'il en soit, voici comment j'ai le horodatage en GMT-5 et le mettre dans le nom final de mon artefact:

  <build>
      <plugins>
          <plugin>
              <groupId>org.codehaus.mojo</groupId>
              <artifactId>build-helper-maven-plugin</artifactId>
              <version>1.9.1</version>
              <executions>
                  <execution>
                      <id>timestamp-property</id>
                      <goals>
                          <goal>timestamp-property</goal>
                      </goals>
                      <configuration>
                          <name>current.time</name>
                          <pattern>yyyyMMdd-HHmmss</pattern>
                          <timeZone>GMT-5</timeZone>
                      </configuration>
                  </execution>
              </executions>
          </plugin>
          <plugin>
              <groupId>org.Apache.maven.plugins</groupId>
              <artifactId>maven-jar-plugin</artifactId>
              <version>2.4</version>
              <configuration>
                  <finalName>${project.name}-${current.time}</finalName>
              </configuration>
          </plugin>
      </plugins>
  </build>
16
lmiguelmh

Ce message (en particulier la partie ci-dessous) est également très utile et pratique pour ce numéro.

Estampage du numéro de version et du temps de construction dans un fichier de propriétés avec Maven

Le pom ressemblera à ceci

...
<properties>

        ....

        <!-- Timestamp of build  -->
        <timestamp>${maven.build.timestamp}</timestamp>
        <maven.build.timestamp.format>yyyy_MM_dd_HH_mm</maven.build.timestamp.format>

</properties>

...

<build>
        <finalName>${project.artifactId}-${project.version}-${timestamp}</finalName>

        <plugins>
            <plugin>
                <groupId>org.Apache.maven.plugins</groupId>
                <artifactId>maven-compiler-plugin</artifactId>
                ....
            </plugin>
        </plugins>
</build>
....

et le nom du package est MyProject-1.0. 0-2015_03_02_13_46.war

8
mcvkr

Lorsqu'un projet SNAPSHOT est déployé, par défaut, un horodatage est utilisé, sauf si vous le remplacez dans deploy plugin . Si vous n'obtenez pas d'horodatages uniques, il s'agit probablement d'une configuration de votre référentiel Maven. Comme le dit l'autre réponse, utilisez le plugin timestamp ou buildnumber pour les versions.

2
Rich Seller

Nous avons besoin d'une réponse plus récente :) Elle est intégrée maintenant: http://maven.Apache.org/guides/introduction/introduction-to-the-pom.html#Available_Variables

utilisation ${maven.build.timestamp}

1
Jan