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

   This software consists of voluntary contributions made by many
   individuals on behalf of the Apache Software Foundation.  For more
   information on the Apache Software Foundation, please see
   <http://www.apache.org />.
 --><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.httpcomponents</groupId>
    <artifactId>httpcomponents-asyncclient</artifactId>
    <version>4.1.4</version>
  </parent>
  <artifactId>httpasyncclient-osgi</artifactId>
  <name>Apache HttpAsyncClient OSGi bundle</name>
  <description>
   Apache HttpComponents AsyncClient (OSGi bundle)
  </description>
  <url>http://hc.apache.org/httpcomponents-asyncclient</url>
  <packaging>bundle</packaging>

  <properties>
    <httpcore.osgi.import.version>"[4.4.0, 4.5.0)"</httpcore.osgi.import.version>
    <httpclient.osgi.import.version>"[4.5.0, 4.6.0)"</httpclient.osgi.import.version>
    <commons-logging.osgi.import.version>"[1.1.0, 1.3.0)"</commons-logging.osgi.import.version>
  </properties>

  <dependencies>
    <dependency>
      <groupId>org.apache.httpcomponents</groupId>
      <artifactId>httpasyncclient</artifactId>
      <version>${project.version}</version>
      <scope>compile</scope>
    </dependency>
  </dependencies>

  <build>
    <plugins>
      <plugin>
        <groupId>org.apache.felix</groupId>
        <artifactId>maven-bundle-plugin</artifactId>
        <extensions>true</extensions>
        <configuration>
          <instructions>
            <Bundle-Name>Apache ${project.name}</Bundle-Name>
            <Bundle-SymbolicName>${project.groupId}.httpasyncclient</Bundle-SymbolicName>
            <_exportcontents>
            org.apache.http.nio.client.*;version=${project.version},
            org.apache.http.nio.conn.*;version=${project.version},
            org.apache.http.impl.nio.client.*;version=${project.version},
            org.apache.http.impl.nio.conn.*;version=${project.version}
            </_exportcontents>
            <Embed-Dependency>*;scope=compile|runtime;inline=true</Embed-Dependency>
            <Import-Package>
            javax.crypto,
            javax.crypto.spec,
            javax.net.ssl,
            javax.security.auth.x500,
            org.ietf.jgss,
            org.apache.commons.logging;version=${commons-logging.osgi.import.version},
            org.apache.http;version=${httpcore.osgi.import.version},
            org.apache.http.entity;version=${httpcore.osgi.import.version},
            org.apache.http.concurrent;version=${httpcore.osgi.import.version},
            org.apache.http.config;version=${httpcore.osgi.import.version},
            org.apache.http.io;version=${httpcore.osgi.import.version},
            org.apache.http.message;version=${httpcore.osgi.import.version},
            org.apache.http.params;version=${httpcore.osgi.import.version},
            org.apache.http.pool;version=${httpcore.osgi.import.version},
            org.apache.http.protocol;version=${httpcore.osgi.import.version},
            org.apache.http.util;version=${httpcore.osgi.import.version},
            org.apache.http.impl;version=${httpcore.osgi.import.version},
            org.apache.http.nio;version=${httpcore.osgi.import.version},
            org.apache.http.nio.entity;version=${httpcore.osgi.import.version},
            org.apache.http.nio.params;version=${httpcore.osgi.import.version},
            org.apache.http.nio.pool;version=${httpcore.osgi.import.version},
            org.apache.http.nio.protocol;version=${httpcore.osgi.import.version},
            org.apache.http.nio.reactor;version=${httpcore.osgi.import.version},
            org.apache.http.nio.reactor.ssl;version=${httpcore.osgi.import.version},
            org.apache.http.nio.util;version=${httpcore.osgi.import.version},
            org.apache.http.impl.nio.codecs;version=${httpcore.osgi.import.version},
            org.apache.http.impl.nio;version=${httpcore.osgi.import.version},
            org.apache.http.impl.nio.reactor;version=${httpcore.osgi.import.version},
            org.apache.http.auth;version=${httpclient.osgi.import.version},
            org.apache.http.cookie;version=${httpclient.osgi.import.version},
            org.apache.http.conn;version=${httpclient.osgi.import.version},
            org.apache.http.conn.params;version=${httpclient.osgi.import.version},
            org.apache.http.conn.routing;version=${httpclient.osgi.import.version},
            org.apache.http.conn.ssl;version=${httpclient.osgi.import.version},
            org.apache.http.conn.util;version=${httpclient.osgi.import.version},
            org.apache.http.client;version=${httpclient.osgi.import.version},
            org.apache.http.client.config;version=${httpclient.osgi.import.version},
            org.apache.http.client.methods;version=${httpclient.osgi.import.version},
            org.apache.http.client.params;version=${httpclient.osgi.import.version},
            org.apache.http.client.protocol;version=${httpclient.osgi.import.version},
            org.apache.http.client.utils;version=${httpclient.osgi.import.version},
            org.apache.http.impl.auth;version=${httpclient.osgi.import.version},
            org.apache.http.impl.cookie;version=${httpclient.osgi.import.version},
            org.apache.http.impl.conn;version=${httpclient.osgi.import.version},
            org.apache.http.impl.client;version=${httpclient.osgi.import.version},
            org.apache.http.impl.execchain;version=${httpclient.osgi.import.version},
            org.apache.http.ssl;version=${httpcore.osgi.import.version},
            *
            </Import-Package>
            <Include-Resource />
            <!-- Stop the JAVA_1_n_HOME variables from being treated as headers by Bnd -->
            <_removeheaders>JAVA_1_3_HOME,JAVA_1_4_HOME</_removeheaders>
          </instructions>
        </configuration>
      </plugin>
      <plugin>
        <groupId>org.codehaus.mojo</groupId>
        <artifactId>clirr-maven-plugin</artifactId>
        <configuration>
          <skip>true</skip>
        </configuration>
      </plugin>
    </plugins>
    <finalName>org.apache.httpcomponents.httpasyncclient_${project.version}</finalName>
  </build>

  <reporting>
    <plugins>
      <plugin>
        <groupId>org.codehaus.mojo</groupId>
        <artifactId>clirr-maven-plugin</artifactId>
        <version>${hc.clirr.version}</version>
        <configuration>
          <skip>true</skip>
        </configuration>
      </plugin>
      <plugin>
        <artifactId>maven-project-info-reports-plugin</artifactId>
        <version>${hc.project-info.version}</version>
        <inherited>false</inherited>
        <reportSets>
          <reportSet>
            <reports>
              <report>dependencies</report>
              <report>dependency-info</report>
              <report>summary</report>
            </reports>
          </reportSet>
        </reportSets>
      </plugin>

    </plugins>
  </reporting>

</project>
