Using maven to output the version number to a text file
What you are referring to is called filtering
You need to enable filtering on a particular resource, and then use ${project.version}
which will be substituted as part of your build
Sure. Create a text file somewhere in src/main/resources, call it version.txt
(or whatever)
File content:
${project.version}
now in your pom.xml, inside the build element, put this block:
<build>
<resources>
<resource>
<directory>src/main/resources</directory>
<filtering>true</filtering>
<includes>
<include>**/version.txt</include>
</includes>
</resource>
<resource>
<directory>src/main/resources</directory>
<filtering>false</filtering>
<excludes>
<exclude>**/version.txt</exclude>
</excludes>
</resource>
...
</resources>
</build>
after every build, the file (which you can find in target/classes) will contain the current version.
Now if you want to move the file somewhere else automatically, you are probably going to need to execute an ant task via the maven-antrun-plugin.
Something like this:
<build>
...
<plugins>
<plugin>
<artifactId>maven-antrun-plugin</artifactId>
<version>1.4</version>
<executions>
<execution>
<phase>process-resources</phase>
<configuration>
<tasks>
<copy file="${project.build.outputDirectory}/version.txt"
toFile="..." overwrite="true" />
</tasks>
</configuration>
<goals>
<goal>run</goal>
</goals>
</execution>
</executions>
</plugin>
</plugins>
</build>
For a Spring Boot application, follow the accepted answer from above however substituting
${project.version}
with
@project.version@
Here's the link to the documentation https://github.com/spring-projects/spring-boot/wiki/Spring-Boot-1.3-Release-Notes#maven-resources-filtering
Use standard META-INF\MANIFEST.MF
(Then you can use Java code getClass().getPackage().getImplementationVersion()
to get version)
For .war use this configuration:
<plugin>
<artifactId>maven-war-plugin</artifactId>
<version>2.1</version>
<configuration>
<archive>
<manifest>
<addDefaultImplementationEntries>true</addDefaultImplementationEntries>
<addDefaultSpecificationEntries>true</addDefaultSpecificationEntries>
</manifest>
</archive>
</configuration>
</plugin>
That will add manifest during build, or you can call mvn war:manifest
See also How to get package version at running Tomcat?