Installing the Apache Tuscany SCA binary distribution
=====================================================

Unzip Tuscany binary distribution archive to desired location and you get the following:

tuscany-sca-<version>     
   CHANGES       - A note of the major changes in this release   
   INSTALL       - this help file
   LICENSE       - the Apache License and any dependency licenses
   NOTICE        - attribution notices associated with the licenses
   README        - readme for the release
   RELEASE_NOTES - description of this release 

   /bin          - Tuscany launcher (for use when running tuscany from the command line)

   /features     - OSGi runtime configuration, Tuscany manifest and PDE target

   /lib          - coarse grained jars to ease classpath creation without having to rely 
                   on the Tuscany distribution structure.

   /modules      - all of the individual Tuscany jars and their dependencies

   /samples      - all of the Tuscany samples

For help with running tuscany, refer to /bin/README.  To get started with tuscany, please see /samples/README.
