<?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>jline</pkgArtifactId>
        <pkgVersion>0.9.91</pkgVersion>
        <pomVersion>0001</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/commons-collections</connection>
      <developerConnection>scm:svn:https://svn.apache.org/repos/asf/felix/trunk/commons/commons-collections</developerConnection>
      <url>http://svn.apache.org/viewcvs/felix/trunk/commons/commons-collections</url>
    </scm>
    <dependencies>
        <dependency>
            <groupId>jline</groupId>
            <artifactId>${pkgArtifactId}</artifactId>
            <version>${pkgVersion}</version>
        </dependency>
    </dependencies>
    <build>
        <plugins>
            <plugin>
                <groupId>org.apache.felix</groupId>
                <artifactId>maven-bundle-plugin</artifactId>
                <version>1.4.0</version>
                <extensions>true</extensions>
                <configuration>
                    <instructions>
                        <Bundle-SymbolicName>
                            ${pom.artifactId}
                        </Bundle-SymbolicName>
                        <Export-Package>*;version=${pkgVersion}</Export-Package>
                        <Import-Package>
                            !jline.*
                        </Import-Package>
                    </instructions>
                </configuration>
            </plugin>
        </plugins>
    </build>
</project>