<!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">
The best way to learn is to practice! That's what the Ivy tutorials will help you to do, to discover some of the great Ivy [[features features]].

For the first tutorial you won't even have to install Ivy (assuming you have Ant and a JDK properly installed), and it shouldn't take more than 30 seconds.

<b>First Tutorial</b>
<ol>
<li>Make sure you have <a href="http://ant.apache.org/">ant</a> 1.6.0 or greater and a <a href="http://java.sun.com">jdk</a> properly installed</li>
<li>Copy <a href="samples/build.xml">this build file</a> in an empty directory on your local filesystem (and make sure you name it build.xml)</li>
<li>Open a console in this directory and run "ant". That's it!</li>
</ol>
If you have any trouble, check the <a href="http://ant.apache.org/ivy/faq.html">FAQ</a>. It is most likely related to your internet connection (proxy anyone?).

OK, you've just seen how easy it is to take your first step with Ivy. Go ahead with the other tutorials, but before you do, make sure you have properly <a href="install.html">installed</a> Ivy and downloaded the tutorials sources (included in all Ivy distributions, in the <tt>[[gitdir:src/example]]</tt> directory).

The following tutorials are available:
<ul>
<li><a href="tutorial/start.html">Quick Start</a></li> 
Guides you through your very first steps with ivy.
<li>[[tutorial/defaultconf]]</li> 
Gives you a better understanding of the default settings and shows you how to customize them to your needs.
<li><a href="tutorial/multiple.html">Multiple Resolvers</a></li> 
Teaches you how to configure Ivy to find its dependencies in multiple places.
<li><a href="tutorial/dual.html">Dual Resolver</a></li> 
Helps you configure Ivy to find ivy files in one place and artifacts in another.
<li>[[tutorial/dependence]]</a></li> 
A starting point for using Ivy in a multi-project environment.
<li>[[tutorial/multiproject]]</li> 
A more complex example demonstrating the use of Ant+Ivy in a multi-project environment.
<li>[[tutorial/conf]]</li> Shows you how to use configurations in an ivy file to define sets of artifacts.
<li>[[tutorial/build-repository]]</li> 
Shows you how to build your own enterprise repository.
</ul>
	</textarea>
<script type="text/javascript">xooki.postProcess();</script>
</body>
</html>
