                             Apache Ivy (TM)
-----------------------------------------------------------------------


What is Apache Ivy?
--------------------

Apache Ivy is a tool for managing (recording, tracking, resolving and reporting) 
project dependencies. 
It is characterized by the following:

   1. flexibility and configurability 
       Apache Ivy is essentially process agnostic and is not tied to any 
       methodology or structure. 
       Instead it provides the necessary flexibility and configurability 
       to be adapted to a broad range of dependency management and build 
       processes.
   2. tight integration with Apache Ant
       while available as a standalone tool, Apache Ivy works particularly well 
       with Apache Ant providing a number of powerful Ant tasks ranging 
       from dependency resolution to dependency reporting and publication.


Latest Changes:
----------------

See the list of the changes since the last release in the file doc/release-notes.html


Supported Platforms
--------------------

Please see the the detailed documentation about Ivy compatibility there: doc/compatibility.html


Installation
-------------

Please read doc/install.html for installation instructions.


Licensing
---------

This software is licensed under the terms you may find in the file 
named "LICENSE" in this directory.


Crypto Notice
-------------
This distribution includes cryptographic software.  The country in 
which you currently reside may have restrictions on the import, 
possession, use, and/or re-export to another country, of 
encryption software.  BEFORE using any encryption software, please 
check your country's laws, regulations and policies concerning the
import, possession, or use, and re-export of encryption software, to 
see if this is permitted.  See <http://www.wassenaar.org/> for more
information.

The U.S. Government Department of Commerce, Bureau of Industry and
Security (BIS), has classified this software as Export Commodity 
Control Number (ECCN) 5D002.C.1, which includes information security
software using or performing cryptographic functions with asymmetric
algorithms.  The form and manner of this Apache Software Foundation
distribution makes it eligible for export under the License Exception
ENC Technology Software Unrestricted (TSU) exception (see the BIS 
Export Administration Regulations, Section 740.13) for both object 
code and source code.

The following provides more details on the included cryptographic
software:

The Ivy ssh resolver requires the JSch library
<http://www.jcraft.com/jsch/index.html>. 
The sftp and https resolvers requires the Java Cryptography extensions
<http://java.sun.com/javase/technologies/security/>.
The PGP signature generator requires the BouncyCastle Java cryptography APIs
<http://www.bouncycastle.org/java.html>.


How to Get Involved
--------------------

The Apache Ivy project really needs and appreciates any contributions, 
including documentation help, source code and feedback.  If you are interested
in contributing, please visit http://ant.apache.org/ivy/get-involved.html.


How to Report Issues
--------------------

The Apache Ivy project uses JIRA for issue tracking.  Please report any 
issues you find at http://issues.apache.org/jira/browse/IVY


