Manipulate project version property to remove SNAPSHOT?

RCross picture RCross · Nov 12, 2012 · Viewed 13.4k times · Source

I've got a project at version 0.0.1-SNAPSHOT, and when we build it via TeamCity, we also get a build.vcs.number property, which is the Subversion revision that triggered the build.

In our assemblies, we create a zip file called something like foo-distribution-0.0.1-SNAPSHOT.zip, but I was wondering whether there's a way I can insert the build.vcs.number property into the artifact name to give foo-distribution-0.0.1.12345-SNAPSHOT.zip?

Is there a built-in property that is just the numeric part of the version number, or some other way of splitting off the -SNAPSHOT part?

EDIT: I have already tried setting the pom.xml version as ${my.version}-SNAPSHOT, and then defining my.version in the properties - this works for ever case except for the Maven Release Plugin, which complains that it cannot parse the version (understandably, it can't auto-guess the next development version either).

Answer

MattSenter picture MattSenter · Aug 14, 2013

I realize this question is a tad dated, but I just ran into a similar situation, and this is how I resolved it:

<plugin>
    <groupId>org.codehaus.mojo</groupId>
    <artifactId>build-helper-maven-plugin</artifactId>
    <version>1.8</version>
    <executions>
      <execution>
        <id>parse-version</id>
        <goals>
          <goal>parse-version</goal>
        </goals>
      </execution>
    </executions>
</plugin>

What this build-helper plugin's "parse-version" mojo will do is give you the following properties that you can use as you see fit:

parsedVersion.majorVersion
parsedVersion.minorVersion
parsedVersion.incrementalVersion
parsedVersion.qualifier
parsedVersion.buildNumber

That should cover all of your desired version "parts." I'm currently using this to build chrome extensions in which the manifest version cannot include "-SNAPSHOT" and must be at most 4 numbers separated by dots. In my use case, I use this combination to produce the desired result:

"version":"${parsedVersion.majorVersion}.${parsedVersion.minorVersion}.${parsedVersion.incrementalVersion}"

So, I'm essentially stripping of "-SNAPSHOT" so my local dev copies of my extension will install properly for testing. You can build whatever you want with the pieces. =)