Using Ant to build J2EE Applications

Download Report

Transcript Using Ant to build J2EE Applications

www.scmGalaxy.com
Using Ant to build J2EE Applications
Rajesh Kumar
[email protected]
www.scmGalaxy.com
www.scmGalaxy.com
Contents









Introduction
How does ANT work ?
Sample Build file
Built-in properties
ANT – Different flows
Writing your own task
Command-line options
IDE Integration
References
www.scmGalaxy.com
www.scmGalaxy.com
Introduction
What Is Ant?
 A build tool like ‘make’
 Open source
– from the Apache Jakarta project
– http://ant.apache.org/
 Implemented in Java
 Used to build many open source products
www.scmGalaxy.com
www.scmGalaxy.com
Introduction ..contd
 Ease of use
– Ant is extended using Java classes
– The configuration files are XML-based, calling out a
target tree where various tasks get executed
– Same config file (build.xml) can be across multiple
platorms
www.scmGalaxy.com
www.scmGalaxy.com
How does ANT Work ?
 Ant commands (or tasks) are implemented by Java classes
– many are built-in
– others come in optional JAR files
– custom commands can be created
 Each project using Ant will have a build file
– typically called build.xml since Ant looks for this by default
 Each build file is composed of targets
– these correspond to common activities like compiling and running code
 Each target is composed of tasks
– Each task is run by an object that implements a particular Task interface
– executed in sequence when the target is executed
– like make, Ant targets can have dependencies
– for example, modified source files must be compiled before the application can be
run
www.scmGalaxy.com
www.scmGalaxy.com
How does ANT Work ? ..
contd
 Targets to be executed
– can be specified on the command line when invoking Ant
– if none are specified then the default target is executed
– execution stops if an error is encountered
– so all requested targets may not be executed
 Each target is only executed once
– regardless of the number of other targets that depend on it
– for example
• the “test” and “deploy” targets both depend on “compile”
• the “all” target depends on “test” and “deploy”
but “compile” is only executed once when “all” is executed
 Some tasks are only executed when they need to be
– for example, files that have not changed since the last time they were compiled are not
recompiled
www.scmGalaxy.com
www.scmGalaxy.com
Sample Build file
<project name=“test" default=“hello">
<target name=“hello" depends=“setup, pre-hello1, pre-hello2“>
<echo> Hello World</echo>
</target>
<target name=“setup”>
<property name=“company.name” value=“MindTree”/>
<condition property="os.is.solaris">
<os name="SunOS" />
</condition>
</target>
<target name=“pre-hello1” if="os.is.solaris“>
<echo> You are running this script in Solaris </echo>
</target>
<target name=“pre-hello2” unless="os.is.solaris“>
<echo> You are NOT running this script in Solaris </echo>
</target>
</project>
www.scmGalaxy.com
www.scmGalaxy.com
Sample Build file





Save the file as test.xml in some temporary folder ( Say C:\Temp)
Set ANT_HOME= C:\Jakarta-Ant-1.5
Set PATH=%PATH%;%ANT_HOME%\bin
Cd C:\Temp
ant –buildfile test.xml
Buildfile: test.xml
setup:
pre-hello1:
pre-hello2:
[echo] You are NOT running this script in Solaris
hello:
[echo] Hello World
BUILD SUCCESSFUL
Total time: 1 second
www.scmGalaxy.com
www.scmGalaxy.com
Built-in Properties
Ant provides access to all system properties
and also has some additional properties.
basedir
The absolute path of the project's
basedir (as set with the basedir
attribute of <project>).
ant.file
The absolute path of the buildfile.
ant.version
The version of Ant
ant.project.na
me
The name of the project that is
currently executing; it is set in the
name attribute of <project>.
ant.java.versi
on
the JVM version Ant detected;
www.scmGalaxy.com
www.scmGalaxy.com
Ant – Different flows
 Using “depends”
 Using “antcall”
 Using “ant”
www.scmGalaxy.com
www.scmGalaxy.com
Ant – Different flows
 Using “depends” – Last task to first task
 Eg :
<target name="compile" depends="init, setup"
description="compile the source " >
<!-- Compile the java code from ${src} into ${build} -->
<javac srcdir="${src}" destdir="${build}"/>
</target>
www.scmGalaxy.com
www.scmGalaxy.com
Ant – Different flows

Using “antcall” – Sequential & Functional oriented
 Calling different targets in the same build.xml (very similar to calling functions in regular programming
language)
 Eg :
<antcall target="copymodule">
<param name="module.name" value="user"/>
</antcall>
<target name="copymodule" if="gws.prepared">
<echo>Module : ${module.name} </echo>
<copy todir="${gws.app}/j2ee-apps/gws/${module.name}"
includeEmptyDirs="no">
<fileset dir="${gws.class.folder}">
<patternset>
<include name="**/${module.name}/**"/>
</patternset>
</fileset>
</copy>
</target>
www.scmGalaxy.com
www.scmGalaxy.com
Ant – Different flows
 Using “ant”
 This is used for running scripts for subprojects
 Eg :
<target name="ROOT">
<ant dir="${basedir}/ROOT" target="dist"/>
</target>
<target name="examples">
<ant dir="${basedir}/examples" target="dist"/>
<ant antfile="subproject/subbuild.xml"
dir=“${basedir}/subproject" target="compile"/>
</target>
www.scmGalaxy.com
www.scmGalaxy.com
Core & Optional tasks
 http://ant.apache.org/manual/index.html
www.scmGalaxy.com
www.scmGalaxy.com
Writing your own task
1.
2.
3.
4.
5.
6.
Create a Java class that extends org.apache.tools.ant.Task
For each attribute, write a setter method.
Implement the interface org.apache.tools.ant.TaskContainer if your task
contains other tasks as nested elements
Write a public void execute method, with no arguments, that throws a
BuildException
Adding your task to the system
1.
Make sure the class that implements your task is in the classpath when
starting Ant.
2.
Add a <taskdef> element to your project. This actually adds your task to the
system.
3.
Use your task in the rest of the buildfile
Eg:
<?xml version="1.0"?>
<project name="OwnTaskExample" default="main" basedir=".">
<taskdef name="mytask“ classname="com.mydomain.MyVeryOwnTask"/>
<target name="main">
<mytask message="Hello World! MyVeryOwnTask works!"/>
</target>
</project>
www.scmGalaxy.com
www.scmGalaxy.com
Command line options
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
filesystem and use it
www.scmGalaxy.com
www.scmGalaxy.com
IDE Integration
Ant can be integrated with the following Java
IDEs
– Jbuilder
– IntelliJ Idea
– Eclipse
See the Ant User Manual for more details
– in http://ant.apache.org/manual/index.html
www.scmGalaxy.com
www.scmGalaxy.com
References






Home – http://ant.apache.org/
FAQ – http://ant.apache.org/faq.html
Mailing Lists
 http://marc.theaimsgroup.com/?l=ant-user&r=1&w=2
 http://archives.apache.org/eyebrowse/SummarizeList?listId=5
Books
 Java Development with Ant - http://www.manning.com/hatcher/
 Ant: The Definitive Guide - http://www.oreilly.com/catalog/anttdg/
Related Projects :
 Maven - http://jakarta.apache.org/turbine/maven/
 Centipede - http://www.krysalis.org/centipede/
Tools built over Ant :
 AntHill - http://www.urbancode.com/projects/anthill/default.jsp
 CruiseControl - http://cruisecontrol.sourceforge.net/
www.scmGalaxy.com
www.scmGalaxy.com
www.scmGalaxy.com