<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
<!--
   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.    
-->
<html>
<head>
	<META HTTP-EQUIV="Content-Type" CONTENT="text/html; charset=ISO-8859-1">
	<script type="text/javascript">var xookiConfig = {level: 0};</script>	
	<script type="text/javascript" src="xooki/xooki.js"></script>
</head>
<body>
	<textarea id="xooki-source">
Welcome to the official Ivy documentation.

<h1>What is Ivy?</h1>
Ivy is a tool for managing (recording, tracking, resolving and reporting) project dependencies. It is characterized by the following:
<ol>
<li>flexibility and configurability - 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.</li>

<li>tight integration with Apache Ant - while available as a standalone tool, Ivy works particularly well with Apache Ant providing a number of powerful Ant tasks ranging from dependency resolution to dependency reporting and publication.</li>
</ol>
Ivy is open source and released under a very permissive [[license Apache License]].

Ivy has a lot of powerful [[features]], the most popular and useful being its flexibility, integration with ant, and its strong transitive dependencies management engine.

The transitive dependencies management is a feature which lets you get dependencies of your dependencies, transitively. In order to address this general problem, ivy needs to find metadata about your modules, usually in an <a href="ivyfile.html">ivy file</a>. To find the metadata and your dependencies' artifacts (usually jars), Ivy can be configured to use a lot of different <a href="configuration/resolvers.html">repositories</a>.

<h1>About this doc</h1>
<div class="postit" style="width: 250px;">
Tip: The menu on the left is dynamic, you  can click on the arrows to browse the menu without going to each page.
</div>
This documentation has been migrated from the old Ivy web site hosted by Jayasoft, feel free to report any problem on the [[mailing-lists]].

If you browse this documentation from your installation of Ivy, you can also check the <a href="http://ant.apache.org/ivy/">online version</a> for the latest updates.

You can also browse this documentation offline either by downloading the documentation distribution, or by checking out the doc directory from git. This documentation uses <a href="http://xooki.sourceforge.net/">xooki</a> as its documentation engine, so you can very easily [[get-involved edit it and submit patches]] when you browse it from source.

A <a href="book.html">printer-friendly version</a> of this whole documentation is also provided for your convenience.

Since Ivy [[history/2.0.0-alpha-2 2.0.0-alpha-2]], we keep an online history of the documentation. You can thus browse history versions online (in the history menu in the web site) and even check the trunk version documentation currently in development.

For earlier versions, we suggest downloading the documentation to browse the documentation corresponding to the version you use. The full history of Ivy versions with corresponding links for download is available in the history menu on the web site.

<h1>Other places to go</h1>
Check out Ivy [[features features]]. 
Read our [[faq FAQ]].
Ask for help on our [[mailing-lists mailing lists]].
Report a bug or feature request in our [[issues issue tracking system]].
Check [[links external tools and resources]].

<h1>Overview</h1>
This documentation is composed of three main parts:
<ul>
  <li>[[tutorial]]</li> 
The tutorials is the best way to begin to play with Ivy. You will easily and quickly learn the basics of Ivy.
  <li>[[reference]]</li> 
The reference documentation gives you all the details of Ivy. 
The introduction part is particularly useful: it defines some vocabulary, explains main concepts such as dependency resolvers and patterns, and gives an overview of how ivy works internally. 
It's also in the reference doc that you will find all you always dreamed to know about ivy settings, ivy files, and ivy use (especially with ant).
  <li>[[dev]]</li> 
The developers's doc is useful for users who would like to extend Ivy or build it from source. It's also the documentation used by the Ivy team, so you will also find information about how we make releases.
</ul>
</textarea>
<script type="text/javascript">xooki.postProcess();</script>
</body>
</html>
