Introduction
So far, the basics of ANT are learnt and now, its time to build a project. But before that, the sketch has to be drawn and analyzed. The following tasks are covered in ANT Building Project chapter:
- Defining Properties
- Init Task
- Starting and Stopping Logging
- Task Preparation
- Fetching Source code
- Compiling
Description
ANT Building Project process develops by combining various process. Initially, init task has to be defined which loads the properties to the build. Then, the process has to be recorded and the report has to be generated. Next, the build directory has to be build for the created files and report directories.
Source code has to be fetched, compiled and placed in the build directory. Then, the junits test has to be done. If the test is passed, build the war file and deploy it into the FTP Server. If wanted to email the reports, just zip and email.
Description
To define properties for the ANT Build file, a text file called build.properties is required. This file will be loaded into the build using property task. It has all the names like project's name, various directories names, paths of various jar files, server details, compiler names, and email server details.
[java]
name=splessons
src.dir=src
build.dir=build
build.dir.classes=${build.dir}/classes
etc.dir=etc
reports.dir=reports
war.name=${name}-${DSTAMP}.war
servlet.jar=C:/java-servlet/servlet-spi.jar
junit.jar=C:/junit3.8.1/junit.jar
build.compiler=modern
cvs.root=:pserver:anonymous:anonymous@PENTIUM4:/AppsData/CVSRepo
cvs.package=com/splessons
server.name=myserver.com
user.id=splessons
password=mysite
remote.dir=oncueproductions
mail.host=smtp.mail.yahoo.com
mail.user=splessons@gmail.com
mail.pass=readfirst
mail.port=485
mail.from.address=itoolsinfo@gmail.com
mail.to.address=itoolsinfo@yahoo.com
[/java]
Description
Init task defines tstamp tag, which prints the current date. Then the build.properties will be loaded into the build and classpaths has to be defined. As this is the servlets project, one should add servlet.jar to the classpath.
Examples
[java]
<?xml version="1.0" encoding="UTF-8"?>
<project name="End to End Build" default="sendmail" basedir=".">
<target name="init">
<tstamp />
<property file="build.properties" />
<path id="classpath">
<pathelement path="${servlet.jar}" />
<pathelement path="${junit.jar}" />
</path>
<property name="classpath" refid="classpath" />
</target>
[/java]
Starting and Stop Logging
Description
One has to record task to create the log file. However, dstamp variable will be utilized by this log file name and this process goes on every time the build file is run. File name will possess the variable pointing the project name, date and -log text. Parameter action instructs the record task to initialize the recording. If wanted to stop recording, action will be made to stop. Here, append has to be set to false if one wants to run the build twice a day.
Examples
Code to start the recorder
[java]
<target name="startrecorder">
<record name="${name}-${DSTAMP}-log.txt" action="start" append="false" />
</target>
[/java]
Code to stop the recorder
[java]
<target name="stoprecorder">
<record name="${name}-${DSTAMP}-log.txt" action="stop" />
</target>
[/java]
Description
Preparing task will make the build directory and classes in the directories use mkdir. A report directory is created to store the reports. Also, clean task will help in cleaning up the build directory and reports directory. However, this action is not done automatically and has to be called whenever required.
Examples
Code of prepare task
[java]
<target name="prepare" depends="init, startrecorder">
<mkdir dir="${build.dir.classes}" />
<mkdir dir="${reports.dir}" />
</target>
[/java]
Code for clean task which is given at the last.
[java]
<target name="clean" depends="init">
<delete dir="${build.dir}" />
<delete dir="${reports.dir}" />
</target>
[/java]
Description
Source code has to be fetched from the CVS repository. Here, cvs root parameter is used for CVS Task. Next, updation has to be done by using the update command.
Then, the fail attribute has to be set to “true” and can be used if CVS throws any error and terminates the build process.
Examples
[java]
<target name="fetch" depends="init">
<!-- <cvs dest="${src.dir}" cvsRoot="${cvs.root}" command="update -P -d" failonerror="true" />
/> -->
</target>
[/java]
Compiling ANT Building Project
Description
Java C task is needed in compiling process. But before compiling, check whether build directories are created or not, which inturn depends on fetch, prepare and init tasks.
Then, compiler parameter has to be defined, which gives the type of parameter.includeantruntime tells the compiler to include the run time libraries of ant in the class path.
Example
[java]
<target name="compile" depends="prepare, fetch">
<javac srcdir="${src.dir}" destdir="${build.dir.classes}" classpath="${classpath}" compiler="${build.compiler}" debug="on" includeantruntime="false" />
</target>
[/java]
Further process of the project i.e. testing with JUnit, creating jar and war files, packing and deploying, and integrating with the eclipse will be shown in the next chapters.
Points
- build.properties should be loaded to the build file.
- Init task initiates the project using tstamp tag.
- Tasks are recorded by record task.
- Clean task deletes the build directories and reports.
- Cvs root fetches the code in CVS repository.