1. A method for describing software components, comprising: creating one or more component descriptors, each component descriptor containing information about a corresponding software component of a plurality of software components; creating one or more aggregate descriptors, each aggregate descriptor containing information about a relationship between a particular software component and at least one other software component; defining a component hierarchy based upon hierarchical interrelationships among software components and aggregate components; and managing software and aggregate component lifecycles, access controls, interrelationships and versioning to maintain the component hierarchy.