Spring Boot control target JAR file name

So simple, In one branch, you have pom.xml with

<build>
  <finalName>app-1.0-SNAPSHOT</finalName>
</build>


In other branch, you have pom.xml with

<build>
  <finalName>1.0-RELEASE</finalName>
</build>

You can propagate the version of the project to your build name like this:

<build>
    <finalName>app-${project.version}</finalName>
</build>

or the version of your parent project if you have one:

<build>
    <finalName>app-${parent.version}</finalName>
</build>

Then you would keep track of you project version rather than the build name.

However, note that managing the build verson in SCM using branches is a pain in the neck and error prone. It is rather recommanded that your code repository woud be agnostic of your build version.

A possible alternative would be to use some release management tool, like maven release plugin, or even more simple maven version.

Example:

Here I'll give and example using maven verion.

Say you're using SCM tool (it could be git) and a build factory (like Jenkins or any other tool). Say you have a job to build and deploy snapshots and another one for releases.

In the snapshot job, you can set-up a pre-build task with the following maven target:

versions:set -DnewVersion=app-1.0-SNAPSHOT

and the following in the release job:

versions:set -DnewVersion=app-1.0-RELEASE

Now doing this is OK, because you are only doing it locally and never have to manage the build version in your code.

Now, you can tag your (release) version after having applied maven version and build successfuly (hopefuly including unit, integration and functional tests). This way you may keep track exactly of the code that has been deployed on each release.

Tip!! Space is money! Do yourself a favour: clean your snapshot repository regularly. Creating a job that does so every once in a while shouldn't be to difficult.


You can specify the artefact-name with the maven boot plugin:

In this case, it will be NewJarName.jar

        <plugin>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-maven-plugin</artifactId>
            <executions>
                <execution>
                    <id>repackage</id>
                    <goals>
                        <goal>repackage</goal>
                    </goals>
                    <configuration>
                        <finalName>NewJarName</finalName>
                    </configuration>
                </execution>
            </executions>
        </plugin>