<project>
  <parent>
    <groupId>org.apache.felix</groupId>
    <artifactId>felix</artifactId>
    <version>0.8.0-SNAPSHOT</version>
  </parent>
  <modelVersion>4.0.0</modelVersion>
  <packaging>osgi-bundle</packaging>
  <name>Apache Felix Declarative Services</name>
  <artifactId>org.apache.felix.scr</artifactId>
  <dependencies>
    <dependency>
      <groupId>${pom.groupId}</groupId>
      <artifactId>org.osgi.core</artifactId>
      <version>${pom.version}</version>
      <scope>provided</scope>
    </dependency>
    <dependency>
      <groupId>${pom.groupId}</groupId>
      <artifactId>org.osgi.compendium</artifactId>
      <version>${pom.version}</version>
      <scope>provided</scope>
    </dependency>
    <dependency>
      <groupId>kxml2</groupId>
      <artifactId>kxml2</artifactId>
      <version>2.2.2</version>
    </dependency>  </dependencies>
  <build>
    <plugins>
      <plugin>
        <groupId>org.apache.felix.plugins</groupId>
        <artifactId>maven-osgi-plugin</artifactId>
        <version>${pom.version}</version>
        <extensions>true</extensions>
        <configuration>
          <osgiManifest>
            <bundleName>Service Component Runtime</bundleName>
            <bundleVendor>Apache Software Foundation</bundleVendor>
            <bundleDescription>
              Implementation of the Declarative Services specification.
            </bundleDescription>
            <bundleActivator>
              org.apache.felix.scr.Activator
            </bundleActivator>
            <bundleSymbolicName>org.apache.felix.scr</bundleSymbolicName>
            <exportPackage>
			  org.apache.felix.scr
			</exportPackage>
			<importPackage>
              org.osgi.service.component, org.osgi.framework
            </importPackage>			
          </osgiManifest>
        </configuration>
      </plugin>
    </plugins>
  </build>
</project>
