<?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.2.3</version>
  </parent>
  <artifactId>httpclient-osgi</artifactId>
  <name>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>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>
  </dependencies>

  <properties>
    <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
    <project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
    <maven.compile.source>1.5</maven.compile.source>
    <maven.compile.target>1.5</maven.compile.target>
  </properties>

  <build>
    <resources>
      <resource>
        <directory>src/main/resources</directory>
        <filtering>true</filtering>
        <includes>
            <include>**/*.properties</include>
        </includes>
      </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.client.*;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.version},
            org.apache.http;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>
            <!-- 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>
        <groupId>org.codehaus.mojo</groupId>
        <artifactId>clirr-maven-plugin</artifactId>
        <version>${hc.clirr.version}</version>
        <configuration>
          <skip>true</skip>
        </configuration>
      </plugin>
    </plugins>
  </reporting>
</project>
