I am using maven 3.0.4 and would like to make the build timestamp accessible to my application. For this, I'm putting a placeholder in a .properties
file and let maven filter on build. While this is working fine for ${project.version}
, ${maven.build.timestamp}
is not substituted on filtering.
The property seems to be available on build - I can use it to modify the artifact name:
<finalName>${project.artifactId}-${maven.build.timestamp}</finalName>
So why is it not available for resource filtering? And, more importantly, how do I make it accessible?
I have discovered this article, explaining that due to a bug in maven, the build timestamp does not get propagated to the filtering. The workaround is to wrap the timestamp in another property:
Filtering then works as expected for
Adding Maven properties at the pom project level does't take into account correct local Timezone, so timestamp may appear wrong :
Using the build-helper-maven-plugin applies the correct timezone and current daylight saving to the timestamp :
When packaging, Maven will replace any token timestamp in /resources folder, e.g. resources/version.properties :
build.timestamp=${timestamp}
You can then load this properties file in your Application.
I can confirm as of Maven 3.x
{maven.build.timestamp}
is "working" now. They work arounded the problem, apparently. No additionalproperties
workaround needed anymore.However, be careful your "filtering" plugin (maven-resources-plugin) is up to date. It needs to be relatively new, so if
mvn help:effective-pom
shows an old version (ex: 2.6), bump it to something newer, fixed it for me, 3.x ex:<properties><timestamp>...
workaround is no longer required...This also cleared up, kind of, why it was working in IntelliJ but not the command line. IntelliJ probably uses their own "modified/internal" maven constants, so it was working there, but not from maven command line.
Also note if you add a filtering resource directory to you pom, you may need to also "re-add" the default directory, it gets lost, ex:
NB if you're using spring boot as your parent, you have to use @maven.build.timestamp@ instead. Also note if you're using spring boot there's a file
META-INF/build-info.properties
that is optionally created by thespring-boot-maven-plugin
that you can read (spring provides aBuildProperties
bean for convenience reading it).In order to enrich the Stackoverflow content for others, that like me, found this post as a way to solve the "problem" of
${maven.build.timestamp}
. This is not a maven bug, but an expected behavior of m2e, as can be seen in this post.Therefore, I believe that we can not expect the solution to be "corrected", since, from what I understand, the correction involves conceptual issues.
In my case, what I did was use the plugin (
buildnumber-maven-plugin
) as described in this other post.