<?xml version="1.0" encoding="UTF-8"?>
<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/xsd/maven-4.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.http</groupId>
		<artifactId>http</artifactId>
		<version>3.0.5</version>
        <relativePath>../pom.xml</relativePath>
	</parent>

	<artifactId>org.apache.karaf.http.command</artifactId>
	<packaging>bundle</packaging>
	<name>Apache Karaf :: HTTP :: Commands</name>
	<description>This bundle provides Karaf shell commands to list details of the http service.</description>

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

	<dependencies>
	    <dependency>
            <groupId>org.apache.karaf.shell</groupId>
            <artifactId>org.apache.karaf.shell.table</artifactId>
        </dependency>
		<dependency>
			<groupId>org.apache.karaf.shell</groupId>
			<artifactId>org.apache.karaf.shell.console</artifactId>
		</dependency>
        <dependency>
            <groupId>org.apache.karaf.http</groupId>
            <artifactId>org.apache.karaf.http.core</artifactId>
        </dependency>

        <dependency>
            <groupId>org.apache.felix</groupId>
            <artifactId>org.apache.felix.gogo.runtime</artifactId>
            <scope>provided</scope>
        </dependency>
		
		<dependency>
            <groupId>org.osgi</groupId>
            <artifactId>org.osgi.core</artifactId>
			<scope>provided</scope>
		</dependency>
		<dependency>
			<groupId>org.apache.felix</groupId>
			<artifactId>org.apache.felix.utils</artifactId>
			<scope>provided</scope>
		</dependency>
		<dependency>
			<groupId>org.ops4j.pax.web</groupId>
			<artifactId>pax-web-spi</artifactId>
			<scope>provided</scope>
		</dependency>
		<dependency>
			<groupId>${servlet.spec.groupId}</groupId>
			<artifactId>${servlet.spec.artifactId}</artifactId>
			<scope>provided</scope>
		</dependency>
		<dependency>
			<groupId>org.apache.karaf</groupId>
			<artifactId>org.apache.karaf.util</artifactId>
			<scope>compile</scope>
		</dependency>
	</dependencies>

	<build>
		<resources>
			<resource>
				<directory>${project.basedir}/src/main/resources</directory>
				<includes>
					<include>**/*</include>
				</includes>
			</resource>
			<resource>
				<directory>${project.basedir}/src/main/resources</directory>
				<filtering>true</filtering>
				<includes>
					<include>**/*.info</include>
				</includes>
			</resource>
		</resources>
		<plugins>
			<plugin>
				<groupId>org.apache.felix</groupId>
				<artifactId>maven-bundle-plugin</artifactId>
				<configuration>
					<instructions>
						<Bundle-SymbolicName>${project.artifactId}</Bundle-SymbolicName>
						<Export-Package>${project.artifactId}*;version=${project.version}</Export-Package>
						<Import-Package>
                            org.apache.aries.blueprint,
                            org.osgi.service.blueprint.container,
                            org.osgi.service.blueprint.reflect,
							org.apache.felix.service.command,
							org.apache.karaf.shell.commands,
							org.apache.karaf.shell.console,
							*
                        </Import-Package>
						<Private-Package>
							org.apache.felix.utils.version,
							org.apache.felix.utils.manifest,
							org.apache.karaf.util;-split-package:=merge-first
                        </Private-Package>
						<_versionpolicy>${bnd.version.policy}</_versionpolicy>
					</instructions>
				</configuration>
			</plugin>
		</plugins>
	</build>

</project>