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 th
For those wanting to use 4 numbers (x.y.z.a) in their version, here is how you could configure the Build Helper Maven Plugin.
The idea is to replace the x.y.z.a-SNAPSHOT
to x.y.z-a
which will allow the build-helper plugin to parse the buildNumber
.
The antrun
plugin is only here for debug purpose.
<build>
<plugins>
<plugin>
<groupId>org.codehaus.mojo</groupId>
<artifactId>build-helper-maven-plugin</artifactId>
<version>3.0.0</version>
<executions>
<execution>
<id>regex-property</id>
<goals>
<goal>regex-property</goal>
</goals>
<configuration>
<name>modified.version</name>
<value>${project.version}</value>
<regex>\.([0-9]+)-SNAPSHOT</regex>
<replacement>-$1</replacement>
<failIfNoMatch>false</failIfNoMatch>
</configuration>
</execution>
<execution>
<id>parse-version</id>
<goals>
<goal>parse-version</goal>
</goals>
<configuration>
<versionString>${modified.version}</versionString>
</configuration>
</execution>
</executions>
</plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-antrun-plugin</artifactId>
<version>1.1</version>
<executions>
<execution>
<phase>validate</phase>
<goals>
<goal>run</goal>
</goals>
<configuration>
<tasks>
<echo>Major: ${parsedVersion.majorVersion}</echo>
<echo>Minor: ${parsedVersion.minorVersion}</echo>
<echo>Incremental: ${parsedVersion.incrementalVersion}</echo>
<echo>Qualifier: ${parsedVersion.qualifier}</echo>
<echo>BuildNumber: ${parsedVersion.buildNumber}</echo>
<echo>----------------</echo>
<echo>Next Major: ${parsedVersion.nextMajorVersion}</echo>
<echo>Next Minor: ${parsedVersion.nextMinorVersion}</echo>
<echo>Next Incremental: ${parsedVersion.nextIncrementalVersion}</echo>
<echo>Next BuildNumber: ${parsedVersion.nextBuildNumber}</echo>
</tasks>
</configuration>
</execution>
</executions>
</plugin>
</plugins>
</build>
Running mvn validate
on a project with version 7.0.0.29-SNAPSHOT:
[INFO] --- build-helper-maven-plugin:3.0.0:regex-property (regex-property) @
[INFO] --- build-helper-maven-plugin:3.0.0:parse-version (parse-version) @
[INFO] --- maven-antrun-plugin:1.1:run (default) @
[INFO] Executing tasks
[echo] Major: 7
[echo] Minor: 0
[echo] Incremental: 0
[echo] Qualifier:
[echo] BuildNumber: 29
[echo] ----------------
[echo] Next Major: 8
[echo] Next Minor: 1
[echo] Next Incremental: 1
[echo] Next BuildNumber: 30
For others who are looking to do more than this or would like to remove SNAPSHOT from build number, this plugin is pretty helpful http://www.mojohaus.org/build-helper-maven-plugin/usage.html
I particularly found this useful
Set a property by applying a regex replacement to a value
<project>
...
<build>
<plugins>
<plugin>
<groupId>org.codehaus.mojo</groupId>
<artifactId>build-helper-maven-plugin</artifactId>
<version>1.9.1</version>
<executions>
<execution>
<id>regex-property</id>
<goals>
<goal>regex-property</goal>
</goals>
<configuration>
<name>human.version</name>
<value>$\{project.version}</value>
<regex>-SNAPSHOT</regex>
<replacement> pre-release development version</replacement>
<failIfNoMatch>false</failIfNoMatch>
</configuration>
</execution>
</executions>
</plugin>
</plugins>
</build>
...
</project>
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. =)