Estoy usando maven 3.0.4 y me gustaría que la marca de tiempo de compilación sea accesible para mi aplicación. Para esto, coloco un marcador de posición en un .properties
archivo y dejo que maven filtre en la compilación. Si bien esto funciona bien ${project.version}
, ${maven.build.timestamp}
no se sustituye en el filtrado.
La propiedad parece estar disponible en la compilación; puedo usarla para modificar el nombre del artefacto:
<finalName>${project.artifactId}-${maven.build.timestamp}</finalName>
Entonces, ¿por qué no está disponible para el filtrado de recursos? Y, lo que es más importante, ¿cómo lo hago accesible?
target/${project}
carpeta, pero en mi configuración actual, Tomcat no está usando esta carpeta ...maven.build.timestamp.format
varias veces?${timestamp}
con la cadena literal${maven.build.timestamp}
.buildTimestamp=@timestamp@
Puedo confirmar que Maven 3.x
{maven.build.timestamp}
está "funcionando" ahora. Trabajan alrededor del problema, aparentemente. Ya no seproperties
necesitan soluciones adicionales .Sin embargo, tenga cuidado de que su complemento de "filtrado" (maven-resources-plugin) esté actualizado. Debe ser relativamente nuevo, por lo que si
mvn help:effective-pom
muestra una versión anterior (por ejemplo: 2.6), colóquela en algo más nuevo, arregló para mí, 3.x por ejemplo:<properties><timestamp>...
Ya no se requiere una solución alternativa ...Esto también aclaró, en cierto modo, por qué estaba funcionando en IntelliJ pero no en la línea de comandos. IntelliJ probablemente usa sus propias constantes de maven "modificadas / internas", por lo que estaba funcionando allí, pero no desde la línea de comandos de Maven.
También tenga en cuenta que si agrega un directorio de recursos de filtrado a su pom, es posible que también deba "volver a agregar" el directorio predeterminado, se pierde, por ejemplo:
NB, si está usando Spring Boot como padre, debe usar @ maven.build.timestamp @ en su lugar . También tenga en cuenta que si está usando Spring Boot, hay un archivo
META-INF/build-info.properties
que es creado opcionalmente por elspring-boot-maven-plugin
que puede leer (Spring proporciona unBuildProperties
bean para mayor comodidad al leerlo).fuente
<webResources><resource><filtering>
) :-( vea MWAR-415 -> así que todavía tengo que usar la solución allí<properties><timestamp>...
solución alternativa. Ver también issues.apache.org/jira/browse/MASSEMBLY-603Con el fin de enriquecer el contenido de Stackoverflow para otros, que como yo, encontraron esta publicación como una forma de resolver el "problema" de
${maven.build.timestamp}
. Esto no es un error de maven, sino un comportamiento esperado de m2e, como se puede ver en esta publicación .Por tanto, creo que no podemos esperar que la solución se "corrija", ya que, por lo que entiendo, la corrección involucra cuestiones conceptuales.
En mi caso, lo que hice fue usar el complemento (
buildnumber-maven-plugin
) como se describe en esta otra publicación .fuente
buildnumber-maven-plugin
que tengo problemas similares, es decir, que la variable que genera solo está disponible en ciertos contextos, NO filtrando. Es posible que pueda o no superarlo modificando la fase de ejecución o los objetivos, pero la solución incorporada parece mucho más simple.Agregar propiedades de Maven en el nivel del proyecto pom no tiene en cuenta la zona horaria local correcta, por lo que la marca de tiempo puede parecer incorrecta:
El uso de build-helper-maven-plugin aplica la zona horaria correcta y el horario de verano actual a la marca de tiempo:
Al empaquetar, Maven reemplazará cualquier marca de tiempo del token en la carpeta / resources, por ejemplo, resources / version.properties:
build.timestamp = $ {timestamp}
A continuación, puede cargar este archivo de propiedades en su aplicación.
fuente