The following build.xml file has a few targets that make compiling a project much simplier. Read on for more details.
I have the following directory structure:
(chris@hobbes)-(BackupLink)$ ls -l total 20 drwxrwxr-x 3 chris chris 4096 Apr 21 00:07 bin -rw-rw-r-- 1 chris chris 2776 Apr 21 00:15 Build.xml drwxrwxr-x 2 chris chris 4096 Apr 13 19:07 CVS drwxrwxr-x 2 chris chris 4096 Apr 20 14:32 include drwxrwxr-x 4 chris chris 4096 Apr 21 00:06 src
In Eclipse, I set the project preference to make [project root]/src the only folder on the source path. Lastly, I set bin to be the output folder. The ant script grabs any jars out of include (mostly useless to me).
When I want to create a jar, I just run the jar target. I removes the java source files before creating the jar archive. You can also increment the version number to create ‘releases’. This is the best I can come up with right now.
<?xml version='1.0'?>
<project name="BackupLink" default="jar" basedir=".">
<!-- set global properties for this build -->
<property name="version" value="0.1" />
<property name="src" value="src"/>
<property name="build" value="build"/>
<property name="jarname" value="backUplink.${version}.jar"/>
<property name="docs" value="docs"/>
<property name="include" value="include"/>
<property name="lib" value="lib"/>
<property name="runclass" value="com.squarism.backUplink.BackUplink"/>
<property name="classpath" value="classes"/>
<target name="init">
<!-- Create the build directory structure used by compile -->
<mkdir dir="${build}" />
<mkdir dir="${build}/classes" />
<!-- Create the directory for the jar file -->
<mkdir dir="${lib}" />
<!-- Create the directory for the java docs -->
<mkdir dir="${docs}" />
</target>
<target name="compile" depends="init">
<!-- copy all .java files from ${src} to ${build} -->
<copy todir="${build}/">
<fileset dir="${src}" />
<!-- apply a substitution @version@ with the value of ${version} -->
<filterset>
<filter token="version" value="${version}"/>
</filterset>
</copy>
<!-- run javac to compile the source files -->
<javac srcdir="${build}" destdir="${build}">
<classpath>
<!-- use the value of the ${classpath} property in the classpath -->
<pathelement path="${classpath}"/>
<!-- include all jar files -->
<fileset dir="${include}">
<include name="**/*.jar"/>
</fileset>
</classpath>
</javac>
</target>
<target name="jar" depends="compile">
<delete>
<fileset dir="${build}" includes="**/*.java"></fileset>
</delete>
<!-- make a jar file -->
<jar jarfile="${lib}/${jarname}" basedir="${build}" manifest="${build}/manifest" />
</target>
<target name="run" depends="jar,docs">
<!-- run the class -->
<java classname="${runclass}">
<!-- add a command line arg: <arg value="-h"/> -->
<classpath>
<!-- use the value of the ${classpath} property in the classpath -->
<pathelement path="${classpath}"/>
<!-- include all jar files -->
<fileset dir="${include}">
<include name="**/*.jar"/>
</fileset>
<fileset dir="${lib}">
<include name="**/*.jar"/>
</fileset>
</classpath>
</java>
</target>
<target name="docs" depends="compile">
<!-- create javadocs -->
<javadoc packagenames="com.squarism.backUplink.*"
sourcepath="${build}"
defaultexcludes="yes"
destdir="${docs}"
author="true"
version="true"
use="true"
windowtitle="BackUplink API Documentation Version: ${version}">
</javadoc>
</target>
<target name="clean">
<delete dir="${build}"/>
<delete dir="${docs}"/>
<delete dir="${lib}"/>
</target>
</project>