In part 1, we went over the basics of using Ant to create a redistributable .jar file, suitable for use as a library in other projects. A lot of the time however, you’re probably going to want to be building things which can actually be run as regular Java applications.

Once again, the code for this tutorial is available in GitHub. More usefully, you may want to see the diff between the part 1 script and the new one.

Here’s a quick explanation of what we’ve done to achieve an executable jar file:

    <!-- for a runnable jar file, add the main class name -->
    <property name="main.class" value="net.shrimpworks.ant.Main"/>

Along with other common properties which may change from project-to-project, I like to include the main class definition near the top. This is simply the full class name of the class which holds your public static void main(...) method.

When making non-runnable library projects, this may be left blank in the future.

        <jar ...>
            <manifest>
                <attribute name="Main-Class" value="${main.class}"/>
            </manifest>
            ....
        </jar>

Here, we’re telling the Ant jar task to create a custom Manifest file within the .jar file. The only attribute we need at this point, is to tell it where to find our main class, stored in the ${main.class} property. This manifest will also expand in future revisions of this build file as we delve into dependency management and introduce third party libraries to our project.

That’s all there is to this part. A quick ant in the project directory, will yield an updated .jar file, which can be executed as follows:

$ java -jar dist/hello-world.jar


Other parts in this series: