Top Banner
www.scmGalaxy.com Using Ant to build J2EE Applications www.scmGalaxy.com Rajesh Kumar rajeshkumar.raj06@gmail .com
19

Using Ant to build J2EE Applications

Dec 31, 2015

Download

Documents

blaine-arnold

Using Ant to build J2EE Applications. Rajesh Kumar [email protected]. 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. - PowerPoint PPT Presentation
Welcome message from author
This document is posted to help you gain knowledge. Please leave a comment to let me know what you think about it! Share it to your friends and learn new things together.
Transcript
Page 1: Using Ant to build J2EE Applications

www.scmGalaxy.com

Using Ant to build J2EE Applications

www.scmGalaxy.comRajesh [email protected]

Page 2: Using Ant to build J2EE Applications

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

Page 3: Using Ant to build J2EE Applications

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

Page 4: Using Ant to build J2EE Applications

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

Page 5: Using Ant to build J2EE Applications

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

Page 6: Using Ant to build J2EE Applications

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

Page 7: Using Ant to build J2EE Applications

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>

Page 8: Using Ant to build J2EE Applications

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

Page 9: Using Ant to build J2EE Applications

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.name

The name of the project that is currently executing; it is set in the name attribute of <project>.

ant.java.version

the JVM version Ant detected;

Page 10: Using Ant to build J2EE Applications

www.scmGalaxy.com

www.scmGalaxy.com

Ant – Different flows

Using “depends” Using “antcall” Using “ant”

Page 11: Using Ant to build J2EE Applications

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>

Page 12: Using Ant to build J2EE Applications

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>

Page 13: Using Ant to build J2EE Applications

www.scmGalaxy.com

www.scmGalaxy.com

Ant – Different flows

Using “ant” This is used for running scripts for sub-

projects 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>

Page 14: Using Ant to build J2EE Applications

www.scmGalaxy.com

www.scmGalaxy.com

Core & Optional tasks

http://ant.apache.org/manual/index.html

Page 15: Using Ant to build J2EE Applications

www.scmGalaxy.com

www.scmGalaxy.com

Writing your own task1. Create a Java class that extends org.apache.tools.ant.Task 2. For each attribute, write a setter method.3. Implement the interface org.apache.tools.ant.TaskContainer if your task

contains other tasks as nested elements 4. Write a public void execute method, with no arguments, that throws a

BuildException5. 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 buildfile6. 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>

Page 16: Using Ant to build J2EE Applications

www.scmGalaxy.com

www.scmGalaxy.com

Command line optionsant [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

Page 17: Using Ant to build J2EE Applications

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

Page 18: Using Ant to build J2EE Applications

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/

Page 19: Using Ant to build J2EE Applications

www.scmGalaxy.com

www.scmGalaxy.com