Hinzufügen des aktuellen Datums mit Maven2 Filterungs
Frage
Ich habe ein Maven2 Projekt, und ich muß hinzufügen, in einer Eigenschaftendatei, die aktuelle Version und das aktuelle Datum.
Für die aktuelle Version, ich habe verwendet ${project.version}
, die richtig funktioniert.
Meine Frage ist, wie kann ich das aktuelle Datum (das heißt der Zeitpunkt, wenn der Build von Maven2 getan wird), die in meinem Properties-Datei:
client.version=Version ${project.version}
client.build=???
(zusätzlich, wenn ich das Format für das Datum angeben kann, wird es wirklich groß sein)
Lösung
Sie können mit dem Maven Plugin Buildnummer für diese :
<build>
<plugins>
<plugin>
<groupId>org.codehaus.mojo</groupId>
<artifactId>buildnumber-maven-plugin</artifactId>
<executions>
<execution>
<phase>initialize</phase>
<goals>
<goal>create</goal>
</goals>
</execution>
</executions>
<configuration>
<doCheck>false</doCheck>
<doUpdate>false</doUpdate>
<timestampFormat>{0,date,yyyy-MM-dd HH:mm:ss}</timestampFormat>
</configuration>
</plugin>
</plugins>
</build>
Das Datum wird dann in der Eigenschaft $ {} buildnumber.
Andere Tipps
Feature funktioniert nicht mit Maven 2.2.1 Ressource Filterung.
Siehe auch: https://issues.apache.org/jira/browse/MRESOURCES -99
Aber Sie könnten eine benutzerdefinierte Eigenschaft in der Mutter pom erstellen:
<properties>
<maven.build.timestamp.format>yyMMdd_HHmm</maven.build.timestamp.format>
<buildNumber>${maven.build.timestamp}</buildNumber>
</properties>
Wo ist buildnumber die neue Eigenschaft, die in die Ressourcen gefiltert werden kann.
Da Maven 2.1 M1, können Sie jetzt zur Verfügung gestellt haben ${maven.build.timestamp}
Sie auch ${maven.build.timestamp.format}
definieren
<properties>
...
<maven.build.timestamp.format>yyyyMMdd-HHmm</maven.build.timestamp.format>
...
</properties>
Thomas Marti Antwort ist ein Schritt in die richtige Richtung, aber es gibt einen einfacheren Ansatz, der keine Dummy-<scm>
Deklaration im POM erfordert. Verwenden Sie die buildnumber-maven-plugin
, sondern verwenden Sie die create-timestamp
Ziel. Die Dokumentation ist nicht klar; hier ist, wie es aussieht ein Datum in YYYY-MM-DD
Format zu erhalten und es in der build.date
Eigenschaft setzen:
<plugin>
<groupId>org.codehaus.mojo</groupId>
<artifactId>buildnumber-maven-plugin</artifactId>
<version>1.2</version>
<executions>
<execution>
<phase>validate</phase>
<goals>
<goal>create-timestamp</goal>
</goals>
</execution>
</executions>
<configuration>
<timestampFormat>yyyy-MM-dd</timestampFormat>
<timestampPropertyName>build.date</timestampPropertyName>
</configuration>
</plugin>
Aus dem Kasten wird dies nicht mit M2e in Eclipse arbeiten, so dass Sie den folgenden innerhalb des POM <build>
Abschnitts hinzufügen müssen werden:
<pluginManagement>
<plugins>
<plugin>
<groupId>org.eclipse.m2e</groupId>
<artifactId>lifecycle-mapping</artifactId>
<version>1.0.0</version>
<configuration>
<lifecycleMappingMetadata>
<pluginExecutions>
<pluginExecution>
<pluginExecutionFilter>
<groupId>org.codehaus.mojo</groupId>
<artifactId>buildnumber-maven-plugin</artifactId>
<versionRange>[1.2,)</versionRange>
<goals>
<goal>create-timestamp</goal>
</goals>
</pluginExecutionFilter>
<action>
<execute>
<runOnConfiguration>true</runOnConfiguration>
<runOnIncremental>true</runOnIncremental>
</execute>
</action>
</pluginExecution>
</pluginExecutions>
</lifecycleMappingMetadata>
</configuration>
</plugin>
</plugins>
</pluginManagement>
Das sagt M2e, dass Sie es wollen, gehen Sie vor und das Plugin ausgeführt werden, wenn innerhalb von Eclipse zu bauen.
Wenn Sie nun innerhalb oder außerhalb von Eclipse bauen, wird der Zeitstempel korrekt erzeugt und arbeitet mit Ressourcenfilterung!
Es ist schade, dass die Funktionalität so einfach ist so schwer zu sein ...
Eine andere Lösung ist stark in der pom.xml zu verwenden (vielleicht nicht so richtigen wie die Lösung von Thomas Marti vorgeschlagen):
<build>
<resources>
<resource>
<directory>src/main/resources</directory>
<filtering>true</filtering>
</resource>
</resources>
<plugins>
<plugin>
<groupId>org.codehaus.groovy.maven</groupId>
<artifactId>gmaven-plugin</artifactId>
<executions>
<execution>
<phase>validate</phase>
<goals>
<goal>execute</goal>
</goals>
<configuration>
<source>
import java.util.Date
import java.text.MessageFormat
def vartimestamp = MessageFormat.format("{0,date,yyyyMMdd-HH:mm:ss}", new Date())
project.properties['buildtimestamp'] = vartimestamp
</source>
</configuration>
</execution>
</executions>
</plugin>
</plugins>
</build>
und verwenden Sie dann die buildtimestamp
Eigenschaft:
client.version=${pom.version}
client.build=${buildtimestamp}
Das funktionierte für mich. Alles, was ich war der Zeitstempel wollte.
In der pom ...
<properties>
<maven.build.timestamp.format>yyyyMMdd-HHmm</maven.build.timestamp.format>
<dev.build.timestamp>${maven.build.timestamp}</dev.build.timestamp>
</properties>
...
<overlay>
<groupId>mystuff</groupId>
<artifactId>mystuff.web</artifactId>
<filtered>true</filtered>
</overlay>
Und in einer JSP-Datei ...
<div>Built: ${dev.build.timestamp}</div>
Beispiel Ergebnis ist ...
<div>Built: 20130419-0835</div>
Stick ${build.time}
in einer Eigenschaftsdatei und die folgenden in pom.xml
:
<build>
<plugins>
<plugin>
<groupId>org.codehaus.mojo</groupId>
<artifactId>buildnumber-maven-plugin</artifactId>
<version>1.3</version>
<configuration>
<timestampFormat>yyyy-MM-dd HH:mm:ss</timestampFormat>
<timestampPropertyName>build.time</timestampPropertyName>
</configuration>
<executions>
<execution>
<phase>initialize</phase>
<goals>
<goal>create-timestamp</goal>
</goals>
</execution>
</executions>
</plugin>
</plugins>
</build>
Siehe auch die Buildnumber-Maven-Plugin Dokumentation .
(Andere Antworten bekamen schließe ich besonders Garret Wilson aber seine Eclipse-Config war für mich nicht notwendig, und es hat mich seine Antwort zu ignorieren, so dass ich bin Entsendung genau das, was für mich gearbeitet.)
Als Bonus , wenn Sie zwei Eigenschaften ein für Datum und eine für die Zeit erhalten möchten, das ist, wie Sie es tun:
<plugin>
<groupId>org.codehaus.mojo</groupId>
<artifactId>buildnumber-maven-plugin</artifactId>
<version>1.3</version>
<executions>
<execution>
<id>build.date</id>
<phase>initialize</phase>
<goals>
<goal>create-timestamp</goal>
</goals>
<configuration>
<timestampFormat>yyyy-MM-dd</timestampFormat>
<timestampPropertyName>build.date</timestampPropertyName>
</configuration>
</execution>
<execution>
<id>build.time</id>
<phase>initialize</phase>
<goals>
<goal>create-timestamp</goal>
</goals>
<configuration>
<timestampFormat>yyyy-MM-dd HH:mm:ss</timestampFormat>
<timestampPropertyName>build.time</timestampPropertyName>
</configuration>
</execution>
</executions>
</plugin>
es ist Arbeit für mich bei Maven 2.1.0
$ {maven.build.timestamp}