<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">

    <!--

        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.
    -->

    <modelVersion>4.0.0</modelVersion>

    <parent>
        <groupId>org.apache.karaf.shell</groupId>
        <artifactId>shell</artifactId>
        <version>2.1.1</version>
    </parent>

    <groupId>org.apache.karaf.shell</groupId>
    <artifactId>org.apache.karaf.shell.console</artifactId>
    <packaging>bundle</packaging>
    <version>2.1.1</version>
    <name>Apache Karaf :: Shell Console</name>

    <description>
        Provides the OSGi Shell integration
    </description>

    <properties>
        <appendedResourcesDirectory>${basedir}/../../etc/appended-resources</appendedResourcesDirectory>
    </properties>

    <dependencies>
        <dependency>
            <groupId>org.slf4j</groupId>
            <artifactId>slf4j-simple</artifactId>
            <optional>true</optional>
        </dependency>
        <dependency>
            <groupId>jline</groupId>
            <artifactId>jline</artifactId>
        </dependency>
        <dependency>
            <groupId>org.fusesource.jansi</groupId>
            <artifactId>jansi</artifactId>
        </dependency>
        <dependency>
            <groupId>org.apache.felix</groupId>
            <artifactId>org.osgi.core</artifactId>
            <scope>provided</scope>
        </dependency>
        <dependency>
            <groupId>org.apache.felix</groupId>
            <artifactId>org.osgi.compendium</artifactId>
            <scope>provided</scope>
        </dependency>
        <dependency>
            <groupId>org.apache.aries.blueprint</groupId>
            <artifactId>org.apache.aries.blueprint</artifactId>
        </dependency>
        <dependency>
            <groupId>org.apache.felix.gogo</groupId>
            <artifactId>org.apache.felix.gogo.runtime</artifactId>
        </dependency>
    </dependencies>

    <build>
        <resources>
            <resource>
                <directory>${project.basedir}/src/main/resources</directory>
                <includes>
                    <include>**/*</include>
                </includes>
            </resource>
            <resource>
                <directory>${project.basedir}/src/main/filtered-resources</directory>
                <filtering>true</filtering>
                <includes>
                    <include>**/*</include>
                </includes>
            </resource>
        </resources>
        <plugins>
            <plugin>
                <groupId>org.codehaus.mojo</groupId>
                <artifactId>exec-maven-plugin</artifactId>
                <configuration>
                    <mainClass>Main</mainClass>
                </configuration>
            </plugin>
            <plugin>
                <groupId>org.apache.felix</groupId>
                <artifactId>maven-bundle-plugin</artifactId>
                <configuration>
                    <instructions>
                        <Bundle-SymbolicName>${project.artifactId}</Bundle-SymbolicName>
                        <Import-Package>
                            !org.apache.karaf.shell.console*,
                            !org.apache.felix.gogo.commands*,
                            !org.fusesource.jansi*,
                            !javax.swing,
                            !jline,
                            com.sun.jna*;resolution:=optional,
                            org.apache.karaf.branding;resolution:=optional,
                            *
                        </Import-Package>
                        <Export-Package>
                            org.apache.felix.gogo.commands*;version=${felix.gogo.version},
                            org.osgi.service.command;version=${felix.gogo.version},
                            org.osgi.service.threadio;version=${felix.gogo.version},
                            org.apache.karaf.shell.console*;version=${project.version},
                            org.fusesource.jansi;version=${jansi.version},
                            jline;version=${jline.version}
                        </Export-Package>
                        <Private-Package>
                            org.fusesource.jansi.internal,
                            org.apache.felix.gogo.runtime*
                        </Private-Package>
                        <Bundle-NativeCode>jline/jline32.dll;
                                           osname=Win32;
                                           processor=x86,
                                           jline/jline64.dll;
                                           osname=Win32;
                                           processor=x86-64,
                                           *
                        </Bundle-NativeCode>
                        <Bundle-Activator>
                            org.apache.karaf.shell.console.jline.Activator
                        </Bundle-Activator>
                        <Main-Class>
                            org.apache.karaf.shell.console.Main
                        </Main-Class>
                        <_versionpolicy>${bnd.version.policy}</_versionpolicy>
                    </instructions>
                    <unpackBundle>true</unpackBundle>
                </configuration>
            </plugin>
        </plugins>
    </build>
</project>
