Arjun Patel
Personal website and dumping ground for my technical notes.

Continuous delivery versioning in a Maven project

#devops #java #maven

Prerequisites

To understand this note, these notes may help:

You can use a 'continuous delivery'-friendly version value in your POM file, like this:

<version>${revision}</version>

Then, you should define a default version for non-CI builds in your properties:

<properties>
  <revision>1.0.0-SNAPSHOT</revision>
</properties>

And finally, to bring it all together, you need to flatten your POM during the build process:

<plugin>
  <groupId>org.codehaus.mojo</groupId>
  <artifactId>flatten-maven-plugin</artifactId>
  <version>${flatten-maven-plugin.version}</version>
  <configuration>
    <updatePomFile>true</updatePomFile>
    <flattenMode>resolveCiFriendliesOnly</flattenMode>
  </configuration>
  <executions>
    <execution>
      <id>clean-flattened-files</id>
      <goals>
        <goal>clean</goal>
      </goals>
      <phase>clean</phase>
    </execution>
    <execution>
      <id>generate-flattened-resources</id>
      <goals>
        <goal>flatten</goal>
      </goals>
      <phase>process-resources</phase>
    </execution>
  </executions>
</plugin>

This is what tells Maven to resolve the 'continuous delivery'-friendly version number before continuing.

At build time, you need to include the below in your Maven args:

-Drevision=1.2.3-whatever