<?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-parent</artifactId>
        <version>2.1</version>
        <relativePath>../pom/pom.xml</relativePath>
    </parent>

    <artifactId>org.apache.felix.metatype</artifactId>
    <packaging>bundle</packaging>

    <name>Apache Felix Metatype Service</name>
    <description>
        Implementation of the OSGi Metatype Service Specification 1.2
    </description>
    <version>1.0.6</version>
    <dependencies>
        <dependency>
            <groupId>org.osgi</groupId>
            <artifactId>org.osgi.core</artifactId>
            <version>4.0.0</version>
            <scope>provided</scope>
        </dependency>
        <dependency>
            <groupId>org.osgi</groupId>
            <artifactId>org.osgi.compendium</artifactId>
            <version>4.3.0</version>
            <scope>provided</scope>
        </dependency>
        <dependency>
            <groupId>net.sf.kxml</groupId>
            <artifactId>kxml2</artifactId>
            <version>2.2.2</version>
        </dependency>
    </dependencies>

    <scm>
        <connection>scm:svn:http://svn.apache.org/repos/asf/felix/releases/org.apache.felix.metatype-1.0.6</connection>
        <developerConnection>scm:svn:https://svn.apache.org/repos/asf/felix/releases/org.apache.felix.metatype-1.0.6</developerConnection>
        <url>http://svn.apache.org/viewvc/felix/releases/org.apache.felix.metatype-1.0.6</url>
    </scm>

    <build>
        <plugins>
            <plugin>
                <groupId>org.apache.felix</groupId>
                <artifactId>maven-bundle-plugin</artifactId>
                <version>2.3.7</version>
                <extensions>true</extensions>
                <configuration>
                    <instructions>
                        <Bundle-Category>osgi</Bundle-Category>
                        <Bundle-SymbolicName>
                            ${project.artifactId}
                        </Bundle-SymbolicName>
                        <Bundle-DocURL>
                            http://felix.apache.org/site/apache-felix-metatype-service.html
                        </Bundle-DocURL>
                        <Export-Package>
                            org.apache.felix.metatype; version=1.2,
                            org.osgi.service.metatype; provide:=true
                        </Export-Package>
                        <Private-Package>
                            org.apache.felix.metatype.internal,
                            org.apache.felix.metatype.internal.l10n
                        </Private-Package>
                        <Bundle-Activator>
                            org.apache.felix.metatype.internal.Activator
                        </Bundle-Activator>
                        <Embed-Dependency>
                            kxml2;inline=org/kxml2/io/KXmlParser.class|org/xmlpull/v1/XmlPull**
                        </Embed-Dependency>
                    </instructions>
                </configuration>
            </plugin>
        </plugins>
    </build>
</project>
