<!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 Ivy reference documentation!

If you don't know Ivy at all, take a look at its [[features features]], the [[faq]] and the [[tutorial tutorials]] before digging into this reference documentation.

<h1>Reference Overview</h1>
This documentation is broken into several parts:
<ul>
<li>Introduction</li>
<ul>
<li>[[terminology]]</li>
This part gives you the meaning of some words used all over the Ivy documentation, such as organization, module, configurations, settings, ...
<li>[[concept]]</li>
This part introduces the main concepts used in Ivy: dependency resolvers, variables, patterns, and also a good introduction to a central ivy concept: module configurations.
<li>[[principle]]</li>
As the title suggests, here you will find an explanation of how Ivy does work internally, which can help to better understand and customize its use.
<li>[[install]]</li>
This part describes how to install Ivy.
<li>[[running]]</li>
This part describes possibility to control the behavior of Ivy at run time
</ul>
<li>[[settings]]</li>
This part is dedicated to the specification of the settings file of Ivy (usually called ivysettings.xml). It also gives the list of built-in dependency resolvers available in Ivy.
<li>[[ivyfile]]</li>
This part is the reference for the module descriptors, the Ivy files in which you describe your dependencies. If you have any questions about what can be done or not in an ivy file, you will find the answer here.
<li>[[ant]]</li>
This part describes how to use Ivy from ant. It's in this section that all ant tasks provided by Ivy are specified.
<li>[[standalone]]</li>
Even though Ivy is most often used from ant, it can also be used from the command line. This page describes how you can do this.
</ul></textarea>
<script type="text/javascript">xooki.postProcess();</script>
</body>
</html>
