<?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-client</artifactId>
    <version>4.3.1</version>
  </parent>
  <artifactId>httpclient-osgi</artifactId>
  <name>Apache HttpClient OSGi bundle</name>
  <inceptionYear>1999</inceptionYear>
  <description>
   HttpComponents Client (OSGi bundle)
  </description>
  <url>http://hc.apache.org/httpcomponents-client</url>
  <packaging>bundle</packaging>

  <dependencies>
    <dependency>
      <groupId>org.apache.httpcomponents</groupId>
      <artifactId>httpclient</artifactId>
      <version>${project.version}</version>
      <scope>compile</scope>
    </dependency>
    <dependency>
      <groupId>org.apache.httpcomponents</groupId>
      <artifactId>httpcore</artifactId>
      <scope>compile</scope>
    </dependency>
    <dependency>
      <groupId>commons-codec</groupId>
      <artifactId>commons-codec</artifactId>
      <version>${commons-codec.version}</version>
      <scope>compile</scope>
    </dependency>
    <dependency>
      <groupId>org.apache.httpcomponents</groupId>
      <artifactId>httpmime</artifactId>
      <version>${project.version}</version>
      <scope>compile</scope>
    </dependency>
    <dependency>
      <groupId>org.apache.httpcomponents</groupId>
      <artifactId>httpclient-cache</artifactId>
      <version>${project.version}</version>
      <scope>compile</scope>
    </dependency>
    <dependency>
      <groupId>org.apache.httpcomponents</groupId>
      <artifactId>fluent-hc</artifactId>
      <version>${project.version}</version>
      <scope>compile</scope>
    </dependency>
    <dependency>
      <groupId>org.osgi</groupId>
      <artifactId>org.osgi.core</artifactId>
      <version>4.2.0</version>
      <scope>provided</scope>
    </dependency>
    <dependency>
      <groupId>org.osgi</groupId>
      <artifactId>org.osgi.compendium</artifactId>
      <version>4.2.0</version>
      <scope>provided</scope>
    </dependency>
    <!-- test dependencies, mainly OSGi runtime environment -->
    <dependency>
      <groupId>junit</groupId>
      <artifactId>junit</artifactId>
      <scope>test</scope>
    </dependency>
  </dependencies>

  <build>
    <resources>
      <resource>
        <directory>src/main/resources</directory>
      </resource>
    </resources>
    <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}.httpclient</Bundle-SymbolicName>
            <_exportcontents>
            org.apache.http.auth.*;version=${project.version},
            org.apache.http.cookie.*;version=${project.version},
            org.apache.http.conn.*;version=${project.version},
            org.apache.http.client.*;version=${project.version},
            org.apache.http.entity.mime.*;version=${project.version},
            org.apache.http.impl.auth.*;version=${project.version},
            org.apache.http.impl.cookie.*;version=${project.version},
            org.apache.http.impl.conn.*;version=${project.version},
            org.apache.http.impl.execchain.*;version=${project.version},
            org.apache.http.impl.client.*;version=${project.version},
            org.apache.http.impl.client.cache.*;version=${project.version},
            org.apache.http.osgi.services.*;version=${project.version}
            </_exportcontents>
            <Embed-Dependency>*;scope=compile|runtime;inline=true</Embed-Dependency>
            <Import-Package>
            javax.crypto,
            javax.crypto.spec,
            javax.net,
            javax.net.ssl,
            javax.security.auth.x500,
            org.ietf.jgss,,
            org.osgi.framework,
            org.osgi.service.cm,
            org.apache.commons.logging;version="[1.1.1,1.2.0)",
            org.apache.http;version=${httpcore.version},
            org.apache.http.config;version=${httpcore.version},
            org.apache.http.concurrent;version=${httpcore.version},
            org.apache.http.entity;version=${httpcore.version},
            org.apache.http.io;version=${httpcore.version},
            org.apache.http.message;version=${httpcore.version},
            org.apache.http.params;version=${httpcore.version},
            org.apache.http.pool;version=${httpcore.version},
            org.apache.http.protocol;version=${httpcore.version},
            org.apache.http.util;version=${httpcore.version},
            org.apache.http.impl;version=${httpcore.version},
            org.apache.http.impl.entity;version=${httpcore.version},
            org.apache.http.impl.io;version=${httpcore.version},
            org.apache.http.impl.pool;version=${httpcore.version},
            net.sf.ehcache.*;resolution:=optional,
            net.spy.memcached.*;resolution:=optional
            </Import-Package>
            <Bundle-Activator>org.apache.http.osgi.impl.HttpProxyConfigurationActivator</Bundle-Activator>
            <!-- 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.httpclient_${project.version}</finalName>
  </build>

  <reporting>
    <plugins>

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