Cookbook: How To Add Build Time To A JAR Manifest?
Summary
This recipe describes how to add build time to a JAR manifest by calling Apache Ant tasks.
Sample Generated Manifest
Manifest-Version: 1.0 Archiver-Version: Plexus Archiver Created-By: Apache Maven Built-By: vsiveton Build-Jdk: 1.5.0_12 Build-Time: 2008-01-18 06:53:13
Recipe
Configuring MANIFEST.MF
To generate and add build time into a Jar Manifest, we are using MANIFEST.MF, located in the src/main/resources/META-INF directory, which contains a built time value to be interpolated, i.e.
Build-Time: ${build.time}
Configuring The POM
The value ${build.time} from the MANIFEST.MF will be filtering by Maven due to the <filtering> element. The value is taken from the file ${basedir}/target/filter.properties, listed by the <filter> element, i.e.
<resources> <resource> <directory>src/main/resources</directory> <filtering>true</filtering> </resource> </resources> <filters> <filter>${basedir}/target/filter.properties</filter> </filters>
Configuring Maven Antrun Plugin
The filter.properties file will be generated by the Antrun plugin. We use two core Ant Tasks, <tstamp> and <echo>.
<plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-antrun-plugin</artifactId> <executions> <execution> <phase>generate-resources</phase> <goals> <goal>run</goal> </goals> <configuration> <tasks> <!-- Safety --> <mkdir dir="${project.build.directory}"/> <tstamp> <format property="last.updated" pattern="yyyy-MM-dd hh:mm:ss"/> </tstamp> <echo file="${basedir}/target/filter.properties" message="build.time=${last.updated}"/> </tasks> </configuration> </execution> </executions> </plugin>
Configuring Maven Jar Plugin
The last configuration is to set the defaultManifestFile to true to enable it.
<plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-jar-plugin</artifactId> <configuration> <useDefaultManifestFile>true</useDefaultManifestFile> </configuration> </plugin>
Running Maven
Just call Maven to generate the package:
mvn package
Other Tips
You could tweak the Jar Plugin configuration into the War Plugin.