Transcript ant

CSC 395 –
Software Engineering
Lecture 24:
Apache Ant –or–
Programming the results of programming
Based upon a talk by Anthony Wat
In This Lecture

Provide overview of using Apache Ant



What does Ant do?
How do we use it?
Why should I care?
Ant in a Nutshell

Java-based build tool


Enables multiplatform actions



Uses scripts to automate large processes
Useful aspect of Java-based implementation
Scripts must be written to take advantage
Many built-in tasks available


Javac, Copy, Delete, etc.
Can write & import additional tasks
Sample Build Script
<?xml version="1.0"?>
<project name=“build” default=“all”>
<target name=“all” depends=“hello”>
<echo message=“Good bye world.” />
</target>
<target name=“hello”>
<echo message=“Hello world.” />
</target>
</project>
Properties



Name-value pair used like variables in scripts
Many ways of defining/importing
Some properties automatically available





basedir
ant.file
ant.version
ant.project.name
ant.java.version
Define In External File


File written in plain text (usually XYZ.properties)
Specify in file using name=value


Example:
bin.dir=${basedir}/bin
HelloWorldStr=Hello world.
Load file using <property> task:

Example:
<project name=“build” default=“all”>
<property file=“build.properties” />
Define Properties Other Ways

Use name & value attributes of <property>


Example:
<project name=“build” default=“all”>
<property name=“HelloWorldStr”
value=“Hello world.” />
Specify in command that calls Ant

Example:
ant -Ddate=050206
Using Properties


Syntax similar to UNIX environment variables
Examples:
<echo message=“${HelloWorldStr}” />
<delete dir=“${bin.dir}” quiet=“yes”
/>

First line could do 1 of 2 things

If HelloWorldStr defined, then
${HelloWorldStr} replaced by its value

Otherwise, prints literal value “${HelloWorldStr}”
Caution!


Characters must escaped in properties files

Must escape ‘\’ in Windows-based directories:
C:\tmp is bad (\t replaced to become “C: mp”)
C:\\tmp is good

Do NOT escape ‘\’ inside build script, but instead
escape XML characters (e.g. ‘<’ becomes &lt;)
Properties like final variable in Java

Once defined, cannot easily modify values
Filesets


A fundamental structures in Ant
Define rules including and/or excluding files:

Include only .java files in build directory

Delete backup files generated by a program
Copy only files specified in a list

Using Filesets in Ant

Use <fileset> to delete .bak files:
<delete quiet=“yes”>
<fileset dir=“doc”
includes=“**/*.bak” />
</delete>
or
<delete quiet=“yes”>
<fileset dir=“doc”>
<include name=“**/*.bak” />
</fileset>
</delete>

Can often nest multiple <filesets>
Implicit Filesets

Some tasks define implicit filesets

Include <javac>, <tar>, <zip>

Treat task like genuine <fileset>

To compile Ant’s Java files:
<javac srcdir=“src” destdir=“bin”>
<include
name=“org/apache/ant/**/*.java” />
</javac>
Chaining Scripts


Usually not necessary
<ant> task calls another script





Example:
<ant antfile=“other.xml” />
Runs Ant script named other.xml
Called script inherits all defined properties
New script can also define new properties
Enables combining individual projects into
single larger project
Helper Target

Helper targets used like a method


<antcall> task used to call targets


Can be called using different parameters
Specify parameters using <param>
<param> can also override global properties


Initially set a default message globally
Use <param> to override message when needed
Helper Target (cont.)
<target name=“echoTwice”>
<echo message=“${message}” />
<echo message=“… and again:
${message}” />
</target>
…
<antcall target=“echoTwice”>
<param name=“message” value=“Hi.”
/>
</antcall>
Building With Ant


Run single script to build end-to-end
Can also make daily builds



Schedule daily builds to run automatically
Send e-mails when build available
Send e-mails whenever submission breaks build
One-Step Build Process

Ant provides a lot of useful tasks:




<cvs> check out and update repository
<copy> & <delete> rearrange files
<javac> & <java> compile and run Java
programs
<exec> executes program from command-line



But this will be specific to the system and OS
<zip> & <jar> helps package software
Also provides ability to write your own tasks!
One-Step Build Process (cont.)


Should be enough for end-to-end build
Can fit everything into build.xml script



Default name for Ant script
Otherwise must use -buildfile parameter to
run script
Start build by running Ant
 Uses ant or ant.bat in ant\bin directory
Build Notification


Send as part of build script
<mail> sends e-mail
<mail mailhost=“smtp.canisius.edu”
subject=“Build Successful”>
<from address=“[email protected]”
/>
<to
address=“[email protected]” />
<message>Today’s build is
done</message>
</mail>
Build Notification – Mail
Logger

Another way is to use the mail logger

org.apache.tools.ant.listener.MailLogger

Call Ant using the -logger option to specify the
logger
Example:


ant -logger
org.apache.tools.ant.listener.MailLogger
–DMailLogger.properties.file=mail.properties

All of the required properties for the mail logger
(SMTP, addresses, etc.) are defined in mail.properties
Build Notification – Mail
Logger (cont.)



Instead of piping output to console, it will be
cached and sent as e-mail when the build
finishes successfully or fails
The logs can be sent to developers
Schedule Ant builds with cron (UNIX) or
Task Scheduler (Windows)
Summary

We’ve looked at:




Properties and filesets
Multiple build scripts and helper targets, which
provide better maintainability of build scripts
How to achieve one-step automated build process
using Ant
Ant is used everywhere – from open source
projects to commercial software projects

A good skill to have
For Next Lecture

Read about SCM


Change is inevitable
SCM looks to control the results of changes that
occur