Repositories
So, first we look at feature repositories. The features are described in a features XML descriptor, a "features repository". This features XML has a schema, so for more information on this schema, see Features XML Schema in the Provisioning section of the lastest version of the Karaf User Guide (http://karaf.apache.org/). We recommend using this XML schema. It will allow Karaf to validate your repository before parsing. You may also verify your descriptor before adding it to Karaf by simply validation, even from IDE level. Here is an example of such a repository:
<features xmlns="http://karaf.apache.org/xmlns/features/v1.0.0">
<feature name="spring" version="3.0.4.RELEASE">
<bundle>mvn:org.apache.servicemix.bundles/ \\
org.apache.servicemix.bundles.aopalliance/1.0_1</bundle>
<bundle>mvn:org.springframework/spring-core/3.0.4.RELEASE</bundle>
<bundle>mvn:org.springframework/spring-beans/3.0.4.RELEASE</bundle>
<bundle>mvn:org.springframework/spring-aop/3.0.4.RELEASE</bundle>
<bundle>mvn:org.springframework/spring-context/3.0.4.RELEASE</bundle>
<bundle>
mvn:org.springframework/spring-context-support/3.0.4.RELEASE
</bundle>
</feature>
</features>
A repository includes a list of feature elements, each one representing an application that can be installed. The feature is identified by its name which must be unique amongst all the repositories used and consists of a set of bundles that need to be installed along with some optional dependencies on other features and some optional configurations for the Configuration Admin OSGi service.
References to features define in other repositories are allow and can be achieved by adding a list of repository.
<features xmlns="http://karaf.apache.org/xmlns/features/v1.0.0">
<repository>mvn:org.apache.servicemix.nmr/apache-servicemix-nmr/ \\
1.3.0/xml/features</repository>
<repository>mvn:org.apache.camel.karaf/apache-camel/2.5.0/xml/features
</repository>
<repository>mvn:org.apache.karaf/apache-karaf/2.1.2/xml/features
</repository>
...
Be careful when you define them as there is a risk of 'cycling' dependencies. Note: By default, all the features defined in a repository are not installed at the launch of Apache Karaf (see Service configuration for more information).