Używam maven 3.0.4 i chcę, aby sygnatura czasowa kompilacji była dostępna dla mojej aplikacji. W tym celu umieszczam element zastępczy w .properties
pliku i pozwalam mavenowi filtrować podczas kompilacji. Chociaż działa to dobrze ${project.version}
, ${maven.build.timestamp}
nie jest zastępowane filtrowaniem.
Właściwość wydaje się być dostępna w kompilacji - mogę jej użyć do zmodyfikowania nazwy artefaktu:
<finalName>${project.artifactId}-${maven.build.timestamp}</finalName>
Dlaczego więc nie jest dostępne do filtrowania zasobów? A co ważniejsze, jak mogę to zrobić?
target/${project}
folderze, ale w mojej obecnej konfiguracji Tomcat nie używa tego folderu ...maven.build.timestamp.format
wiele razy?${timestamp}
ciąg literału${maven.build.timestamp}
.buildTimestamp=@timestamp@
Mogę potwierdzić, że Maven 3.x
{maven.build.timestamp}
działa teraz. Oni pracują arounded problemu, widocznie. Żadne dodatkoweproperties
obejście nie jest już potrzebne.Uważaj jednak, aby Twoja wtyczka filtrująca (maven-resources-plugin) była aktualna. Musi być stosunkowo nowy, więc jeśli
mvn help:effective-pom
pokazuje starą wersję (np: 2.6), podbij ją na coś nowszego, naprawiłem to dla mnie, 3.x ex:<properties><timestamp>...
obejście nie jest już wymagane ...To również wyjaśniło, w pewnym sensie, dlaczego działa w IntelliJ, ale nie w linii poleceń. IntelliJ prawdopodobnie używa swoich własnych "zmodyfikowanych / wewnętrznych" stałych maven, więc tam działał, ale nie z wiersza poleceń mavena.
Zwróć też uwagę, że jeśli dodasz filtrowanie katalogu zasobów do swojego pom, może być konieczne „ponowne dodanie” katalogu domyślnego, zostanie on utracony, np.
NB, jeśli używasz spring boot jako swojego rodzica, musisz zamiast tego użyć @ maven.build.timestamp @ . Zauważ również, że jeśli używasz rozruchu sprężynowego, istnieje plik,
META-INF/build-info.properties
który jest opcjonalnie tworzony przez tenspring-boot-maven-plugin
, który możesz przeczytać (wiosna zapewniaBuildProperties
fasolkę dla wygody czytania).źródło
<webResources><resource><filtering>
) :-( patrz MWAR-415 -> więc nadal muszę tam zastosować obejście<properties><timestamp>...
obejście. Zobacz też Issues.apache.org/jira/browse/MASSEMBLY-603Aby wzbogacić zawartość Stackoverflow dla innych, którzy tak jak ja, znaleźli ten post jako sposób na rozwiązanie „problemu”
${maven.build.timestamp}
. To nie jest błąd maven, ale oczekiwane zachowanie m2e, jak widać w tym poście .Dlatego uważam, że nie możemy oczekiwać, że rozwiązanie zostanie „poprawione”, ponieważ z tego, co rozumiem, korekta wiąże się z kwestiami koncepcyjnymi.
W moim przypadku użyłem wtyczki (
buildnumber-maven-plugin
), jak opisano w tym innym poście .źródło
buildnumber-maven-plugin
mam podobne problemy, a mianowicie, że zmienna, którą generuje, jest dostępna tylko w określonych kontekstach, a NIE filtruje. Możesz to przezwyciężyć lub nie, majstrując przy fazie realizacji lub celach, ale wbudowane rozwiązanie wydaje się o wiele prostsze.Dodanie właściwości Mavena na poziomie projektu pom nie uwzględnia poprawnej lokalnej strefy czasowej, więc sygnatura czasowa może wyglądać nieprawidłowo:
Użycie wtyczki build-helper-maven-plugin powoduje zastosowanie poprawnej strefy czasowej i bieżącego czasu letniego do sygnatury czasowej:
Podczas pakowania Maven zastąpi dowolny znacznik czasu tokena w folderze / resources, np. Resources / version.properties:
build.timestamp = $ {timestamp}
Następnie możesz załadować ten plik właściwości do aplikacji.
źródło