Skip to main content
Introduction to Ant www.scmGalaxy.com scmGalaxy Author: Rajesh Kumar [email_address]
What is ANT? Installation Sample build.xml Executing ant script Closer look at the structure of ANT file Advantages of using ANT Packaging – JAR, WAR, EAR Agenda
What is ANT? A nother  N eat  T ool Java-based build tool  Like  make , without  make ’s wrinkles   An open source Apache Jakarta project http://ant.apache.org/ Implemented in Java, implemented for Java
Installation Download the binaries from  http://jakarta.apache.org/ant/index.html Unzip to a suitable directory  Set  ANT_HOME = path_to_ant_folder Append  PATH=%PATH%;%ANT_HOME%\bin  to the PATH environment variable Append the .jar files in  /path_to_ant/lib/  to the  CLASSPATH  environment variable  Ensure that  JAVA_HOME  points to the location of the JDK installation on your machine &  /path_to_jdk/lib/*  is a part of the  CLASSPATH  environment variable
Working with ANT Every project using ANT will have a build file –  build.xml <?xml version=&quot;1.0&quot;?>  <project name=&quot;test&quot; default=&quot;compile&quot; basedir=&quot;.&quot;>  <property name=&quot;src&quot; value=&quot;.&quot;/>  <property name=&quot;build&quot; value=&quot;build&quot;/> <target name=&quot;init&quot;>  <mkdir dir=&quot;${build}&quot;/> </target> <target name=&quot;compile&quot; depends=&quot;init&quot;>  <!-- Compile the java code -->  <javac srcdir=&quot;${src}&quot; destdir=&quot;${build}&quot;/>  </target> </project>
A simple build.xml <?xml version=&quot;1.0&quot;?>  XML declaration specifying version of XML used.  All XML constraints hold good for build.xml < project  name=“test&quot; default=&quot;compile&quot; basedir=&quot;.&quot;> project  – root element of build.xml It has 3 attributes name  – name of project default  – (mandatory) default target when no target is specified basedir  – directory from which any relative directories within build.xml are referenced from
A simple build.xml  [Contd.] < property  name=&quot;src&quot; value=&quot;.&quot;/>  <property name=&quot;build&quot; value=&quot;build&quot;/> Property declaration is like user-defined variables to use within the build file It has 2 attributes name  – name of property value  – desired value of the property To reference a property, ${property_name} -  ${src} Built in properties that ANT provides : basedir    ant.file ant.version   ant.project.name  ant.java.version
A simple build.xml  [Contd.] <target name=&quot;init&quot;> <mkdir dir=&quot;${build}&quot;/> </target> target element is a wrapper for a sequence of actions Has the following attributes name  – (mandatory) Name used to reference this target from within the file or from command line description  – short description of this target  if  –  to conditionally execute contents of target based on the value of a property unless –  converse of if
A simple build.xml  [Contd.] < target  name=&quot;compile&quot; depends=&quot;init&quot;>  <javac srcdir=&quot;${src}&quot; destdir=&quot;${build}&quot;/>  </target>  depends  – comma separated list of all the targets on which this target depends, i.e, targets that must be executed prior to the execution of this target javac  element is a  task  which is performed under the  target   compile By default, only those .java input files that have a more recent timestamp than their corresponding .class output files will be compiled
Executing ant script ant [options] [target [target2 [target3] ...]]  Options:  -help    print this message  -projecthelp  print project help information  -version  print the version information and exit  -diagnostics  print information that might be helpful to diagnose  or report problems.  -quiet, -q  be extra quiet  -verbose, -v  be extra verbose  -debug  print debugging information  -emacs  produce logging information without adornments  -logfile <file>  use given file for log    -l <file>  ''  -logger <classname>  the class which is to perform logging  -listener <classname>  add an instance of class as a project listener  -buildfile <file>  use given buildfile  -file <file>  ''    -f <file>  ''  -D<property>=<value>  use value for given property  -propertyfile  taking precedence  -inputhandler <class>  the class which will handle input requests  -find <file> <name>  load all properties from file with -D properties  search for buildfile towards the root of the  file system and use it
Path-like structures -  classpath Wherever path-like values need to be specified, a nested element can be used :  location  - specifies a single file or directory relative to the project's base directory or an absolute filename path  -  accepts “ : ” or “ ; ” separated lists of locations < classpath > <pathelement path=&quot;${classpath}&quot;/>  <pathelement location=&quot;lib/helper.jar&quot;/> </classpath> <classpath path =“${classpath}”/>
Path-like structures -  path To use the same path-like structure for several tasks, you can define them with a <path> element at the same level as targets, and reference them via their id attribute  < path  id=&quot;project.class.path&quot;>   <path refid=&quot;base.path&quot;/> <pathelement location=&quot;lib/&quot;/> </path> <classpath refid=&quot;project.class.path&quot;/>
Path-like structures –   dirset, fileset,filelist <classpath> <pathelement path=&quot;${classpath}&quot;/> < fileset  dir=&quot;lib&quot;> <include name=&quot;**/*.jar&quot;/> </fileset> <pathelement location=&quot;classes&quot;/> < dirset  dir=&quot;${build.dir}&quot;> <include name=&quot;apps/**/classes&quot;/> <exclude name=&quot;apps/**/*Test*&quot;/> </dirset> < filelist  dir=&quot;${src.dir}&quot; files=&quot;foo.xml,bar.xml&quot;/> </classpath>
Tasks Piece of code that can be executed Built-in tasks : javac, java, javadoc, javah, junit mkdir, copy, move, delete, fileset jar, war, zip, unjar, unwar, unzip echo, cvs, exec ant, antcall You can also write your own tasks
javac Compiles a java source tree Source & destination directory recursively scanned for .java files to compile By default only check made for rebuild is existence / modification time To define any other java class dependencies use task  <depend> < javac   debug=&quot;${debug}&quot;  optimize=&quot;${optimize}&quot;  deprecation=&quot;${deprecation}&quot;  destdir=&quot;${build.dest}&quot;  includes=&quot;com/**&quot; excludes=&quot;**/*.xml&quot;> <src path=&quot;${src.dir}&quot; />    <classpath refid=&quot;classpath&quot; />    </javac> There are many more attributes / options available. Check Ant User Manual for more info.
Building subprojects  - ant Runs Ant on supplied build file This task must not be used outside of a target if it invokes the same build file that it is part of < ant  antfile=&quot;subproject/subbuild.xml&quot;    dir=&quot;subproject&quot;  target=&quot;compile&quot;/> < ant  inheritAll=&quot;false&quot;    antfile=&quot;subproject/subbuild.xml&quot;> <property name=&quot;output.type&quot; value=&quot;html&quot;/> </ant>
Calling other targets  - antcall Call another target within the same build-file (optionally specifying properties)  This task must no be used outside of a target <target name=&quot;default&quot;> < antcall  target=&quot;doSomethingElse&quot;> <param name=&quot;param1&quot; value=&quot;value&quot;/> </antcall> </target> <target name=&quot;doSomethingElse&quot;> <echo message=&quot;param1=${param1}&quot;/> </target>
Advantages Ease of use Configuration files are XML based Same config file (build.xml) can be used across platforms Platform independent Special support for Java   Easy to create JavaDocs, WAR & JAR files Built-in support for   JUnit FTP CVS
Advantages  [Contd.] Particularly good for automating complicated repetitive tasks which is what most build processes are all about! ANT can be integrated with most Java IDEs Eclipse Jbuilder IntelliJIdea
PACKAGING
ejb-jar file will contain : Beans’ class files Beans’ deployment descriptors META-INF/ejb-jar.xml Application server specific file  (e.g. META-INF/jboss.xml) Sample ejb-jar.xml Sample application specific descriptor file EJB Packaging –  ejb-jar
Has specific hierarchical directory structure Top-level directory is the document root of application WAR has the following folders (usually): jsp – JSP files  images – images used in the JSPs css – style sheet files scripts – javascript files WEB-INF WEB-INF folder contains Configuration files like  web.xml, struts-config.xml .tld files (if any) lib :  directory that contains jar archives of libraries  classes :  directory that contains the servlet classes and utility classes Web ARchive (WAR)
An EAR file can contain : Web components (war) Beans (ejb-jar) Libraries (jar) J2EE deployment descriptor (META-INF/application.xml) Sample application.xml  Enterprise ARchive (EAR)
References Ant home page http://ant.apache.org/ Ant manual http://ant.apache.org/manual/index.html   Another beginner’s tutorial  http://supportweb.cs.bham.ac.uk/documentation/tutorials/docsystem/build/tutorials/ant/ant.html
www.scmGalaxy.com Thank You ! Author: Rajesh Kumar [email_address]