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

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
