Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Generate a Version.java file in Maven

I have a Java project that I build using an Ant script. I am trying to convert the project to Maven.

One of the tasks generates a Java source file called Version.java that contains a static String representation of the compilation timestamp, as follows:

package com.foo.bar; public final class Version {  public static String VERSION="100301.1046"; } 

The Ant task is very simple:

<target name="version" depends="init" description="Create Version.java">     <echo file="src/${package.dir}/Version.java" message="package ${package.name};${line.separator}" />     <echo file="src/${package.dir}/Version.java" append="true" message="public final class Version {${line.separator}" />     <echo file="src/${package.dir}/Version.java"           append="true"           message=" public static String VERSION=&quot;${buildtime}&quot;;${line.separator}" />     <echo file="src/${package.dir}/Version.java" append="true" message="}${line.separator}" />     <echo message="BUILD ${buildtime}" /> </target> 

Is it possible to do something similar in Maven, using generate-sources, or some other simple method?

like image 555
Ralph Avatar asked Mar 18 '10 12:03

Ralph


1 Answers

I don't think this is the good way to solve this kind of issue.

A better way is to put the version information in a properties file that will be read by your Java program:

Your properties file will contain the following line:

myapp.version=${project.version} 

Then, in your pom.xml, indicate that the file will be filtered by Maven :

<resources>     <resource>         <directory>the/directory/that/contains/your/properties/file</directory>         <filtering>true</filtering>     </resource> </resources> 

When Maven will build your application, it will replace all ${...} by their value. By default, ${project.version} defines the version of the pom.xml (i.e. the value of the <version> tag).

Then, in your Java code, you will just need to load the properties file and retrieve the myApp.version property value.

Note that you can use the Build Number plugin to set something more "complex" than just your current version (for example if you want to put the build time in your property).

like image 63
Romain Linsolas Avatar answered Oct 03 '22 22:10

Romain Linsolas