Frage

Ich bin ein großes Build-System ein Upgrade zu verwenden Maven2 statt Ant, und wir haben zwei damit verbundenen Anforderungen, die ich auf bin fest:

  1. Wir brauchen eine zeitgestempelt Artefakt zu erzeugen, so einen Teil des Paket Phase (oder wo auch immer), statt dem Aufbau

    project-1.0-SNAPSHOT.jar
    

    Wir sollte bauen

    project-1.0-20090803125803.jar
    

    (wobei die 20090803125803 ist nur ein YYYYMMDDHHMMSS Zeitstempel, wann das Glas ist gebaut).

    Die einzige wirkliche Voraussetzung ist, dass der Zeitstempel ein Teil der seine erzeugte Datei Dateiname.

  2. Der gleiche Zeit-Stempel in eine einbezogen werden muss version.properties Datei innerhalb des erzeugten Glases.

Diese Informationen enthalten in die erzeugte pom.properties , wenn Sie laufen, z.B. mvn package aber auf Kommentar:

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

Alle Ideen, wo hilfreich zu beginnen wäre! Dank!

War es hilfreich?

Lösung

Maven Versionen 2.1.0-M1 oder neuer haben in speziell Variable maven.build.timestamp gebaut.

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

Siehe Maven Dokumentation für weitere Details .


Für ältere Versionen Maven einen Blick auf Maven-Zeitstempel-Plugin oder Buildnumber-maven-Plugin .

Wenn Sie Maven-Zeitstempel-Plugin verwenden, können Sie so etwas wie diese verwenden zu manipulieren Artefakt Namen führen.

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

Und diese Konfiguration für Buildnumber-Maven-Plugin sollte eine $ {Zeitstempel} Eigenschaft erstellen, die den Zeitstempel-Wert enthält. Es scheint nicht ein Weg, um zu schaffen, die version.properties Datei direkt mit diesem Plugin.

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

</configuration>

diese drei < a href = "http://pteropus.blogspot.com/2007/03/from-maven-to-mvn-part-5.html" rel = "noreferrer"> Sites auch einen Besuch wert sind out.

Andere Tipps

Wenn Sie eine Version von Maven> = 2.1.0-M1 verwenden, dann können Sie die $ {} maven.build.timestamp Eigenschaft verwenden.

Weitere Informationen finden Sie unter: http://maven.apache.org/guides/introduction /introduction-to-the-pom.html#Available_Variables

Wenn Sie die Zeit in einer Zeitzone anders als UTC (der Standard, wenn Sie ${maven.build.timestamp} verwenden) benötigen könnten Sie die build-helper-maven-plugin verwenden. Weitere Kurze Beispiele dafür, wie die Build-Helper Maven Plugin Ziele verwenden.

Wie auch immer, das ist, wie ich habe die Zeitstempel in GMT-5 erhalte und es in dem endgültigen Namen meines Artefakt setzen:

  <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>

Dieser Beitrag (vor allem des folgenden Teil) ist auch sehr nützlich und praktisch für dieses Problem.

Stamping Versionsnummer und Build-Zeit in einer Properties mit Maven Datei

Die pom wird wie folgt aussehen

...
<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>
....

und der Paketname ist MyProject-1.0. 0-2015_03_02_13_46.war

Wenn ein SNAPSHOT Projekt bereitgestellt wird, wird standardmäßig ein Zeitstempel verwendet, wenn Sie es überschreiben in der bereitstellen Plugin. Wenn Sie sich nicht eindeutig Zeitstempel bekommen, ist es wahrscheinlich auf eine Konfiguration der Maven-Repository. obwohl, verwenden Sie den Zeitstempel oder Buildnumber-Plugin für Veröffentlichungen wie die andere Antwort sagt.

Wir brauchen eine neuere Antwort :) Es ist bauen in jetzt: http: //maven.apache .org / guides / Einführung / Einleitung-to-the-pom.html # Available_Variables

Verwendung ${maven.build.timestamp}

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top