Question

I am using Mercurial HG for versioning my projects. To keep my version-number in my build/compiled programs uptodate I am using this approach. I've modified the build.xml to override a predefined target.

<target name="-pre-compile">
    <!-- getting the version in a fancy format -->
    <exec executable="hg" outputproperty="version.mercurial">
       <arg value="parent"/>
       <arg value="--template"/>
       <arg value="{latesttag}.{rev}-{branch}-{node|short}"/>
    </exec>
    <echo level="warning">Version ${version.mercurial}</echo>
    <manifest file="${manifest.file}" mode="update">
       <attribute name="Implementation-Version" value="${version.mercurial}"/>
   </manifest>
</target>

** note hg.exe is in my classpath.

To retrieve the version property I use the following code snippet in my mainclass

String version = Main.class.getPackage().getImplementationVersion();

When I build my project and run it with this java -jar myproject.jar the version number is correct and from that point everything is fine.

But when I run it in my IDE the version string ist null, so the manifest file isn't read. So this makes me thinking if this approach is valid or is there another, even a simpler way to keep the version number uptodate?

EDIT: Is there a more sophisticated way to include the version number into your program?

Was it helpful?

Solution

Consider using the output attribute to Ant's <exec ..> task to write a properties file instead. Then you can use the <properties file="..."> method to read it in Ant, and can load it like a normal properties file when running in your IDE.

Good for you for not using the KeywordsExtension for this. It's a horrible solution in a DVCS world.

Licensed under: CC-BY-SA with attribution
Not affiliated with StackOverflow
scroll top