<project>
  <parent>
    <groupId>org.apache.felix</groupId>
    <artifactId>felix</artifactId>
    <version>0.9.0-incubator-SNAPSHOT</version>
  </parent>
  <modelVersion>4.0.0</modelVersion>
  <packaging>bundle</packaging>
  <name>Apache Felix Declarative Services</name>
  <description>Implementation of the Declarative Services specification 1.0</description>
  <artifactId>org.apache.felix.scr</artifactId>
  <dependencies>
    <dependency>
      <groupId>${pom.groupId}</groupId>
      <artifactId>org.osgi.core</artifactId>
      <version>${pom.version}</version>
    </dependency>
    <dependency>
      <groupId>${pom.groupId}</groupId>
      <artifactId>org.osgi.compendium</artifactId>
      <version>${pom.version}</version>
    </dependency>
    <dependency>
      <groupId>net.sf.kxml</groupId>
      <artifactId>kxml2</artifactId>
      <version>2.2.2</version>
    </dependency>
  </dependencies>
  <build>
    <plugins>
      <plugin>
        <groupId>org.apache.felix</groupId>
        <artifactId>maven-bundle-plugin</artifactId>
        <extensions>true</extensions>
        <configuration>
          <instructions>
            <Bundle-SymbolicName>${artifactId}</Bundle-SymbolicName>
            <Bundle-Vendor>Apache Software Foundation</Bundle-Vendor>
            <Bundle-Activator>
              org.apache.felix.scr.Activator
            </Bundle-Activator>
            <Export-Package>
                org.osgi.service.component; version=1.0
            </Export-Package>
            <Private-Package>
              org.apache.felix.scr.*,
              org.kxml2.io,
              org.xmlpull.v1
            </Private-Package>
          </instructions>
        </configuration>
      </plugin>
    </plugins>
  </build>
</project>
