For detailed installation and further instructions please refer http://airavata.apache.org/:
Documentation section in left hand panel. The website lists step by step instructions

Installing  Apache Airavata 0.12
------------------------------------------------

IMPORTANT Note: The installation instructions are out of date. 0.12 release is a developer oriented release. Please
contact the developer mailing list for help. A subsequent release 0.13 will soon supercede.


Prerequisites
-------------
Java 1.5 or later
Maven (tested on v 3.0.2)

Build Apache Airavata from Source
---------------------------------
* Unzip/untar the source file or check out from svn.
* cd to project folder and type
	$ mvn clean install
	Note: in order to skip tests use the command
			$ mvn clean install -Dmaven.test.skip=true
* Alternatively, all  compressed binary distributions can be found at <PROJECT DIR>/modules/distribution/release/target/release-artifacts

Running Tests
-------------
* Unit tests & integrations tests will run while Apache Airavata is built from source (without "-Dmaven.test.skip=true").
* To run the test samples
    - You can find the binary distributions at <PROJECT DIR>/modules/distribution/release/target/release-artifacts or from 
      the Apache Airavata download site.
    - Extract the binary distributions and once the binary is unzipped, instructions to run the tests should be followed 
      from README files found within.

Tutorials 
----------
The airavata website has instructions for basic tutorials:
* For basic understanding of how Airavata works - http://airavata.apache.org/documentation/tutorials/airavata-in-5-minutes.html
* Describing and executing applications using Airavata - http://airavata.apache.org/documentation/tutorials/airavata-in-10-minutes.html
* Advanced tutorial to provide understanding of how to run sample workflows distributed with Airavata - http://airavata.apache.org/documentation/tutorials/advanced-workflow-samples.html
