Wednesday, April 8, 2009

Tutorial: Hello World with Ant

Tutorial: Hello World with Ant: "Tutorial: Hello World with Ant

This document provides a step by step tutorial for starting java programming with Ant. It does not contain deeper knowledge about Java or Ant. This tutorial has the goal to let you see, how to do the easiest steps in Ant.
Content

* Preparing the project
* Enhance the build file
* Enhance the build file
* Using external libraries
* Resources

Preparing the project

We want to separate the source from the generated files, so our java source files will be in src folder. All generated files should be under build, and there splitted into several subdirectories for the individual steps: classes for our compiled files and jar for our own JAR-file.

We have to create only the src directory. (Because I am working on Windows, here is the win-syntax - translate to your shell):

md src

The following simple Java class just prints a fixed message out to STDOUT, so just write this code into src\oata\HelloWorld.java.

package oata;

public class HelloWorld {
public static void main(String[] args) {
System.out.println('Hello World');
}
}

Now just try to compile and run that:

md build\classes
javac -sourcepath src -d build\classes src\oata\HelloWorld.java
java -cp build\classes oata.HelloWorld

which will result in

Hello World

Creating a jar-file is not very difficult. But creating a startable jar-file needs more steps: create a manifest-file containing the start class, creating the target directory and archiving the files.

echo Main-Class: oata.HelloWorld>myManifest
md build\jar
jar cfm build\jar\HelloWorld.jar myManifest -C build\classes .
java -jar build\jar\HelloWorld.jar

Note: Do not have blanks around the >-sign in the echo Main-Class instruction because it would falsify it!
Four steps to a running application

After finishing the java-only step we have to think about our build process. We have to compile our code, otherwise we couldn't start the program. Oh - 'start' - yes, we could provide a target for that. We should package our application. Now it's only one class - but if you want to provide a download, no one would download several hundreds files ... (think about a complex Swing GUI - so let us create a jar file. A startable jar file would be nice ... And it's a good practise to have a 'clean' target, which deletes all the generated stuff. Many failures could be solved just by a 'clean build'.

By default Ant uses build.xml as the name for a buildfile, so our .\build.xml would be:

<project>

<target name='clean'>
<delete dir='build'/>
</target>

<target name='compile'>
<mkdir dir='build/classes'/>
<javac srcdir='src' destdir='build/classes'/>
</target>

<target name='jar'>
<mkdir dir='build/jar'/>
<jar destfile='build/jar/HelloWorld.jar' basedir='build/classes'>
<manifest>
<attribute name='Main-Class' value='oata.HelloWorld'/>
</manifest>
</jar>
</target>

<target name='run'>
<java jar='build/jar/HelloWorld.jar' fork='true'/>
</target>

</project>

Now you can compile, package and run the application via

ant compile
ant jar
ant run

Or shorter with

ant compile jar run"

No comments: