1. A method comprising: identifying, by a processing device executing a virtual machine, a capability to be used by an application in view of an application descriptor for the application, wherein the capability specifies a functional requirement of the application; determining, by the processing device, a component that provides the functional requirement of the application in view of a component descriptor of the component, wherein the component descriptor specifies one or more capabilities provided by the component; identifying, in view of the component descriptor, an additional capability to be used by the component, wherein the component descriptor further specifies the additional capability to be used by the component; determining an additional component that provides the additional capability; determining that the application descriptor further specifies that the application is to use the additional capability that is provided by the additional component; determining, in view of at least a profile associated with the additional component, that a single instance of the additional component is to provide the additional capability to both the application and the component; and grouping the application, the component, and the additional component for deployment in view of a first constraint associated with the application, a second constraint associated with the component, and a third constraint associated with the additional component.