~~ ====================================================================
~~ 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/>.

    ----------
    HttpComponents HttpAsyncClient Download Page
    ----------
    ----------
    ----------

HttpClient Downloads

    The latest release available for download:

    {{{http://hc.apache.org/downloads.cgi}Release packages}} - 
    {{{http://www.apache.org/dist/httpcomponents/httpasyncclient/RELEASE_NOTES.txt}Release Notes}} -
    {{{http://www.apache.org/licenses/LICENSE-2.0.html}License}}

{Dependency management with Maven}

    If you are using {{{http://maven.apache.org}Maven}} for your project, you can create a dependency 
    in your {{{http://maven.apache.org/guides/introduction/introduction-to-the-pom.html}pom.xml}} 
    by adding the following block to the dependency descriptor:

* {HttpComponents AsyncClient 4.0-ALPHA1}

-------------------------
  <dependency>
    <groupId>org.apache.httpcomponents</groupId>
    <artifactId>httpasyncclient</artifactId>
    <version>4.0-alpha1</version>
    <scope>compile</scope>
  </dependency>
-------------------------
