<?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.commons</groupId>
        <artifactId>build</artifactId>
        <version>1.0.0-SNAPSHOT</version>
    </parent>
    <properties>
        <pkgArtifactId>activation</pkgArtifactId>
        <pkgVersion>1.1</pkgVersion>
        <pomVersion>0001</pomVersion>
        <osgiVersion>${pkgVersion}.0</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/felix/trunk/commons/activation</connection>
      <developerConnection>scm:svn:https://svn.apache.org/repos/felix/trunk/commons/activation</developerConnection>
      <url>http://svn.apache.org/viewcvs/felix/trunk/commons/activation</url>
    </scm>
    <dependencies>
        <dependency>
            <groupId>javax.activation</groupId>
            <artifactId>${pkgArtifactId}</artifactId>
            <version>${pkgVersion}</version>
        </dependency>
    </dependencies>
    <build>
        <plugins>
            <plugin>
                <groupId>org.apache.felix</groupId>
                <artifactId>maven-bundle-plugin</artifactId>
                <extensions>true</extensions>
                <configuration>
                    <instructions>
                        <Bundle-SymbolicName>
                            ${pom.artifactId}
                        </Bundle-SymbolicName>
                        <Export-Package>
                            javax.activation;version=${pkgVersion}
                        </Export-Package>
                        <Private-Package>
                            com.sun.activation.registries,
                            com.sun.activation.viewers
                        </Private-Package>
                        <Include-Resource>
                            @${pkgArtifactId}-${pkgVersion}.jar!/META-INF/LICENSE.txt,
                            @${pkgArtifactId}-${pkgVersion}.jar!/META-INF/mailcap.default,
                            @${pkgArtifactId}-${pkgVersion}.jar!/META-INF/mimetypes.default
                        </Include-Resource>
                    </instructions>
                </configuration>
            </plugin>
        </plugins>
    </build>
</project>
