Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Appending software version to a JAR filename

Tags:

java

ant

netbeans

I would like to append the output JAR filename of a Netbeans project with some version number: something like 1.0, 2.0b or even a Subversion revision number. I can't seem to find anything on this, though. I am also not sure if this would the responsibility of the build system (Ant) or if the IDE (Netbeans) can delegate the process. Is there a centralised, clean way of doing this?

like image 201
phantom-99w Avatar asked Dec 23 '22 08:12

phantom-99w


1 Answers

IMO, this is the responsibility of the build system, not of the IDE. Let me say it in other way: don't rely on your IDE to build your project, use a build tool. Using an IDE is fine during development but being IDE dependent to build a project is not a good thing (what if you change your IDE tomorrow, what if you want to build your project on another machine/OS without that IDE, what if you want to build your project on a headless machine, what if you want to automate your build, what if someone wants to build that project and doesn't have that IDE, etc, etc). Really, this is what build systems are for.

Now, regarding your initial request, there are plenty ways to add a version number. One of them is to use the Ant's BuildNumber task:

This is a basic task that can be used to track build numbers.

It will first attempt to read a build number from a file (by default, build.number in the current directory), then set the property build.number to the value that was read in (or to 0, if no such value). It will then increment the number by one and write it back out to the file. (See the PropertyFile task if you need finer control over things such as the property name or the number format.)

Use it for example like this:

  <target name="jar" depends="compile">

     <property name="version.num" value="1.00"/>
     <buildnumber file="build.num"/>
          
      <jar destfile="foo-${version.num}-b${build.number}.jar"
           basedir="."
           includes="**/*.class"
      />
  </target>

Or you could indeed add subversion revision number. An easy way to do this seems to install the SVNAnt task and use the status task:

  <target name="revisionnumber">

     <!-- get the svn revision number -->
     <svn>
        <status path="application.cfm" revisionProperty="svn.revision" />
     </svn>

     <echo>Sandbox Revision: ${svn.revision}</echo>
      
  </target>

Finally, another option would be to use Maven instead of Ant which has a built-in version management feature as pointed out by cetnar.

like image 160
Pascal Thivent Avatar answered Dec 29 '22 18:12

Pascal Thivent