Ich verwende Maven 3.0.4 und möchte den Build-Zeitstempel für meine Anwendung zugänglich machen. Dazu .properties
füge ich einen Platzhalter in eine Datei ein und lasse Maven beim Erstellen filtern. Während dies gut funktioniert ${project.version}
, ${maven.build.timestamp}
wird es beim Filtern nicht ersetzt.
Die Eigenschaft scheint beim Erstellen verfügbar zu sein - ich kann sie verwenden, um den Namen des Artefakts zu ändern:
<finalName>${project.artifactId}-${maven.build.timestamp}</finalName>
Warum ist es nicht für die Ressourcenfilterung verfügbar? Und was noch wichtiger ist: Wie mache ich es zugänglich?
target/${project}
Ordner in Ordnung, aber in meiner tatsächlichen Konfiguration verwendet Tomcat diesen Ordner nicht ...maven.build.timestamp.format
?${timestamp}
durch die Literalzeichenfolge ersetzt${maven.build.timestamp}
.buildTimestamp=@timestamp@
Ich kann bestätigen, dass Maven 3.x
{maven.build.timestamp}
jetzt "funktioniert". Sie arbeiten arounded das Problem offenbar. Es ist keine zusätzlicheproperties
Problemumgehung mehr erforderlich.Seien Sie jedoch vorsichtig, dass Ihr "Filter" -Plugin (Maven-Resources-Plugin) auf dem neuesten Stand ist. Es muss relativ neu sein. Wenn also
mvn help:effective-pom
eine alte Version (z. B. 2.6) angezeigt wird, stoßen Sie sie auf etwas Neueres, beheben Sie sie für mich. 3.x z.<properties><timestamp>...
Problemumgehung ist nicht mehr erforderlich ...Dies klärte auch irgendwie auf, warum es in IntelliJ funktionierte, aber nicht in der Kommandozeile. IntelliJ verwendet wahrscheinlich ihre eigenen "modifizierten / internen" Maven-Konstanten, also funktionierte es dort, aber nicht über die Maven-Befehlszeile.
Beachten Sie auch, dass Sie beim Hinzufügen eines Filterressourcenverzeichnisses zu Ihrem POM möglicherweise auch das Standardverzeichnis "erneut hinzufügen" müssen. Es geht verloren, z.
Hinweis: Wenn Sie Spring Boot als übergeordnetes Element verwenden, müssen Sie stattdessen @ maven.build.timestamp @ verwenden . Beachten Sie auch, dass bei Verwendung von Spring Boot eine Datei
META-INF/build-info.properties
optional von der Datei erstellt wird, diespring-boot-maven-plugin
Sie lesen können (Spring bietet eineBuildProperties
Bean zum bequemen Lesen).quelle
<webResources><resource><filtering>
) noch nicht :-( siehe MWAR-415 -> muss also noch die Problemumgehung dort verwenden<properties><timestamp>...
Problemumgehung verwenden. Siehe auch issue.apache.org/jira/browse/MASSEMBLY-603Um den Stackoverflow-Inhalt für andere zu bereichern, fand dieser Beitrag wie ich einen Weg, um das "Problem" von zu lösen
${maven.build.timestamp}
. Dies ist kein Maven-Bug, sondern ein erwartetes Verhalten von m2e, wie in diesem Beitrag zu sehen ist .Daher glaube ich, dass wir nicht erwarten können, dass die Lösung "korrigiert" wird, da die Korrektur meines Wissens konzeptionelle Probleme mit sich bringt.
In meinem Fall habe ich das Plugin (
buildnumber-maven-plugin
) verwendet, wie in diesem anderen Beitrag beschrieben .quelle
buildnumber-maven-plugin
habe ähnliche Probleme festgestellt , nämlich dass die Variable, die sie generiert, nur in bestimmten Kontexten verfügbar ist und NICHT gefiltert wird. Möglicherweise können Sie dies überwinden, indem Sie an der Ausführungsphase oder den Ausführungszielen basteln, aber die integrierte Lösung scheint viel einfacher zu sein.Das Hinzufügen von Maven-Eigenschaften auf POM-Projektebene berücksichtigt nicht die korrekte lokale Zeitzone, sodass der Zeitstempel möglicherweise falsch erscheint:
Mit dem Build-Helper-Maven-Plugin werden die richtige Zeitzone und die aktuelle Sommerzeit auf den Zeitstempel angewendet:
Beim Packen ersetzt Maven alle Token-Zeitstempel im Ordner / resources, z. B. resources / version.properties:
build.timestamp = $ {timestamp}
Sie können diese Eigenschaftendatei dann in Ihre Anwendung laden.
quelle