<project>
  <parent>
    <groupId>org.apache.felix</groupId>
    <artifactId>felix</artifactId>
    <version>0.9.0-incubator-SNAPSHOT</version>
  </parent>
  <modelVersion>4.0.0</modelVersion>
  <packaging>osgi-bundle</packaging>
  <name>Apache Felix Service Binder</name>
  <artifactId>org.apache.felix.servicebinder</artifactId>
  <dependencies>
    <dependency>
      <groupId>${pom.groupId}</groupId>
      <artifactId>org.osgi.core</artifactId>
      <version>${pom.version}</version>
      <scope>provided</scope>
    </dependency>
    <dependency>
      <groupId>net.sf.kxml</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>
            <entries>
              <property>
                <name>Metadata-Location</name>
                <value>metadata.xml</value>
              </property>
            </entries>
            <bundleSymbolicName>${pom.artifactId}</bundleSymbolicName>
            <bundleName>Service Binder</bundleName>
            <bundleVendor>Apache Software Foundation</bundleVendor>
            <!--<bundleVersion>1.1.2</bundleVersion>-->
            <bundleDescription>
              This bundle provides a mechanism to automate service dependency management.
            </bundleDescription>
            <bundleActivator>
              org.apache.felix.servicebinder.impl.Activator
            </bundleActivator>
            <exportPackage>
              org.apache.felix.servicebinder; specification-version="1.1.0",org.apache.felix.servicebinder.architecture; specification-version="1.1.0"
            </exportPackage>
            <importPackage>
            	 org.osgi.framework
            </importPackage>
            <metadataLocation>
              metadata.xml
            </metadataLocation>
          </osgiManifest>
        </configuration>
      </plugin>
    </plugins>
  </build>
</project>
