<?xml version="1.0" encoding="UTF-8"?>
<!--
    Licensed to the Apache Software Foundation (ASF) under one
    or more contributor license agreements.  See the NOTICE file
    distributed with this work for additional information
    regarding copyright ownership.  The ASF licenses this file
    to you under the Apache License, Version 2.0 (the
    "License"); you may not use this file except in compliance
    with the License.  You may obtain a copy of the License at
    
    http://www.apache.org/licenses/LICENSE-2.0
    
    Unless required by applicable law or agreed to in writing,
    software distributed under the License is distributed on an
    "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
    KIND, either express or implied.  See the License for the
    specific language governing permissions and limitations
    under the License. 
-->
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
    <modelVersion>4.0.0</modelVersion>
    <parent>
        <groupId>org.apache.felix</groupId>
        <artifactId>felix</artifactId>
        <version>1.0.2</version>
        <relativePath>../../pom</relativePath>
    </parent>

  <properties>
    <pkgArtifactId>poi</pkgArtifactId>
    <pkgVersion>3.0.1-FINAL</pkgVersion>
    <pomVersion>0002</pomVersion>
    <osgiVersion>${pkgVersion}</osgiVersion>
  </properties>
  <groupId>org.apache.felix.commons</groupId>
  <artifactId>${pom.groupId}.${pkgArtifactId}</artifactId>
  <version>${osgiVersion}-${pomVersion}-SNAPSHOT</version>
  <packaging>bundle</packaging>
  <name>${pkgArtifactId} bundle</name>
  <description>
        This bundle simply wraps ${pkgArtifactId}-${pkgVersion}.jar.
    </description>
  <organization>
    <name>Apache Felix Project</name>
    <url>http://felix.apache.org/</url>
  </organization>
    <scm>
      <connection>scm:svn:http://svn.apache.org/repos/asf/felix/trunk/commons/poi</connection>
      <developerConnection>scm:svn:https://svn.apache.org/repos/asf/felix/trunk/commons/poi</developerConnection>
      <url>http://svn.apache.org/viewcvs/felix/trunk/commons/poi</url>
    </scm>

  <dependencies>
    <dependency>
      <groupId>org.apache.poi</groupId>
      <artifactId>${pkgArtifactId}</artifactId>
      <version>${pkgVersion}</version>
    </dependency>
  </dependencies>
  <build>
    <plugins>
      <plugin>
        <groupId>org.apache.felix</groupId>
        <artifactId>maven-bundle-plugin</artifactId>
        <version>1.2.0</version>
        <extensions>true</extensions>
        <configuration>
          <instructions>
            <Bundle-SymbolicName>
              ${pom.artifactId}
            </Bundle-SymbolicName>
            <Export-Package>
              *;version=${pkgVersion}
            </Export-Package>
            <Include-Resource>
              src/main/resources,
              @${pkgArtifactId}-${pkgVersion}.jar!/font_metrics.properties
            </Include-Resource>
          </instructions>
        </configuration>
      </plugin>
    </plugins>
  </build>
</project>
