Ant Another Neat Tool Representation and Management of

  • Slides: 23
Download presentation
Ant – Another Neat Tool Representation and Management of Data on the Internet 1

Ant – Another Neat Tool Representation and Management of Data on the Internet 1

What is Ant? • A cross-platform build tool (like make) • A scripting framework

What is Ant? • A cross-platform build tool (like make) • A scripting framework • Based on industry standards (Java and XML) • Open Source (development coordinated by the Apache Jakarta project) 2

Make versus Ant • Make: OS dependent – uses shell commands • Ant: OS

Make versus Ant • Make: OS dependent – uses shell commands • Ant: OS independent – uses Java • Make: Terrible syntax (infamous tabbing problem) • Ant: XML based syntax • Make: state dependencies between program files • Ant: state dependencies between tasks (not between program files) 3

Why Ant? • Platform independent – Requires only a JDK 1. 1 or later

Why Ant? • Platform independent – Requires only a JDK 1. 1 or later JVM • Easy to use – Built-in tasks accomplish all typical build functions – User contributed tasks cover most other needs • Easy to extend – Create a new task by writing some Java code 4

What can we do with Ant? • Can be used to: – compile java

What can we do with Ant? • Can be used to: – compile java programs – create javadoc documentation – create jar, zip, tar, war files – delete and copy files – send mail – validate XML files – etc. (anything you want) 5

Structure of Ant • Project – a top level collection of targets • Property

Structure of Ant • Project – a top level collection of targets • Property – an Ant variable • Target – a collection of tasks executed to achieve a particular purpose (a goal) • Task – a unit of Ant execution (a step) 6

How Does Ant Work? • Each Project will have a build file (build. xml)

How Does Ant Work? • Each Project will have a build file (build. xml) • Each build file will contain one or more Targets • The Target to be executed: – Is either explicitly selected on the command line – Or a project default Target is executed • Each Target is executed only once • Each Target will contain one or more Tasks • Some Tasks are executed conditionally • Tasks are implemented as Java classes 7

Using Ant • Buildfiles are written in XML • Each buildfile contains a single

Using Ant • Buildfiles are written in XML • Each buildfile contains a single project • Projects can have 3 attributes: – name: name of project (optional) – default: default target to use (required) – basedir: base directory for paths (optional) 8

A Build. File – Project Element <project name=“My. Project” default=“compile”> XML Element <!–- properties

A Build. File – Project Element <project name=“My. Project” default=“compile”> XML Element <!–- properties and targets will come here. . . --> Comment </project> 9

Properties • Properties (similar to global values) are defined as follows: <property name=“prop. Name”

Properties • Properties (similar to global values) are defined as follows: <property name=“prop. Name” value=“prop. Val” /> • Note: Properties are XML elements without contents, therefore we use /> • A property “prop. Name” can be referred to later using the syntax ${prop. Name} • You can define any properties you want 10

A Build. File – Adding Properties <project name=“My. Project” default=“compile”> <property name=“build. Dir” value=“build”/>

A Build. File – Adding Properties <project name=“My. Project” default=“compile”> <property name=“build. Dir” value=“build”/> <property name=“src. Dir” value=“. ”/> <!–- targets will come here. . . --> </project> 11

Targets • Targets have the attributes: – name: name of the target (required) –

Targets • Targets have the attributes: – name: name of the target (required) – depends: comma separated list of targets on which the target depends (optional) – if, unless, description: details omitted (read about it in the Ant documentation) • Targets contain tasks as subelements. These tasks define the actions performed when the target is executed. 12

A Build. File – Adding a Target <project name=“My. Project” default=“compile”> <property name="build. Dir"

A Build. File – Adding a Target <project name=“My. Project” default=“compile”> <property name="build. Dir" value="build"/> <property name=“src. Dir" value=“. "/> A Task <target name="compile"> <javac srcdir="${src}" destdir="${build}"/> </target> </project> We call also have written: <javac srcdir=“. “ destdir=“build"/> 13

A More Complex Example • Note: The tstamp task ( <tstamp/> ) defines the

A More Complex Example • Note: The tstamp task ( <tstamp/> ) defines the properties: DSTAMP (with format “yyyymmdd”), TSTAMP (with format “hhmm”) and TODAY (with format “month day year”) 14

<project name="My. Project" default="dist" basedir=". "> <!-- set global properties for this build -->

<project name="My. Project" default="dist" basedir=". "> <!-- set global properties for this build --> <property name="src" value=". "/> <property name="build" value="build"/> <property name="dist" value="dist"/> <target name="init"> <!-- Create the time stamp --> <tstamp/> <!-- Create the build directory structure used by compile --> <mkdir dir="${build}"/> </target> 15

<target name="compile" depends="init"> <!-- Compile java code from ${src} into ${build} --> <javac srcdir="${src}"

<target name="compile" depends="init"> <!-- Compile java code from ${src} into ${build} --> <javac srcdir="${src}" destdir="${build}"/> </target> <target name="dist" depends="compile"> <!-- Create the distribution directory --> <mkdir dir="${dist}/lib"/> <!-- Put everything in ${build} into the jar file: My. Project-${DSTAMP}. jar file --> <jar jarfile="${dist}/lib/My. Project-${DSTAMP}. jar" basedir="${build}"/> </target> <target name="clean"> <!-- Delete the ${build} and ${dist} directory trees --> <delete dir="${build}"/> <delete dir="${dist}"/> </target> </project> 16

More about Depends • Ant tries to execute the targets in “depends” from left

More about Depends • Ant tries to execute the targets in “depends” from left to right. • However, a target may be executed early when another one depends on it. 17

Example 1 <target name="A"/> <target name="B" depends="A"/> <target name="C" depends="B"/> <target name="D" depends="C, B,

Example 1 <target name="A"/> <target name="B" depends="A"/> <target name="C" depends="B"/> <target name="D" depends="C, B, A"/> • Execute: ant D • In what order will the tasks be performed? Try D Try C Try B Try A • Note: B is executed before C! Do D Do C Do B Do A • Note: B is executed once! 18

Example 2 <target name="A“ depends=“B”/> <target name="B" depends="A"/> • Execute: ant A • In

Example 2 <target name="A“ depends=“B”/> <target name="B" depends="A"/> • Execute: ant A • In what order will the tasks be performed? • The build fails, ant reacts with: – “Circular dependancy: a <- b <- a” 19

Running Ant • Type: ant • Ant looks for the file: build. xml, and

Running Ant • Type: ant • Ant looks for the file: build. xml, and performs the default task specified there. • You can use the –buildfile option to specify a different buildfile • You can specify a different task to be performed • You can define parameters using the –D option 20

Examples • Run Ant using build. xml on the default target ant • Run

Examples • Run Ant using build. xml on the default target ant • Run Ant using the test. xml file on the default target ant -buildfile test. xml • Run Ant using the test. xml file on a target called dist: ant -buildfile test. xml dist 21

Examples (cont. ) • Run Ant using the test. xml file on a target

Examples (cont. ) • Run Ant using the test. xml file on a target called dist, setting the build property to the value build/classes: ant -buildfile test. xml -Dbuild=build/classes dist 22

References • To learn more about Ant: – Look at the documentation on the

References • To learn more about Ant: – Look at the documentation on the web. (reference from the table of lectures schedule) – Pay attention to the section: “Built-in Tasks”. For each task, the format (e. g. , name and attributes) appears. 23