Free Online Courses for Software Developers - MrBool
× Please, log in to give us a feedback. Click here to login
×

You must be logged to download. Click here to login

×

MrBool is totally free and you can help us to help the Developers Community around the world

Yes, I'd like to help the MrBool and the Developers Community before download

No, I'd like to download without make the donation

×

MrBool is totally free and you can help us to help the Developers Community around the world

Yes, I'd like to help the MrBool and the Developers Community before download

No, I'd like to download without make the donation

Apache Ant Java: Automating your Build Process

In this document we will discuss about the build tool ant and using this how we can automate the build mechanism for java based applications.

In today’s era ant has become an integral part of java development. Most customers like to have an automated build script as a part of the delivered source code. The reason for this is the simplicity provided by the ant so that anyone with a little scripting knowledge can generate a deployable binary without knowing the application in detail.

Apache ant is a generic build tool. The name ANT stands abbreviated for ‘Another Neat Tool’. This tool is similar to the ‘Make’ utility in UNIX but is implemented using Java. It is primarily used for building the binaries of a java based source code and deploying the generated binary to an application server which is predefined. It can also be used to generate javadocs for a code base and to execute the unit test suite for the whole codebase. Ant in collaboration with JUNIT helps developer to follow the test driven development approach.

Ant requires Java compiler to be installed having the environment variable JAVA_HOME set with its adequate value. Ant uses an XML file to define the build procedure. The default name of this file is build.xml. Some developers also use a properties file namely build.properties to define some properties e.g. the build version number and other environmental parameters which are required to change from time to time based on the need.

Installation:

  • FEDORA: On RHEL, ANT can be installed using the command - yum install ant or it can be installed using the rpm - i command. In this case you should download the ant package first.
  • DEBIAN: On Ubuntu, ANT can be installed using the command - apt-get install ant.
  • Windows: On windows environment we need to download the ant_.zip file. This zip bundle should be extracted in a folder. This folder should be defined as an environment variable ANT_HOME.

A sample build.xml file is shown as under:

Listing 1: Sample build.xml file

<?xml version="1.0"?>
<project name="Ant-Test" default="main" basedir=".">
  <!-- Sets variables which can later be used. -->
  <!-- The value of a property is accessed via ${} -->
  <property name="src.dir" location="src" />
  <property name="build.dir" location="bin" />
  <property name="dist.dir" location="dist" />
  <property name="docs.dir" location="docs" />

  <!-- Deletes the existing build, docs and dist directory-->
  <target name="clean">
    <delete dir="${build.dir}" />
    <delete dir="${docs.dir}" />
    <delete dir="${dist.dir}" />
  </target>

  <!-- Creates the  build, docs and dist directory-->
  <target name="makedir">
    <mkdir dir="${build.dir}" />
    <mkdir dir="${docs.dir}" />
    <mkdir dir="${dist.dir}" />
  </target>

  <!-- Compiles the java code (including the usage of library for JUnit -->
  <target name="compile" depends="clean, makedir">
    <javac srcdir="${src.dir}" destdir="${build.dir}">
    </javac>

  </target>

  <!-- Creates Javadoc -->
  <target name="docs" depends="compile">
    <javadoc packagenames="src" sourcepath="${src.dir}" destdir="${docs.dir}">
      <!-- Define which files / directory should get included, we include all -->
       <fileset dir="${src.dir}">
                <include name="**" />
           </fileset>
    </javadoc>
  </target>

  <!--Creates the deployable jar file  -->
  <target name="jar" depends="compile">
    <jar destfile="${dist.dir}\in.kolkalta.build.test.ant.jar" basedir="${build.dir}">
      <manifest>
        <attribute name="Main-Class" value="test.Main" />
      </manifest>
    </jar>
  </target>

  <target name="main" depends="compile, jar, docs">
    <description>Main target</description>
  </target>

</project> 

Automation using ANT:

Ant provides a great help to java developers. Almost every java developer will like to have a script which can take care of running the unit test and creating the binary distribution file which can be deployed on an application server. Ant also provides ways to run automated scripts which are used to perform unit tests on a code base. Thus, it provides assistance to developers who use the test driven development approach. As we know in test driven development methodology JUNIT is a compulsion, it is always an added advantage if we have an automated script that runs all the junit test cases in one go. Not only that this script can also be used if we have has a continuous integration tooled e.g. Hudson. Our following sample code illustrates how to use ANT with JUNIT.

Listing 2: A Sample java file

package com.home.junit;

public class SampleAdd {
	
	public int add(int x, int y) {
		return x + y;
	}

}

Listing 3: The corresponding JUNIT file

package com.home.junit;

import org.junit.After;
import org.junit.Assert;
import org.junit.Before;
import org.junit.Test;

public class SampleAddTest  {
	
	private SampleAdd sampleClass;
	
	@Before
	public void setUp() {
		sampleClass = new SampleAdd();
	}
	
	@Test
	public void testAdd() {
		Assert.assertEquals(5, sampleClass.add(3, 2));
	}
	
	@After 
	public void settleDown() {
		sampleClass = null;
	}
	

}

Listing 4: The ANT script to compile and run the JUNIT test

<?xml version="1.0"?>
<project name="JUNIT" default="main" basedir="..">
	<!-- Sets variables which can later be used. -->
	<!-- The value of a property is accessed via ${} -->
	<property name="src.dir" location="src" />
	<property name="test.dir" location="tests" />

	<property name="build.dir" location="bin" />
	<property name="build.test.dir" location="bin/tests" />

	<!-- Variables used for JUnit testin -->

	<property name="test.report.dir" location="testreport" />

	<!-- Define the classpath which includes the junit.jar and the classes after compiling-->
	<path id="junit.class.path">
		<pathelement location="lib/junit-4.11.jar" />
		<pathelement location="lib/hamcrest-core-1.3.jar" />
		<pathelement location="${build.dir}" />
	</path>


	<!-- Deletes the existing build, docs and dist directory-->
	<target name="clean">
		<delete dir="${build.dir}" />
		<delete dir="${test.report.dir}" />
	</target>

	<!-- Creates the  build, docs and dist directory-->
	<target name="makedir">
		<mkdir dir="${build.dir}" />
		<mkdir dir="${build.test.dir}" />
		<mkdir dir="${test.report.dir}" />
	</target>

	<!-- Compiles the java code (including the usage of library for JUnit -->
	<target name="compile" depends="clean, makedir">
		<javac srcdir="${src.dir}" destdir="${build.dir}">
			<classpath refid="junit.class.path" />
		</javac>

		<javac srcdir="${test.dir}" destdir="${build.test.dir}">
			<classpath refid="junit.class.path" />
		</javac>

	</target>

	<!-- Run the JUnit Tests -->
	<!-- Output is XML, could also be plain-->
	<target name="junit" depends="compile">
		<junit printsummary="on" fork="true" haltonfailure="yes">
			<classpath refid="junit.class.path" />
			<classpath>
			    <pathelement location="${build.test.dir}"/>
			  </classpath>
			<formatter type="xml" />
			<batchtest todir="${test.report.dir}">
				<fileset dir="${test.dir}">
					<include name="**/*Test*.java" />
				</fileset>
			</batchtest>
		</junit>
	</target>

	<target name="main" depends="compile, junit">
		<description>Main target</description>
	</target>

</project>

When we run this script, it first compile the code base and then runs the junit tests on the compiled code and finally generates a test report. The test report can be generated in any format. For convenience we have generated this in XML format.

Listing 5: The Generated test report in XML format

<?xml version="1.0" encoding="UTF-8"?>
-<testsuite timestamp="2013-10-26T18:52:45" time="0.077" tests="1" name="com.home.junit.SampleAddTest" hostname="INDTAPPL132-001" failures="0" errors="0">-<properties><property name="java.vendor" value="Oracle Corporation"/><property name="sun.java.launcher" value="SUN_STANDARD"/><property name="eclipse.pdebuild.templates" value="/F:/Utpal/Softs/Softs/eclipse-java-indigo-win32/eclipse/plugins/org.eclipse.pde.build_3.7.0.v20110512-1320/templates/"/><property name="sun.management.compiler" value="HotSpot Client Compiler"/><property name="os.name" value="Windows 7"/><property name="sun.boot.class.path" value="C:\Program Files\Java\jre7\lib\resources.jar;C:\Program Files\Java\jre7\lib\rt.jar;C:\Program Files\Java\jre7\lib\sunrsasign.jar;C:\Program Files\Java\jre7\lib\jsse.jar;C:\Program Files\Java\jre7\lib\jce.jar;C:\Program Files\Java\jre7\lib\charsets.jar;C:\Program Files\Java\jre7\lib\jfr.jar;C:\Program Files\Java\jre7\classes"/><property name="sun.desktop" value="windows"/><property name="java.vm.specification.vendor" value="Oracle Corporation"/><property name="ant.home" value="F:\Utpal\Softs\Softs\eclipse-java-indigo-win32\eclipse\plugins\org.apache.ant_1.8.2.v20110505-1300"/><property name="java.runtime.version" value="1.7.0_45-b18"/><property name="user.name" value="utpalb"/><property name="build.dir" value="F:\Work\RnDSpace\Junit\bin"/><property name="user.language" value="en"/><property name="test.report.dir" value="F:\Work\RnDSpace\Junit\testreport"/><property name="sun.boot.library.path" value="C:\Program Files\Java\jre7\bin"/><property name="ant.project.default-target" value="main"/><property name="ant.project.name" value="JUNIT"/><property name="java.version" value="1.7.0_45"/><property name="user.timezone" value=""/><property name="sun.arch.data.model" value="32"/><property name="java.endorsed.dirs" value="C:\Program Files\Java\jre7\lib\endorsed"/><property name="sun.cpu.isalist" value="pentium_pro+mmx pentium_pro pentium+mmx pentium i486 i386 i86"/><property name="sun.jnu.encoding" value="Cp1252"/><property name="file.encoding.pkg" value="sun.io"/><property name="file.separator" value="\"/><property name="java.specification.name" value="Java Platform API Specification"/><property name="java.class.version" value="51.0"/><property name="user.country" value="US"/><property name="java.home" value="C:\Program Files\Java\jre7"/><property name="java.vm.info" value="mixed mode, sharing"/><property name="ant.file" value="F:\Work\RnDSpace\Junit\build\build.xml"/><property name="os.version" value="6.1"/><property name="path.separator" value=";"/><property name="java.vm.version" value="24.45-b08"/><property name="user.variant" value=""/><property name="ant.library.dir" value="F:\Utpal\Softs\Softs\eclipse-java-indigo-win32\eclipse\plugins\org.apache.ant_1.8.2.v20110505-1300\lib"/><property name="java.awt.printerjob" value="sun.awt.windows.WPrinterJob"/><property name="sun.io.unicode.encoding" value="UnicodeLittle"/><property name="ant.file.type.JUNIT" value="file"/><property name="awt.toolkit" value="sun.awt.windows.WToolkit"/><property name="user.script" value=""/><property name="ant.file.JUNIT" value="F:\Work\RnDSpace\Junit\build\build.xml"/><property name="eclipse.pdebuild.scripts" value="/F:/Utpal/Softs/Softs/eclipse-java-indigo-win32/eclipse/plugins/org.eclipse.pde.build_3.7.0.v20110512-1320/scripts/"/><property name="user.home" value="C:\Users\utpalb"/><property name="java.specification.vendor" value="Oracle Corporation"/><property name="test.dir" value="F:\Work\RnDSpace\Junit\tests"/><property name="java.library.path" value="C:\Program Files\Java\jre7\bin;C:\Windows\Sun\Java\bin;C:\Windows\system32;C:\Windows;C:/Program Files/Java/jre7/bin/client;C:/Program Files/Java/jre7/bin;C:/Program Files/Java/jre7/lib/i386;C:\Windows\system32;C:\Windows;C:\Windows\System32\Wbem;C:\Windows\System32\WindowsPowerShell\v1.0\;C:\Program Files\Java\jdk1.6.0_10\bin;E:\apache-ant-1.8.2-bin\apache-ant-1.8.2\bin;C:\Program Files\Liquid Technologies\Liquid XML Studio 2011\XmlDataBinder9\Redist9\cpp\win32\bin;C:\Program Files\TortoiseSVN\bin;E:\Program Files\Android\android-sdk\platform-tools;E:\Program Files\Android\android-sdk\tools;C:\Program Files\QuickTime\QTSystem\;D:\Sun\AppServer\bin;9;F:\Utpal\Softs\Softs\eclipse-java-indigo-win32\eclipse;;."/><property name="java.vendor.url" value="http://java.oracle.com/"/><property name="java.vm.vendor" value="Oracle Corporation"/><property name="java.runtime.name" value="Java(TM) SE Runtime Environment"/><property name="sun.java.command" value="org.apache.tools.ant.taskdefs.optional.junit.JUnitTestRunner com.home.junit.SampleAddTest filtertrace=true haltOnError=false haltOnFailure=true formatter=org.apache.tools.ant.taskdefs.optional.junit.SummaryJUnitResultFormatter showoutput=false outputtoformatters=true logfailedtests=true logtestlistenerevents=false formatter=org.apache.tools.ant.taskdefs.optional.junit.XMLJUnitResultFormatter,F:\Work\RnDSpace\Junit\testreport\TEST-com.home.junit.SampleAddTest.xml crashfile=F:\Work\RnDSpace\Junit\junitvmwatcher6288340937110531134.properties propsfile=F:\Work\RnDSpace\Junit\junit7583515827572177542.properties"/><property name="java.class.path" value="F:\Work\RnDSpace\Junit\lib\junit-4.11.jar;F:\Work\RnDSpace\Junit\lib\hamcrest-core-1.3.jar;F:\Work\RnDSpace\Junit\bin;F:\Work\RnDSpace\Junit\bin\tests;F:\Work\RnDSpace\Junit;C:\Program Files\Java\jdk1.6.0_10\jre\lib\rt.jar;F:\Utpal\Softs\Softs\eclipse-java-indigo-win32\eclipse\plugins\org.apache.ant_1.8.2.v20110505-1300\lib\ant-launcher.jar;F:\Utpal\Softs\Softs\eclipse-java-indigo-win32\eclipse\plugins\org.apache.ant_1.8.2.v20110505-1300\lib\ant.jar;F:\Utpal\Softs\Softs\eclipse-java-indigo-win32\eclipse\plugins\org.apache.ant_1.8.2.v20110505-1300\lib\ant-junit.jar;F:\Utpal\Softs\Softs\eclipse-java-indigo-win32\eclipse\plugins\org.apache.ant_1.8.2.v20110505-1300\lib\ant-junit4.jar"/><property name="ant.version" value="Apache Ant(TM) version 1.8.2 compiled on December 20 2010"/><property name="java.vm.specification.name" value="Java Virtual Machine Specification"/><property name="java.vm.specification.version" value="1.7"/><property name="sun.cpu.endian" value="little"/><property name="sun.os.patch.level" value="Service Pack 1"/><property name="eclipse.pdebuild.home" value="/F:/Utpal/Softs/Softs/eclipse-java-indigo-win32/eclipse/plugins/org.eclipse.pde.build_3.7.0.v20110512-1320/./"/><property name="java.io.tmpdir" value="C:\Users\utpalb\AppData\Local\Temp\"/><property name="java.vendor.url.bug" value="http://bugreport.sun.com/bugreport/"/><property name="os.arch" value="x86"/><property name="java.awt.graphicsenv" value="sun.awt.Win32GraphicsEnvironment"/><property name="java.ext.dirs" value="C:\Program Files\Java\jre7\lib\ext;C:\Windows\Sun\Java\lib\ext"/><property name="user.dir" value="F:\Work\RnDSpace\Junit\build"/><property name="build.test.dir" value="F:\Work\RnDSpace\Junit\bin\tests"/><property name="line.separator" value=" "/><property name="java.vm.name" value="Java HotSpot(TM) Client VM"/><property name="basedir" value="F:\Work\RnDSpace\Junit"/><property name="ant.java.version" value="1.7"/><property name="ant.core.lib" value="F:\Utpal\Softs\Softs\eclipse-java-indigo-win32\eclipse\plugins\org.apache.ant_1.8.2.v20110505-1300\lib\ant.jar"/><property name="file.encoding" value="Cp1252"/><property name="java.specification.version" value="1.7"/><property name="src.dir" value="F:\Work\RnDSpace\Junit\src"/><property name="ant.project.invoked-targets" value="main"/></properties><testcase time="0.003" name="testAdd" classname="com.home.junit.SampleAddTest"/>-<system-out>
<![CDATA[]]>
</system-out>-<system-err>
<![CDATA[]]>
</system-err></testsuite>

Conclusion:

APACHE ANT a java based utility used by the Java developers for the following purpose :

  • To generate the binaries from the source code
  • To generate javadocs for the source code
  • To run JUNIT test cases on a code base

ANT in collaboration with JUNIT, helps the java developers to follow the Test Driven Development methodology

Hope you liked the article, see you next time.

See also



Website: www.techalpine.com Have 16 years of experience as a technical architect and software consultant in enterprise application and product development. Have interest in new technology and innovation area along with technical...

What did you think of this post?
Services
[Close]
To have full access to this post (or download the associated files) you must have MrBool Credits.

  See the prices for this post in Mr.Bool Credits System below:

Individually – in this case the price for this post is US$ 0,00 (Buy it now)
in this case you will buy only this video by paying the full price with no discount.

Package of 10 credits - in this case the price for this post is US$ 0,00
This subscription is ideal if you want to download few videos. In this plan you will receive a discount of 50% in each video. Subscribe for this package!

Package of 50 credits – in this case the price for this post is US$ 0,00
This subscription is ideal if you want to download several videos. In this plan you will receive a discount of 83% in each video. Subscribe for this package!


> More info about MrBool Credits
[Close]
You must be logged to download.

Click here to login