Wie kann ich Zeitstempelinformationen zu Maven Artefakte hinzufügen?
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:
-
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 einYYYYMMDDHHMMSS
Zeitstempel, wann das Glas ist gebaut).Die einzige wirkliche Voraussetzung ist, dass der Zeitstempel ein Teil der seine erzeugte Datei Dateiname.
-
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!
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}