<?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-full</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 poi-${pkgVersion}.jar, poi-contrib-${pkgVersion}.jar and poi-scratchpad-${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-full</connection>
      <developerConnection>scm:svn:https://svn.apache.org/repos/asf/felix/trunk/commons/poi-full</developerConnection>
      <url>http://svn.apache.org/viewcvs/felix/trunk/commons/poi-full</url>
    </scm>

    <dependencies>
        <dependency>
            <groupId>org.apache.poi</groupId>
            <artifactId>poi</artifactId>
            <version>${pkgVersion}</version>
        </dependency>
        <dependency>
            <groupId>org.apache.poi</groupId>
            <artifactId>poi-contrib</artifactId>
            <version>${pkgVersion}</version>
        </dependency>
        <dependency>
            <groupId>org.apache.poi</groupId>
            <artifactId>poi-scratchpad</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,
                            @poi-${pkgVersion}.jar!/font_metrics.properties
                        </Include-Resource>
                    </instructions>
                </configuration>
            </plugin>
        </plugins>
    </build>
</project>
