ant-notifications mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From maart...@apache.org
Subject svn commit: r1005260 [2/45] - in /ant/ivy/site/target/history/2.2.0: ./ configuration/ configuration/caches/ configuration/macrodef/ configuration/namespace/ dev/ images/ ivyfile/ js/ resolver/ samples/ settings/ settings/caches/ settings/macrodef/ set...
Date Wed, 06 Oct 2010 21:25:35 GMT
Added: ant/ivy/site/target/history/2.2.0/book.html
URL: http://svn.apache.org/viewvc/ant/ivy/site/target/history/2.2.0/book.html?rev=1005260&view=auto
==============================================================================
--- ant/ivy/site/target/history/2.2.0/book.html (added)
+++ ant/ivy/site/target/history/2.2.0/book.html Wed Oct  6 21:25:29 2010
@@ -0,0 +1,5930 @@
+<!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>	
+	
+
+	<META HTTP-EQUIV="Content-Type" CONTENT="text/html; charset=ISO-8859-1">
+<title>Documentation (2.2.0) | Ivy @version@</title>
+<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
+  <link rel="stylesheet" type="text/css" href="style/print-style.css" />
+
+<script language="javascript" type="text/javascript">xooki = {u: function(url) {return "xooki/"+url;}};</script>
+</head>
+<body>
+
+<div id="body">
+
+<table id="header" summary="Navigation elements." border="0"
+	cellpadding="0" cellspacing="0" width="100%">
+	<tr>
+        <td id="home" width="30%"><a href="http://ant.apache.org/"
+            title="Apache Ant"><img src="images/ant-group-logo.gif" alt="Apache Ant"
+            border="0" /></a></td>
+
+		<td class="product" width="70%" align="right" valign="middle"><img
+			src="images/logo.png" alt="ivy" border="0" /></td>
+	</tr>
+</table>
+
+		<div id="main">
+            <div id="xooki-messages" onclick="xooki.html.hide('xooki-messages')" style="zIndex:999;display:none;position:absolute;top:30px;padding:10px;border-style:solid;background:#eeeeee;"></div><div class='toc-title toc-title-1'>Documentation (2.2.0)</div><br class="xooki-br"/>Welcome to the official Ivy documentation.<br class="xooki-br"/><br class="xooki-br"/><h1>What is Ivy?</h1>
+Ivy is a tool for managing (recording, tracking, resolving and reporting) project dependencies. It is characterized by the following:<br class="xooki-br"/><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 Apache License.<br class="xooki-br"/><br class="xooki-br"/>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.<br class="xooki-br"/><br class="xooki-br"/>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>.<br class="xooki-br"/><br class="xooki-br"/><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.<br class="xooki-br"/><br class="xooki-br"/>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.<br class="xooki-br"/><br class="xooki-br"/>You can also browse this documentation offline either by downloading the documentation distribution, or by checking out the doc directory from svn. This documentation uses <a href="http://xooki.sourceforge.net/">xooki</a> as its documentation engine, so you can very easily edit it and submit patches when you browse it from source.<br class="xooki-br"/><br class="xooki-br"/>A <a href="book.html">printer-friendly version</a> of this whole documentation is also provided for your convenience.<br class="xooki-br"/><br class="xooki-br"/>Since Ivy 2.0.0-alpha-2, we keep an online history of the docu
 mentation. 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.<br class="xooki-br"/><br class="xooki-br"/>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.<br class="xooki-br"/><br class="xooki-br"/><h1>Other places to go</h1>
+Check out Ivy features. <br class="xooki-br"/>Read our FAQ.<br class="xooki-br"/>Ask for help on our mailing lists.<br class="xooki-br"/>Report a bug or feature request in our issue tracking system.<br class="xooki-br"/>Check external tools and resources.<br class="xooki-br"/><br class="xooki-br"/><h1>Overview</h1>
+This documentation is composed of three main parts:
+<ul>
+  <li><a href="tutorial.html">Tutorials</a></li> 
+The tutorials is the best way to begin to play with Ivy. You will easily and quickly learn the basics of Ivy.<br class="xooki-br"/>  <li><a href="reference.html">Reference</a></li> 
+The reference documentation gives you all the details of Ivy. <br class="xooki-br"/>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. <br class="xooki-br"/>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).<br class="xooki-br"/>  <li><a href="dev.html">Developer doc</a></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>
+<hr/><div class='toc-title toc-title-2'>Release Notes</div><br class="xooki-br"/><h2>Announcement</h2>
+
+<pre>
+Sep 30, 2010 - The Ivy project is pleased to announce its 2.2.0 release.<br class="xooki-br"/><br class="xooki-br"/>Ivy is a tool for managing (recording, tracking, resolving and<br class="xooki-br"/>reporting) project dependencies, characterized by flexibility,<br class="xooki-br"/>configurability, and tight integration with Apache Ant.<br class="xooki-br"/><br class="xooki-br"/>Key features of the 2.2.0 release are<br class="xooki-br"/>* enhanced Maven2 compatibility, with several bug fixes and more<br class="xooki-br"/>  pom features covered<br class="xooki-br"/>* new parent mechanism for Ivy files<br class="xooki-br"/>* improved pom generation from an ivy.xml file<br class="xooki-br"/>* automated PGP signature generation when uploading artifacts<br class="xooki-br"/>* numerous bug fixes as documented in Jira and in the release notes<br class="xooki-br"/><br class="xooki-br"/>We encourage all users of Ivy to update to this new version.<br class="xooki-br"/><br class="xook
 i-br"/>Issues should be reported to:<br class="xooki-br"/><a href="https://issues.apache.org/jira/browse/IVY">https://issues.apache.org/jira/browse/IVY</a><br class="xooki-br"/><br class="xooki-br"/>Download the 2.2.0 release at:<br class="xooki-br"/><a href="http://ant.apache.org/ivy/download.cgi">http://ant.apache.org/ivy/download.cgi</a><br class="xooki-br"/><br class="xooki-br"/>More information can be found on the Ivy website:<br class="xooki-br"/><a href="http://ant.apache.org/ivy/">http://ant.apache.org/ivy/</a><br class="xooki-br"/><br class="xooki-br"/>Regards,<br class="xooki-br"/>Maarten Coene
+</pre>
+
+<h2>Release Notes</h2>
+
+CONTENTS<br class="xooki-br"/>1. What is Apache Ivy?<br class="xooki-br"/>2. How to Get Involved<br class="xooki-br"/>3. How to Report Issues<br class="xooki-br"/>4. Committers and Contributors for this release<br class="xooki-br"/>5. List of Changes in this Release   <br class="xooki-br"/>   <br class="xooki-br"/>   <br class="xooki-br"/><h3>1. What is Apache Ivy?</h3>
+
+Apache Ivy is a tool for managing (recording, tracking, resolving and reporting) <br class="xooki-br"/>project dependencies. <br class="xooki-br"/>It is characterized by the following:<br class="xooki-br"/><br class="xooki-br"/>   1. flexibility and configurability <br class="xooki-br"/>        Apache Ivy is essentially process agnostic and is not tied to any <br class="xooki-br"/>        methodology or structure. <br class="xooki-br"/>        Instead it provides the necessary flexibility and configurability <br class="xooki-br"/>        to be adapted to a broad range of dependency management and build <br class="xooki-br"/>        processes.<br class="xooki-br"/>   2. tight integration with Apache Ant<br class="xooki-br"/>        while available as a standalone tool, Apache Ivy works particularly well <br class="xooki-br"/>        with Apache Ant providing a number of powerful Ant tasks ranging <br class="xooki-br"/>        from dependency resolution to dependency reporting
  and publication.<br class="xooki-br"/><br class="xooki-br"/><h3>2. How to Get Involved</h3>
+
+The Apache Ivy project really needs and appreciates any contributions, <br class="xooki-br"/>including documentation help, source code and feedback.  If you are interested<br class="xooki-br"/>in contributing, please visit <a href="http://ant.apache.org/ivy/get-involved.html">http://ant.apache.org/ivy/get-involved.html</a>.<br class="xooki-br"/><br class="xooki-br"/><h3>3. How to Report Issues</h3>
+
+The Apache Ivy project uses JIRA for issue tracking.  Please report any <br class="xooki-br"/>issues you find at <a href="http://issues.apache.org/jira/browse/IVY">http://issues.apache.org/jira/browse/IVY</a><br class="xooki-br"/><br class="xooki-br"/><h3>4. Committers and Contributors for this Release<br class="xooki-br"/><br class="xooki-br"/>Here is the list of people who have contributed source code and documentation<br class="xooki-br"/>to this release. Many thanks to all of them, and also to the whole Ivy community<br class="xooki-br"/>contributing ideas and feedback, and promoting the use of Ivy. The list would be too<br class="xooki-br"/>long, but Ivy couldn't be what it is without you!<br class="xooki-br"/><br class="xooki-br"/> Committers<br class="xooki-br"/>    Matt Benson<br class="xooki-br"/>    Maarten Coene<br class="xooki-br"/>    Xavier Hanin<br class="xooki-br"/>    Nicolas Lalevee<br class="xooki-br"/>    Jon Schneider<br class="xooki-br"/>    Gilles Scok
 art<br class="xooki-br"/><br class="xooki-br"/> Contributors<br class="xooki-br"/>    Andreas Axelsson<br class="xooki-br"/>    Jasper Blues<br class="xooki-br"/>    Jean-Louis Boudart<br class="xooki-br"/>    Dave Brosius<br class="xooki-br"/>    Flavio Coutinho da Costa<br class="xooki-br"/>    Stefan De Boey<br class="xooki-br"/>    Gregory Fernandez<br class="xooki-br"/>    Aaron Hachez<br class="xooki-br"/>    Achim Huegen<br class="xooki-br"/>    Anders Jacobsson<br class="xooki-br"/>    Steve Jones<br class="xooki-br"/>    Heschi Kreinick<br class="xooki-br"/>    Steve Miller<br class="xooki-br"/>    Abel Muino<br class="xooki-br"/>    J. Lewis Muir<br class="xooki-br"/>    Jesper Pedersen<br class="xooki-br"/>    Carl Quinn<br class="xooki-br"/>    Michael Scheetz<br class="xooki-br"/>    John Tinetti<br class="xooki-br"/>    Jason Trump<br class="xooki-br"/>    Richard Vowles<br class="xooki-br"/>    Sven Walter<br class="xooki-br"/><br class="xooki-br"/>For the lis
 t of people who have contributed since Ivy inception, see CHANGES.txt file.<br class="xooki-br"/><br class="xooki-br"/><h3>5. List of Changes in this Release</h3>
+
+For a full release history of Ivy see the file CHANGES.txt<br class="xooki-br"/><br class="xooki-br"/>For details about the following changes, check our JIRA install at <br class="xooki-br"/><a href="http://issues.apache.org/jira/browse/ivy">http://issues.apache.org/jira/browse/ivy</a><br class="xooki-br"/><br class="xooki-br"/>List of changes since Ivy 2.1.0:<br class="xooki-br"/>- DOCUMENTATION: Spelling fixes on artifact description page (<a href="https://issues.apache.org/jira/browse/IVY-1230">IVY-1230</a>)<br class="xooki-br"/>- DOCUMENTATION: Added missing documentation about the ivy:publish child elements.<br class="xooki-br"/>- DOCUMENTATION: Grammar, spelling, and clarity of Settings File documentation (<a href="https://issues.apache.org/jira/browse/IVY-1216">IVY-1216</a>) (thanks to Steve Miller)<br class="xooki-br"/>- DOCUMENTATION: Grammar, spelling, and clarity of Tutorial documentation (<a href="https://issues.apache.org/jira/browse/IVY-1222">IVY-1222</a>) (tha
 nks to Steve Miller)<br class="xooki-br"/>- DOCUMENTATION: Limit the width of running text in documentation (<a href="https://issues.apache.org/jira/browse/IVY-1030">IVY-1030</a>)<br class="xooki-br"/>- DOCUMENTATION: Refer to the maven wiki instead of listing some maven2 mirrors ourselfs (<a href="https://issues.apache.org/jira/browse/IVY-491">IVY-491</a>)<br class="xooki-br"/>- DOCUMENTATION: Fixed several grammatical and typographic errors in documentation (<a href="https://issues.apache.org/jira/browse/IVY-1172">IVY-1172</a>) (thanks to J. Lewis Muir)<br class="xooki-br"/>- DOCUMENTATION: ivy-doc.xsl does not show configurations (<a href="https://issues.apache.org/jira/browse/IVY-1151">IVY-1151</a>) (thanks to Jasper Blues)<br class="xooki-br"/>- DOCUMENTATION: Added documentation of the 'changing' attribute on the ivy:resolve Ant task (<a href="https://issues.apache.org/jira/browse/IVY-1180">IVY-1180</a>)<br class="xooki-br"/><br class="xooki-br"/>- NEW: the ivy:makepom
  Ant task can use a custom template file to generate the pom.xml<br class="xooki-br"/>- NEW: Ivy can now generate OpenPGP compatible ASCII armored detached signatures when publishing artifacts.<br class="xooki-br"/>- NEW: Support ivy.xml parent mechanism (<a href="https://issues.apache.org/jira/browse/IVY-742">IVY-742</a>) (thanks to Jason Trump and Jean-Louis Boudart)<br class="xooki-br"/>- NEW: Make ivy.xml <conf description> available (<a href="https://issues.apache.org/jira/browse/IVY-1158">IVY-1158</a>)<br class="xooki-br"/><br class="xooki-br"/>- IMPROVEMENT: the <artifact> child of ivy:publish now accepts any attribute<br class="xooki-br"/>- IMPROVEMENT: Handle attributes in description subelements (<a href="https://issues.apache.org/jira/browse/IVY-1214">IVY-1214</a>) (thanks to Jean-Louis Boudart)<br class="xooki-br"/>- IMPROVEMENT: Use IvyAuthenticator only when it is really necessary (<a href="https://issues.apache.org/jira/browse/IVY-1211">IVY-1211</a>)<br class=
 "xooki-br"/>- IMPROVEMENT: MakePom task handling of mulitple artifacts for Maven2 (<a href="https://issues.apache.org/jira/browse/IVY-770">IVY-770</a>) (thanks to Jesper Pedersen)<br class="xooki-br"/>- IMPROVEMENT: ivy:makepom now has an option to disable the generation of an extra Ivy comment block in the POM<br class="xooki-br"/>- IMPROVEMENT: ivy:makepom now accepts a list of configurations to include (<a href="https://issues.apache.org/jira/browse/IVY-1005">IVY-1005</a>) (thanks to Jesper Pedersen)<br class="xooki-br"/>- IMPROVEMENT: ivy:makepom can generate a <description> element in the pom (<a href="https://issues.apache.org/jira/browse/IVY-1215">IVY-1215</a>) (thanks to Jesper Pedersen)<br class="xooki-br"/>- IMPROVEMENT: added support for 'gzip' and 'deflate' HTTP Content-Encoding (<a href="https://issues.apache.org/jira/browse/IVY-1194">IVY-1194</a>)<br class="xooki-br"/>- IMPROVEMENT: retrieve doesn't retrive files if the current one is more recent (<a href="http
 s://issues.apache.org/jira/browse/IVY-1044">IVY-1044</a>)<br class="xooki-br"/>- IMPROVEMENT: better diagnostics when reporting bad ivy file in cache (<a href="https://issues.apache.org/jira/browse/IVY-1190">IVY-1190</a>)<br class="xooki-br"/>- IMPROVEMENT: Support changing="true" for inline retrieve (<a href="https://issues.apache.org/jira/browse/IVY-1180">IVY-1180</a>)<br class="xooki-br"/>- IMPROVEMENT: Enhance <info/> task to access the 'publication', 'branch' and published artifacts as ant propeties (<a href="https://issues.apache.org/jira/browse/IVY-395">IVY-395</a>) (thanks to Carl Quinn)<br class="xooki-br"/>- IMPROVEMENT: Ivy doesn't support Maven 2.0.9 'import' scope (<a href="https://issues.apache.org/jira/browse/IVY-807">IVY-807</a>)<br class="xooki-br"/>- IMPROVEMENT: resolver attribute for listmodules task (<a href="https://issues.apache.org/jira/browse/IVY-1057">IVY-1057</a>)<br class="xooki-br"/>- IMPROVEMENT: discover 'src' sources in maven repos (<a href="h
 ttps://issues.apache.org/jira/browse/IVY-1138">IVY-1138</a>)<br class="xooki-br"/>- IMPROVEMENT: Trace a message when a property file referenced from the settings doesn't exixts (<a href="https://issues.apache.org/jira/browse/IVY-1074">IVY-1074</a>)<br class="xooki-br"/>- IMPROVEMENT: use defaultconf in combination with defaultconfmapping (<a href="https://issues.apache.org/jira/browse/IVY-1135">IVY-1135</a>) (thanks to Jon Schneider)<br class="xooki-br"/><br class="xooki-br"/>- FIX: ApacheURLLister doesn't handle some truncated linknames properly (<a href="https://issues.apache.org/jira/browse/IVY-1232">IVY-1232</a>) (thanks to John Tinetti)<br class="xooki-br"/>- FIX: Ivy cannot handle Maven pom with parents depending back on theirselfs (<a href="https://issues.apache.org/jira/browse/IVY-1225">IVY-1225</a>)<br class="xooki-br"/>- FIX: artifactreport ant task doesn't honor log attribute (<a href="https://issues.apache.org/jira/browse/IVY-1212">IVY-1212</a>)<br class="xooki-
 br"/>- FIX: XmlModuleDescriptorWriter does not write the transitive attribute (<a href="https://issues.apache.org/jira/browse/IVY-1207">IVY-1207</a>) (thanks to Abel Muino)<br class="xooki-br"/>- FIX: Ivy info/extends/extendsType attribute is misspelled by XmlModuleDescriptorWriter (<a href="https://issues.apache.org/jira/browse/IVY-1203">IVY-1203</a>) (thanks to Jason Trump)<br class="xooki-br"/>- FIX: The ivy-module version used by XmlModuleDescriptorWriter is hard coded to '1.0' (<a href="https://issues.apache.org/jira/browse/IVY-1199">IVY-1199</a>)<br class="xooki-br"/>- FIX: makepom ignores artifact type in ivy.xml and hardcodes 'jar' in the output pom (<a href="https://issues.apache.org/jira/browse/IVY-736">IVY-736</a>) (thanks to Aaron Hachez)<br class="xooki-br"/>- FIX: Ant output wasn't always prefixed by the name of the Ivy task<br class="xooki-br"/>- FIX: Resolved Ivy properties written to cache during ivy:resolve incorrectly represents forced revisions (<a href="
 https://issues.apache.org/jira/browse/IVY-1159">IVY-1159</a>)<br class="xooki-br"/>- FIX: Namespace rules not properly applied to parent projects (<a href="https://issues.apache.org/jira/browse/IVY-1186">IVY-1186</a>)<br class="xooki-br"/>- FIX: LatestVersionMatcher.needModuleDescriptor() does not honor custom statuses (<a href="https://issues.apache.org/jira/browse/IVY-1170">IVY-1170</a>) (thanks to Carl Quinn)<br class="xooki-br"/>- FIX: Proxy authentication could fail when using commons-httpclient <br class="xooki-br"/>- FIX: Packager resolver always extracts all files from archives even when the packaging instructions contains include tags (<a href="https://issues.apache.org/jira/browse/IVY-1179">IVY-1179</a>) (thanks to Stefan De Boey)<br class="xooki-br"/>- FIX: Ivy cannot connect to URLs with '_' in their hostname<br class="xooki-br"/>- FIX: Transitive dependencies resolutions issue when eviction is triggered (<a href="https://issues.apache.org/jira/browse/IVY-1178">I
 VY-1178</a>)<br class="xooki-br"/>- FIX: Can't deal with [VERSION] version pattern from Maven (<a href="https://issues.apache.org/jira/browse/IVY-1177">IVY-1177</a>) (thanks to Richard Vowles)<br class="xooki-br"/>- FIX: verbose/debug messages were not logged while running ivy:configure task<br class="xooki-br"/>- FIX: ApacheURLLister does not allow directories not containing a dot on Artifactory (<a href="https://issues.apache.org/jira/browse/IVY-1175">IVY-1175</a>) (thanks to Anders Jacobsson)<br class="xooki-br"/>- FIX: artifact-lock strategy could hang Ivy when resolving dynamic revisions<br class="xooki-br"/>- FIX: Authentication won't work in some situations (<a href="https://issues.apache.org/jira/browse/IVY-1168">IVY-1168</a>) (thanks to Sven Walter)<br class="xooki-br"/>- FIX: Using SFTP resolver with full pattern URL prevents use of dynamic versions (<a href="https://issues.apache.org/jira/browse/IVY-1167">IVY-1167</a>) (thanks to Gregory Fernandez)<br class="xooki
 -br"/>- FIX: parent.groupId is not resolved in maven 2 parser (<a href="https://issues.apache.org/jira/browse/IVY-1169">IVY-1169</a>) (thanks to Achim Huegen)<br class="xooki-br"/>- FIX: Creation of symlinks problematic in Windows with Cygwin 1.7 (<a href="https://issues.apache.org/jira/browse/IVY-1165">IVY-1165</a>)<br class="xooki-br"/>- FIX: add ability to programmatically change default resolver (<a href="https://issues.apache.org/jira/browse/IVY-1163">IVY-1163</a>) (thanks to Jason Trump)<br class="xooki-br"/>- FIX: ivy.settings.dir space escaping problem (<a href="https://issues.apache.org/jira/browse/IVY-1162">IVY-1162</a>)<br class="xooki-br"/>- FIX: Ivy cannot parse alternate format for Maven MD5 files (<a href="https://issues.apache.org/jira/browse/IVY-1155">IVY-1155</a>)<br class="xooki-br"/>- FIX: Ivy does not close URL connection to ivy-report.xsl properly (<a href="https://issues.apache.org/jira/browse/IVY-1152">IVY-1152</a>)<br class="xooki-br"/>- FIX: Artifac
 t report throws NPE when artifact is not in cache (<a href="https://issues.apache.org/jira/browse/IVY-1150">IVY-1150</a>) (thanks to Steve Jones)<br class="xooki-br"/>- FIX: resolve fails for transitive relocated maven modules when the type of the dependency was set to 'jar'<br class="xooki-br"/>- FIX: optional dependencies, sources and javadocs aren't resolved when a maven module is relocated<br class="xooki-br"/>- FIX: Encountered 'multiple artifacts retrieved to same file' error when module does not have multiple artifacts (<a href="https://issues.apache.org/jira/browse/IVY-1148">IVY-1148</a>)<br class="xooki-br"/>- FIX: Use of a shared DocumentBuilder causes SAXException during parallel resolutions (<a href="https://issues.apache.org/jira/browse/IVY-1147">IVY-1147</a>)<br class="xooki-br"/>- FIX: metadata lock files not always deleted from cache (<a href="https://issues.apache.org/jira/browse/IVY-1145">IVY-1145</a>) (thanks to Jason Trump)<br class="xooki-br"/>- FIX: Fil
 eSystem resolver with m2compatible=true throws error when publishing modules with dotted organisation names (<a href="https://issues.apache.org/jira/browse/IVY-968">IVY-968</a>)<br class="xooki-br"/>- FIX: ivy:retrieve sync="true" does nothing if first variable is optional (<a href="https://issues.apache.org/jira/browse/IVY-1142">IVY-1142</a>) (thanks to Andreas Axelsson)<br class="xooki-br"/>- FIX: Latest Compatible Conflict Manager + Extra Attributes in Dependencies' IVY files == infinite loop (<a href="https://issues.apache.org/jira/browse/IVY-956">IVY-956</a>)<br class="xooki-br"/>- FIX: Resolve with Extra Attributes, Forced Dependencies causes invalid delivered ivy file (<a href="https://issues.apache.org/jira/browse/IVY-1079">IVY-1079</a>)<br class="xooki-br"/>- FIX: ResolveEngine.getDependencies does not work using extra attributes (<a href="https://issues.apache.org/jira/browse/IVY-1115">IVY-1115</a>)<br class="xooki-br"/>- FIX: <override> ignored in dynamic resolve 
 mode (<a href="https://issues.apache.org/jira/browse/IVY-1131">IVY-1131</a>)<br class="xooki-br"/>- FIX: IvyNodeEviction.cleanEvicted has bad comparison logic (<a href="https://issues.apache.org/jira/browse/IVY-1118">IVY-1118</a>)<br class="xooki-br"/>- FIX: ChainResolver doesn't pass the specified 'checkmodified' attribute to the cache (<a href="https://issues.apache.org/jira/browse/IVY-1133">IVY-1133</a>)<br class="xooki-br"/>- FIX: Ivy couldn't handle maven POMs that depend on theirselves<br class="xooki-br"/>- FIX: SearchEngine.listModules returns MRID without extra attributes (<a href="https://issues.apache.org/jira/browse/IVY-1128">IVY-1128</a>) (thanks to Michael Scheetz)<br class="xooki-br"/>- FIX: IvyBuildNumber non-deterministic behaviour (<a href="https://issues.apache.org/jira/browse/IVY-1120">IVY-1120</a>)<br class="xooki-br"/>- FIX: Change spelling of 'occured' to 'occurred' (<a href="https://issues.apache.org/jira/browse/IVY-1123">IVY-1123</a>)<br class="xooki
 -br"/>- FIX: Ivy deliver fails to replace dynamic revision when using extra attributes (<a href="https://issues.apache.org/jira/browse/IVY-1111">IVY-1111</a>) (thanks to Michael Scheetz)<br class="xooki-br"/>- FIX: IbiblioResolver not always correctly configured when using JRE 1.5 (<a href="https://issues.apache.org/jira/browse/IVY-1124">IVY-1124</a>) (thanks to Flavio Coutinho da Costa)<br class="xooki-br"/>- FIX: VstfpRepository.readResponse uses bad compare logic (<a href="https://issues.apache.org/jira/browse/IVY-1119">IVY-1119</a>) (thanks to Dave Brosius)<br class="xooki-br"/>- FIX: URLResource does not properly support authentication (<a href="https://issues.apache.org/jira/browse/IVY-1106">IVY-1106</a>) (thanks to Heschi Kreinick)<br class="xooki-br"/>- FIX: Excessive hits to missing URLs uses up all ports on Windows (<a href="https://issues.apache.org/jira/browse/IVY-1105">IVY-1105</a>)<br class="xooki-br"/>- FIX: ivy parse exception when using <publications default
 conf> (<a href="https://issues.apache.org/jira/browse/IVY-1102">IVY-1102</a>)<br class="xooki-br"/>- FIX: Change org.apache to commons-cli at jdbc-example (<a href="https://issues.apache.org/jira/browse/IVY-1109">IVY-1109</a>)<br class="xooki-br"/>- FIX: Fixed name snapshots are not updated even if they are marked as changing and the publication date is changed in repo (<a href="https://issues.apache.org/jira/browse/IVY-938">IVY-938</a>)<br class="xooki-br"/>- FIX: Cannot publish wildcard configurations other than * (<a href="https://issues.apache.org/jira/browse/IVY-1171">IVY-1171</a>)<br class="xooki-br"/><hr/><div class='toc-title toc-title-2'>Tutorials</div><br class="xooki-br"/>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.<br class="xooki-br"/><br class="xooki-br"/>For the first tutorial you won't even have to install Ivy (assuming you have Ant and a JDK properly installed), and it sh
 ouldn't take more than 30 seconds.<br class="xooki-br"/><br class="xooki-br"/><b>First Tutorial</b><br class="xooki-br"/><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="../../faq.html">FAQ</a>. It is most likely related to your internet connection (proxy anyone?).<br class="xooki-br"/><br class="xooki-br"/>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><a href="https://svn.apache.org/repos/asf/ant/ivy/core/trunk/src/example">src/example</a></tt> directory).<br class="xooki-br"/><br class="xooki-br"/>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><a href="tutorial/defaultconf.html">Adjusting default settings</a></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><a href="tutorial/dependence.html">Project dependencies</a></a></li> 
+A starting point for using Ivy in a multi-project environment.
+<li><a href="tutorial/multiproject.html">Using Ivy in multiple projects environment</a></li> 
+A more complex example demonstrating the use of Ant+Ivy in a multi-project environment.
+<li><a href="tutorial/conf.html">Using Ivy Module Configurations</a></li> Shows you how to use configurations in an ivy file to define sets of artifacts.
+<li><a href="tutorial/build-repository.html">Building a repository</a></li> 
+Shows you how to build your own enterprise repository.
+</ul>
+	<hr/><div class='toc-title toc-title-3'>Quick Start</div><br class="xooki-br"/>In this tutorial, you will see one of the simplest ways to use Ivy. With no specific settings, Ivy uses the maven 2 repository to resolve the dependencies you declare in an Ivy file. Let's have a look at the content of the files involved. <br class="xooki-br"/><br class="xooki-br"/><em>You'll find this tutorial's sources in the ivy distribution in the src/example/hello-ivy directory.</em><br class="xooki-br"/><br class="xooki-br"/><h1>The ivy.xml file</h1>
+This file is used to describe the dependencies of the project on other libraries.<br class="xooki-br"/>Here is the sample: 
+<pre>
+&lt;ivy-module version="2.0"&gt;<br class="xooki-br"/>    &lt;info organisation="org.apache" module="hello-ivy"/&gt;<br class="xooki-br"/>    &lt;dependencies&gt;<br class="xooki-br"/>        &lt;dependency org="commons-lang" name="commons-lang" rev="2.0"/&gt;<br class="xooki-br"/>        &lt;dependency org="commons-cli" name="commons-cli" rev="1.0"/&gt;<br class="xooki-br"/>    &lt;/dependencies&gt;<br class="xooki-br"/>&lt;/ivy-module&gt;
+</pre>
+
+The format of this file should pretty easy to understand, but let's give some details about what is declared here. First, the root element ivy-module, with the version attribute used to tell Ivy which version of Ivy this file uses. <br class="xooki-br"/><br class="xooki-br"/>Then there is an info tag, which is used to give information about the module for which we are defining dependencies. Here we define only the organization and module name. You are free to choose whatever you want for them, but we recommend avoiding spaces for both.<br class="xooki-br"/><br class="xooki-br"/>Finally, the dependencies section lets you define dependencies. Here this module depends on two libraries: commons-lang and commons-cli. As you can see, we use the <tt>org</tt> and <tt>name</tt> attributes to define the organization and module name of the dependencies we need. The <tt>rev</tt> attribute is used to specify the version of the module you depend on. <br class="xooki-br"/><br class="xooki-
 br"/>To know what to put in these attributes, you need to know the exact information for the libraries you depend on. Ivy uses the maven 2 repository by default, so we recommend you use <a href="http://mvnrepository.com">mvnrepository.com</a> to look for the module you want. Once you find it, you will have the details on how to declare the dependency in a maven POM. For instance:
+<pre>
+&lt;dependency&gt;<br class="xooki-br"/>    &lt;groupId&gt;commons-lang&lt;/groupId&gt;<br class="xooki-br"/>    &lt;artifactId&gt;commons-lang&lt;/artifactId&gt;<br class="xooki-br"/>    &lt;version&gt;2.0&lt;/version&gt;<br class="xooki-br"/>&lt;/dependency&gt;
+</pre>
+To convert this into an Ivy dependency declaration, all you have to do is use the groupId as organization, the artifactId as module name, and the version as revision. That's what we did for the dependencies in this tutorial, that is commons-lang and commons-cli. Note that having commons-lang and commons-cli as organization is not the best example of what the organization should be. It would be better to use org.apache, org.apache.commons or org.apache.commons.lang. However, this is how these modules are identified in the maven 2 repository, so the simplest way to get them is to use the details as is (you will see in <a href="tutorial/build-repository.html">Building a repository</a> that you can use namespaces to redefine these names if you want something cleaner).<br class="xooki-br"/><br class="xooki-br"/>If you want more details on what you can do in Ivy files, you can have a look at the <a href="ivyfile.html">Ivy files reference documentation</a>.<br class="xooki-br"/><h1
 >The build.xml file</h1>
+The corresponding build file contains a set of targets, allowing you to resolve dependencies declared in the Ivy file, to compile and run the sample code, produce a report of dependency resolution, and clean the cache or the project.<br class="xooki-br"/>You can use the standard "ant -p" to get the list of available targets. Feel free to have a look at the whole file, but here is the part relevant to dependency resolution:
+<pre>
+&lt;project xmlns:ivy="antlib:org.apache.ivy.ant" name="hello-ivy" default="run"&gt;<br class="xooki-br"/>    <br class="xooki-br"/>    ...<br class="xooki-br"/>    <br class="xooki-br"/>    &lt;!-- ================================= <br class="xooki-br"/>          target: resolve              <br class="xooki-br"/>         ================================= --&gt;<br class="xooki-br"/>    &lt;target name="resolve" description="--&gt; retrieve dependencies with ivy"&gt;<br class="xooki-br"/>        &lt;ivy:retrieve /&gt;<br class="xooki-br"/>    &lt;/target&gt;<br class="xooki-br"/>&lt;/project&gt;
+</pre>
+As you can see, it's very easy to call Ivy to resolve and retrieve dependencies: all you need if Ivy is properly <a href="install.html">installed</a> is to define an XML namespace in your Ant file (xmlns:ivy="antlib:org.apache.ivy.ant"). Then all the <a href="ant.html">Ivy ant tasks</a> will be available in this namespace.<br class="xooki-br"/><br class="xooki-br"/>Here we use only one task: the <a href="use/retrieve.html">retrieve</a> task. With no attributes, it will use default settings and look for a file named <tt>ivy.xml</tt> for the dependency definitions. That's exactly what we want, so we need nothing more than that.<br class="xooki-br"/><br class="xooki-br"/>Note that in this case we define a <tt>resolve</tt> target and call the <tt><a href="use/retrieve.html">retrieve</a></tt> task. This may sound confusing, actually the retrieve task performs a <a href="use/resolve.html">resolve</a> (which resolves dependencies and downloads them to a cache) followed by a retriev
 e (a copy of those file to a local project directory). Check the <a href="principle.html">How does it work ?</a> page for details about that.<br class="xooki-br"/><h1>Running the project</h1>
+OK, now that we have seen the files involved, let's run the sample to see what happens. Open a shell (or command line) window, and enter the <tt>hello-ivy</tt> example directory.<br class="xooki-br"/>Then, at the command prompt, run <tt>ant</tt>:
+<div class="shell"><pre>
+[ivy@apache:/ivy/hello-ivy]$ ant 
+Buildfile: /ivy/hello-ivy/build.xml
+
+resolve:
+[ivy:retrieve] :: Ivy 2.2.0 - 20100923230623 :: http://ant.apache.org/ivy/ ::
+[ivy:retrieve] :: loading settings :: url = jar:file:///home/ivy/ivy.jar!/org/apache/ivy/core/settings/ivysettings.xml
+[ivy:retrieve] :: resolving dependencies :: org.apache#hello-ivy;working@apache
+[ivy:retrieve] 	confs: [default]
+[ivy:retrieve] 	found commons-lang#commons-lang;2.0 in public
+[ivy:retrieve] 	found commons-cli#commons-cli;1.0 in public
+[ivy:retrieve] 	found commons-logging#commons-logging;1.0 in public
+[ivy:retrieve] downloading http://repo1.maven.org/maven2/commons-lang/commons-lang/2.0/commons-lang-2.0-javadoc.jar ...
+[ivy:retrieve] ...................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................
+[ivy:retrieve] ............................................................................................................................................................................................................................................................................................................................................................................................................................................................................................. (467kB)
+[ivy:retrieve] .. (0kB)
+[ivy:retrieve] 	[SUCCESSFUL ] commons-lang#commons-lang;2.0!commons-lang.jar(javadoc) (3697ms)
+[ivy:retrieve] downloading http://repo1.maven.org/maven2/commons-lang/commons-lang/2.0/commons-lang-2.0.jar ...
+[ivy:retrieve] ............................................................................................................................................................................................................................................................................................................................................... (165kB)
+[ivy:retrieve] .. (0kB)
+[ivy:retrieve] 	[SUCCESSFUL ] commons-lang#commons-lang;2.0!commons-lang.jar (1997ms)
+[ivy:retrieve] downloading http://repo1.maven.org/maven2/commons-lang/commons-lang/2.0/commons-lang-2.0-sources.jar ...
+[ivy:retrieve] ............................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................ (245kB)
+[ivy:retrieve] .. (0kB)
+[ivy:retrieve] 	[SUCCESSFUL ] commons-lang#commons-lang;2.0!commons-lang.jar(source) (3495ms)
+[ivy:retrieve] downloading http://repo1.maven.org/maven2/commons-cli/commons-cli/1.0/commons-cli-1.0-javadoc.jar ...
+[ivy:retrieve] ........................................................................................................................................................................................... (92kB)
+[ivy:retrieve] .. (0kB)
+[ivy:retrieve] 	[SUCCESSFUL ] commons-cli#commons-cli;1.0!commons-cli.jar(javadoc) (2137ms)
+[ivy:retrieve] downloading http://repo1.maven.org/maven2/commons-cli/commons-cli/1.0/commons-cli-1.0.jar ...
+[ivy:retrieve] ......................................................... (29kB)
+[ivy:retrieve] .. (0kB)
+[ivy:retrieve] 	[SUCCESSFUL ] commons-cli#commons-cli;1.0!commons-cli.jar (1404ms)
+[ivy:retrieve] downloading http://repo1.maven.org/maven2/commons-cli/commons-cli/1.0/commons-cli-1.0-sources.jar ...
+[ivy:retrieve] ...................................................................................................... (48kB)
+[ivy:retrieve] .. (0kB)
+[ivy:retrieve] 	[SUCCESSFUL ] commons-cli#commons-cli;1.0!commons-cli.jar(source) (1529ms)
+[ivy:retrieve] downloading http://repo1.maven.org/maven2/commons-logging/commons-logging/1.0/commons-logging-1.0.jar ...
+[ivy:retrieve] ........................................... (21kB)
+[ivy:retrieve] ... (0kB)
+[ivy:retrieve] 	[SUCCESSFUL ] commons-logging#commons-logging;1.0!commons-logging.jar (2199ms)
+[ivy:retrieve] :: resolution report :: resolve 9095ms :: artifacts dl 16520ms
+[ivy:retrieve] 	:: evicted modules:
+[ivy:retrieve] 	commons-lang#commons-lang;1.0 by [commons-lang#commons-lang;2.0] in [default]
+	---------------------------------------------------------------------
+	|                  |            modules            ||   artifacts   |
+	|       conf       | number| search|dwnlded|evicted|| number|dwnlded|
+	---------------------------------------------------------------------
+	|      default     |   4   |   3   |   3   |   1   ||   7   |   7   |
+	---------------------------------------------------------------------
+[ivy:retrieve] :: retrieving :: org.apache#hello-ivy
+[ivy:retrieve] 	confs: [default]
+[ivy:retrieve] 	7 artifacts copied, 0 already retrieved (1069kB/78ms)
+
+run:
+    [mkdir] Created dir: /ivy/hello-ivy/build
+    [javac] /ivy/hello-ivy/build.xml:53: warning: 'includeantruntime' was not set, defaulting to build.sysclasspath=last; set to false for repeatable builds
+    [javac] Compiling 1 source file to /ivy/hello-ivy/build
+     [java] standard message : hello ivy !
+     [java] capitalized by org.apache.commons.lang.WordUtils : Hello Ivy !
+
+BUILD SUCCESSFUL
+Total time: 28 seconds
+
+</pre></div>
+<h1>What happened ?</h1>
+Without any settings, Ivy retrieves files from the maven 2 repository. That's what happened here. <br class="xooki-br"/>The resolve task has found the commons-lang and commons-cli modules in the maven 2 repository, identified that commons-cli depends on commons-logging and so resolved it as a transitive dependency. Then Ivy has downloaded all corresponding artifacts in its cache (by default in your user home, in a .ivy2/cache directory). Finally, the retrieve task copies the resolved jars from the ivy cache to the default library directory of the project: the lib dir (you can change this easily by setting the pattern attribute on the <a href="use/retrieve.html">retrieve</a> task).<br class="xooki-br"/><br class="xooki-br"/>You might say that the task took a long time just to write out a "Hello Ivy!" message. But remember that a lot of time was spent downloading the required files from the web. Let's try to run it again:
+<div class="shell"><pre>
+[ivy@apache:/ivy/hello-ivy]$ ant 
+Buildfile: /ivy/hello-ivy/build.xml
+
+resolve:
+[ivy:retrieve] :: Ivy 2.2.0 - 20100923230623 :: http://ant.apache.org/ivy/ ::
+[ivy:retrieve] :: loading settings :: url = jar:file:///home/ivy/ivy.jar!/org/apache/ivy/core/settings/ivysettings.xml
+[ivy:retrieve] :: resolving dependencies :: org.apache#hello-ivy;working@apache
+[ivy:retrieve] 	confs: [default]
+[ivy:retrieve] 	found commons-lang#commons-lang;2.0 in public
+[ivy:retrieve] 	found commons-cli#commons-cli;1.0 in public
+[ivy:retrieve] 	found commons-logging#commons-logging;1.0 in public
+[ivy:retrieve] :: resolution report :: resolve 343ms :: artifacts dl 16ms
+[ivy:retrieve] 	:: evicted modules:
+[ivy:retrieve] 	commons-lang#commons-lang;1.0 by [commons-lang#commons-lang;2.0] in [default]
+	---------------------------------------------------------------------
+	|                  |            modules            ||   artifacts   |
+	|       conf       | number| search|dwnlded|evicted|| number|dwnlded|
+	---------------------------------------------------------------------
+	|      default     |   4   |   0   |   0   |   1   ||   7   |   0   |
+	---------------------------------------------------------------------
+[ivy:retrieve] :: retrieving :: org.apache#hello-ivy
+[ivy:retrieve] 	confs: [default]
+[ivy:retrieve] 	0 artifacts copied, 7 already retrieved (0kB/15ms)
+
+run:
+    [javac] /ivy/hello-ivy/build.xml:53: warning: 'includeantruntime' was not set, defaulting to build.sysclasspath=last; set to false for repeatable builds
+     [java] standard message : hello ivy !
+     [java] capitalized by org.apache.commons.lang.WordUtils : Hello Ivy !
+
+BUILD SUCCESSFUL
+Total time: 1 second
+
+</pre></div>
+Great! The cache was used, so no download was needed and the build was instantaneous.<br class="xooki-br"/><br class="xooki-br"/>And now, if you want to generate a report detailing all the dependencies of your module, you can call the report target, and check the generated file in the build directory. You should obtain something looking like <a href="../samples/apache-hello-ivy-default.html">this</a>.<br class="xooki-br"/><br class="xooki-br"/>As you can see, using Ivy to resolve dependencies stored in the maven 2 repository is extremely easy. Now you can go on with the next tutorials to learn more about <a href="tutorial/conf.html">how to use module configurations</a> which is a very powerful Ivy specific feature. Other tutorials are also available where you will learn how to use Ivy settings to leverage a possibly complex enterprise repository. It may also be a good time to start reading the <a href="reference.html">reference documentation</a>, and especially the introduct
 ion material which gives a good overview of Ivy. The <a href="bestpractices.html">best practices</a> page is also a must read to start thinking about how to use Ant+Ivy to build a clean and robust build system.<hr/><div class='toc-title toc-title-3'>Adjusting default settings</div><br class="xooki-br"/>Ivy comes bundled with some default settings which makes it pretty simple to use in a typical environment. This tutorial, which is close to a reference document, explains what those default settings are and how they can be adjusted to your needs. <br class="xooki-br"/><br class="xooki-br"/>To fully understand the concept of settings and what you can do with them, we suggest reading other tutorials related to settings (like <a href="tutorial/multiple.html">Multiple Resolvers</a> and <a href="tutorial/dual.html">Dual Resolver</a>) or the <a href="settings.html">Settings Files</a> reference documentation.<br class="xooki-br"/><br class="xooki-br"/><h1>Concept</h1>
+The default settings include 3 types of repositories:
+<ul>
+<li>local</li> a repository which is private to the user. 
+<li>shared</li> a repository which is shared between all the members of a team
+<li>public</li> a public repository on which most modules, and especially third party modules, can be found
+</ul>
+
+Note that if you work alone, the distinction between a local and shared repository is not very important, but there are some things you should know to distinguish them.<br class="xooki-br"/><br class="xooki-br"/>Now let's describe each of these repository concepts in more detail. We will describe how they are set up physically later.<br class="xooki-br"/><h2>Local</h2>
+The local repository is particularly useful when you want to do something without being disturbed by anything else happening in the environment. This means that whenever Ivy is able to locate a module in this repository it will be used, no matter what is available in others.<br class="xooki-br"/><br class="xooki-br"/>For instance, if you have a module declaring a dependency on the module <i>foo</i> with a revision of <i>latest.integration</i>, then if a revision of <i>foo</i> is found in the local repository, it will be used, <em>even if a more recent revision is available in other repositories</em>. <br class="xooki-br"/><br class="xooki-br"/>This may be disturbing for some of you, but imagine you have to implement a new feature on a project, and in order to achieve that you need to modify two modules: you add a new method in module <i>foo</i> and exploit this new method in module <i>bar</i>. Then if you publish the module <i>foo</i> to your local repository, you will be su
 re to get it in your <i>bar</i> module, even if someone else publishes a new revision of <i>foo</i> in the shared repository (this revision not having the new method you are currently adding).<br class="xooki-br"/><br class="xooki-br"/>But be careful, when you have finished your development and publish it on the shared repository, you will have to clean your local repository to benefit from new versions published in the shared repository.<br class="xooki-br"/><br class="xooki-br"/>Note also that modules found in the local repository must be complete, i.e. they must provide both a module descriptor and the published artifacts. <br class="xooki-br"/><h2>Shared</h2>
+As its name suggest, the shared repository is aimed to be shared among a whole development team. It is a place where you can publish your team's private modules, and it's also a place where you can put modules not available in the public repository (sun jars, for instance). You can also put modules here that are simply inaccurate in a public repository (bad or incomplete module descriptors for instance).<br class="xooki-br"/><br class="xooki-br"/>Note that modules can be split across the shared repository and the public one: For example, you can have the module descriptor in the shared repository and the artifacts in the public one.<br class="xooki-br"/><h2>Public</h2>
+The public repository is the place where most modules can be found, but which sometimes lack the information you need. It's usually a repository available through an internet connection only, even if this is not mandatory.<br class="xooki-br"/><h1>Setting up the repositories</h1>
+Now that we have seen the objective of each of the three repositories, let's see how they are setup and how to configure them to fit your needs.<br class="xooki-br"/><br class="xooki-br"/>First, several repositories use the same root in your filesystem. Referenced as <tt>${ivy.default.ivy.user.dir}</tt>, this is by default the directory <tt>.ivy2</tt> in your user home.<br class="xooki-br"/><br class="xooki-br"/>Note that several things can be done by setting Ivy variables. To set them without defining your own <tt>ivysettings.xml</tt> file, you can:<ul>
+<li>set an Ant property before any call to Ivy in your build file if you use Ivy from Ant</li>
+<li>set an environment variable if you use Ivy from the command line</li>
+</ul>
+For example:
+<pre>
+&lt;target name="resolve"&gt;<br class="xooki-br"/>  &lt;property name="ivy.default.ivy.user.dir" value="/path/to/ivy/user/dir"/&gt;<br class="xooki-br"/>  &lt;ivy:resolve /&gt;<br class="xooki-br"/>&lt;/target&gt;
+</pre>
+
+Next we will show you how to override default values for the different kinds of repositories. Note that you can find what the default values are below in the details of the default settings.<br class="xooki-br"/><h2>Local</h2>
+By default, the local repository lies in <tt>${ivy.default.ivy.user.dir}/local</tt>. This is usually a good place, but you may want to modify it. No problem, you just have to set the following Ivy variable to the directory you want to use: <pre>ivy.local.default.root</pre>. For instance:
+<pre>ivy.local.default.root=/opt/ivy/repository/local</pre>.<br class="xooki-br"/><br class="xooki-br"/>If you already have something you would like to use as your local repository, you may also want to modify the layout of this repository. Once again, two variables are available for that:
+<pre>ivy.local.default.ivy.pattern</pre> gives the pattern to find ivy files
+<pre>ivy.local.default.artifact.pattern</pre> gives the pattern to find artifacts<br class="xooki-br"/>For example:
+<pre>
+ivy.local.default.root=/opt/ivy/repository/local<br class="xooki-br"/>ivy.local.default.ivy.pattern=[module]/[revision]/ivy.xml<br class="xooki-br"/>ivy.local.default.artifact.pattern=[module]/[revision]/[artifact].[ext]
+</pre>
+<h2>Shared</h2>
+By default, the shared repository lies in <tt>${ivy.default.ivy.user.dir}/shared</tt>. This is fine if you work alone, but the shared repository is supposed to be, mmm, shared! So changing this directory is often required, and it is usually modified to point to a network shared directory. You can use the <pre>ivy.shared.default.root</pre> variable to specify a different directory. Moreover, you can also configure the layout with variables similar to the ones used for the local repository:
+<pre>ivy.shared.default.ivy.pattern</pre> gives the pattern to find ivy files
+<pre>ivy.shared.default.artifact.pattern</pre> gives the pattern to find artifacts<br class="xooki-br"/>For example:
+<pre>
+ivy.shared.default.root=/opt/ivy/repository/shared<br class="xooki-br"/>ivy.shared.default.ivy.pattern=[organisation]/[module]/[revision]/ivy.xml<br class="xooki-br"/>ivy.shared.default.artifact.pattern=[organisation]/[module]/[revision]/[artifact].[ext]
+</pre>
+
+<h2>Public</h2>
+By default, the public repository is ibiblio in m2 compatible mode (in other words, the maven 2 public repository).<br class="xooki-br"/><br class="xooki-br"/>This repository has the advantage of providing a lot of modules, with metadata for most of them. The quality of metadata is not always perfect, but it's a very good start to use a tool like Ivy and benefit from the power of transitive dependency management. <br class="xooki-br"/><br class="xooki-br"/>Despite its ease of use, we suggest reading the <a href="bestpractices.html">Best practices</a> to have a good understanding of the pros and cons of using a public unmanaged repository before depending on such a repository for your enterprise build system.<br class="xooki-br"/><br class="xooki-br"/><em>In 1.4 version Ivy was using ivyrep as the default resolver, if you want to restore this, set<br class="xooki-br"/>ivy.14.compatible=true as an ant property</em><br class="xooki-br"/><br class="xooki-br"/><h1>Going further</
 h1>
+OK, so we have seen how to easily change the settings of the three main repositories. But what if my shared repository is on a web server? What if you don't want to use maven 2 repository as the public repository? What if ... <br class="xooki-br"/><br class="xooki-br"/>No problem, Ivy is very flexible and can be configured with specific settings to match your needs and environment. But before considering writing your own settings from scratch, we suggest reading the following where you will learn how to leverage a part of the default settings and adjust the rest.<br class="xooki-br"/><br class="xooki-br"/>But before explaining how, you will need to have a quick overview of how Ivy is configured by default.<br class="xooki-br"/><br class="xooki-br"/>By default, Ivy is configured using an <tt>ivysettings.xml</tt> which is packaged in the Ivy jar. Here is this settings file:
+<pre>
+&lt;ivysettings&gt;<br class="xooki-br"/>  &lt;settings defaultResolver="default"/&gt;<br class="xooki-br"/>  &lt;include url="${ivy.default.settings.dir}/ivysettings-public.xml"/&gt;<br class="xooki-br"/>  &lt;include url="${ivy.default.settings.dir}/ivysettings-shared.xml"/&gt;<br class="xooki-br"/>  &lt;include url="${ivy.default.settings.dir}/ivysettings-local.xml"/&gt;<br class="xooki-br"/>  &lt;include url="${ivy.default.settings.dir}/ivysettings-main-chain.xml"/&gt;<br class="xooki-br"/>  &lt;include url="${ivy.default.settings.dir}/ivysettings-default-chain.xml"/&gt;<br class="xooki-br"/>&lt;/ivysettings&gt;
+</pre>
+OK, so not much info here, except a lot of inclusions. These inclusions have been done on purpose so that you can easily change only one part of the ivysettings and easily benefit from the rest. For example, if you want to define your own public resolver, you will just have to configure Ivy with an ivysettings like the following:
+<pre>
+&lt;ivysettings&gt;<br class="xooki-br"/>  &lt;settings defaultResolver="default"/&gt;<br class="xooki-br"/>  &lt;include url="<a href="http://myserver/ivy/myivysettings-public.xml">http://myserver/ivy/myivysettings-public.xml</a>"/&gt;<br class="xooki-br"/>  &lt;include url="${ivy.default.settings.dir}/ivysettings-shared.xml"/&gt;<br class="xooki-br"/>  &lt;include url="${ivy.default.settings.dir}/ivysettings-local.xml"/&gt;<br class="xooki-br"/>  &lt;include url="${ivy.default.settings.dir}/ivysettings-main-chain.xml"/&gt;<br class="xooki-br"/>  &lt;include url="${ivy.default.settings.dir}/ivysettings-default-chain.xml"/&gt;<br class="xooki-br"/>&lt;/ivysettings&gt;
+</pre>
+Note that only the <tt>ivysettings-public.xml</tt> inclusion has changed to include a homemade public resolver. Note also that this can be used like that thanks to the fact that <tt>${ivy.default.settings.dir}</tt> is a variable which is always set to the place where Ivy's default settings files are (i.e. packaged in the jar).<br class="xooki-br"/>To finish this example, you have to write your own ivysettings file (that you will make available at <a href="http://myserver/ivy/myivysettings-public.xml">http://myserver/ivy/myivysettings-public.xml</a> in this example) for defining your own public resolver. For instance:
+<pre>
+&lt;ivysettings&gt;<br class="xooki-br"/>  &lt;resolvers&gt;<br class="xooki-br"/>    &lt;filesystem name="public"&gt;<br class="xooki-br"/>      &lt;ivy pattern="/path/to/my/public/rep/[organisation]/[module]/ivy-[revision].xml" /&gt;<br class="xooki-br"/>      &lt;artifact pattern="/path/to/my/public/rep/[organisation]/[module]/[artifact]-[revision].[ext]" /&gt;<br class="xooki-br"/>    &lt;/filesystem&gt;<br class="xooki-br"/>  &lt;/resolvers&gt;<br class="xooki-br"/>&lt;/ivysettings&gt;
+</pre>
+Now the last thing you will need in order to properly take advantage of the default settings is the content of each included ivysettings file:<br class="xooki-br"/><strong>ivysettings-public.xml</strong>
+<pre>
+&lt;ivysettings&gt;<br class="xooki-br"/>  &lt;resolvers&gt;<br class="xooki-br"/>    &lt;ibiblio name="public" m2compatible="true"/&gt;<br class="xooki-br"/>  &lt;/resolvers&gt;<br class="xooki-br"/>&lt;/ivysettings&gt;
+</pre>
+<strong>ivysettings-shared.xml</strong>
+<pre>
+&lt;ivysettings&gt;<br class="xooki-br"/>  &lt;property name="ivy.shared.default.root"             value="${ivy.default.ivy.user.dir}/shared" override="false"/&gt;<br class="xooki-br"/>  &lt;property name="ivy.shared.default.ivy.pattern"      value="[organisation]/[module]/[revision]/[type]s/[artifact].[ext]" override="false"/&gt;<br class="xooki-br"/>  &lt;property name="ivy.shared.default.artifact.pattern" value="[organisation]/[module]/[revision]/[type]s/[artifact].[ext]" override="false"/&gt;<br class="xooki-br"/>  &lt;resolvers&gt;<br class="xooki-br"/>    &lt;filesystem name="shared"&gt;<br class="xooki-br"/>      &lt;ivy pattern="${ivy.shared.default.root}/${ivy.shared.default.ivy.pattern}" /&gt;<br class="xooki-br"/>      &lt;artifact pattern="${ivy.shared.default.root}/${ivy.shared.default.artifact.pattern}" /&gt;<br class="xooki-br"/>    &lt;/filesystem&gt;<br class="xooki-br"/>  &lt;/resolvers&gt;<br class="xooki-br"/>&lt;/ivysettings&gt;
+</pre>
+<strong>ivysettings-local.xml</strong>
+<pre>
+&lt;ivysettings&gt;<br class="xooki-br"/>  &lt;property name="ivy.local.default.root"             value="${ivy.default.ivy.user.dir}/local" override="false"/&gt;<br class="xooki-br"/>  &lt;property name="ivy.local.default.ivy.pattern"      value="[organisation]/[module]/[revision]/[type]s/[artifact].[ext]" override="false"/&gt;<br class="xooki-br"/>  &lt;property name="ivy.local.default.artifact.pattern" value="[organisation]/[module]/[revision]/[type]s/[artifact].[ext]" override="false"/&gt;<br class="xooki-br"/>  &lt;resolvers&gt;<br class="xooki-br"/>    &lt;filesystem name="local"&gt;<br class="xooki-br"/>      &lt;ivy pattern="${ivy.local.default.root}/${ivy.local.default.ivy.pattern}" /&gt;<br class="xooki-br"/>      &lt;artifact pattern="${ivy.local.default.root}/${ivy.local.default.artifact.pattern}" /&gt;<br class="xooki-br"/>    &lt;/filesystem&gt;<br class="xooki-br"/>  &lt;/resolvers&gt;<br class="xooki-br"/>&lt;/ivysettings&gt;
+</pre>
+<strong>ivysettings-main-chain.xml</strong>
+<pre>
+&lt;ivysettings&gt;<br class="xooki-br"/>  &lt;resolvers&gt;<br class="xooki-br"/>    &lt;chain name="main" dual="true"&gt;<br class="xooki-br"/>      &lt;resolver ref="shared"/&gt;<br class="xooki-br"/>      &lt;resolver ref="public"/&gt;<br class="xooki-br"/>    &lt;/chain&gt;<br class="xooki-br"/>  &lt;/resolvers&gt;<br class="xooki-br"/>&lt;/ivysettings&gt;
+</pre>
+<strong>ivysettings-default-chain.xml</strong>
+<pre>
+&lt;ivysettings&gt;<br class="xooki-br"/>  &lt;resolvers&gt;<br class="xooki-br"/>    &lt;chain name="default" returnFirst="true"&gt;<br class="xooki-br"/>      &lt;resolver ref="local"/&gt;<br class="xooki-br"/>      &lt;resolver ref="main"/&gt;<br class="xooki-br"/>    &lt;/chain&gt;<br class="xooki-br"/>  &lt;/resolvers&gt;<br class="xooki-br"/>&lt;/ivysettings&gt;
+</pre>
+
+There you go, you should have enough clues to configure Ivy the way you want. Check the <a href="settings.html">settings documentation</a> to see if what you want to do is possible, and go ahead!<br class="xooki-br"/>	<hr/><div class='toc-title toc-title-3'>Multiple Resolvers</div><br class="xooki-br"/>This tutorial is an example of how modules can be retrieved by multiple resolvers. Using multiple resolvers can be useful in many contexts. For example:
+<ul>
+<li>separating integration builds from releases</li>
+<li>using a public repository for third party modules and a private one for internal modules</li>
+<li>use a repository for storing modules which are not accurate in an unmanaged public repository</li>
+<li>use a local repository to expose builds made on one developer's station</li>
+</ul>
+
+In Ivy, the use of multiple resolvers is supported by a compound resolver called the chain resolver.<br class="xooki-br"/><br class="xooki-br"/>In our example, we will simply show you how to use two resolvers, one on a local repository and one using the maven2 repository.<br class="xooki-br"/><br class="xooki-br"/><h1>project description</h1>
+<h2>the project: chained-resolvers</h2>
+The project is very simple and contains only one simple class: example.Hello.<br class="xooki-br"/><br class="xooki-br"/>It depends on two libraries: Apache's commons-lang and a custom library named test (sources are included in test-1.0jar file). The test library is used by the project to uppercase a string, and commons-lang is used to capitalize the same string.<br class="xooki-br"/><br class="xooki-br"/>Here is the content of the project:
+<ul>
+  <li>build.xml: the ant build file for the project</li>
+  <li>ivy.xml: the Ivy project file</li>
+  <li>src\example\Hello.java: the only class of the project</li>
+</ul>
+Let's have a look at the <b>ivy.xml</b> file:
+<pre>
+&lt;ivy-module version="1.0"&gt;<br class="xooki-br"/>    &lt;info organisation="org.apache" module="chained-resolvers"/&gt;<br class="xooki-br"/>    &lt;dependencies&gt;<br class="xooki-br"/>        &lt;dependency org="commons-lang" name="commons-lang" rev="2.0"/&gt;<br class="xooki-br"/>        &lt;dependency name="test" rev="1.0"/&gt;<br class="xooki-br"/>    &lt;/dependencies&gt;<br class="xooki-br"/>&lt;/ivy-module&gt;
+</pre>
+As we'd expect, the ivy file declares this module to be dependent on the two libraries it uses: 'commons-lang' and 'test'. Note that we didn't specify the org for the dependency 'test'. When we exclude org, Ivy assumes it is in the same org as the declaring module. (i.e. 'org.apache').<br class="xooki-br"/><br class="xooki-br"/><h2>the <b>ivy settings</b></h2>
+The settings are defined in the ivysettings.xml file located in the settings directory of the project. Below are its contents, followed by an explanation of what it's doing.<br class="xooki-br"/>
+<pre>
+&lt;ivysettings&gt;<br class="xooki-br"/>  &lt;settings defaultResolver="chain-example"/&gt;<br class="xooki-br"/>  &lt;resolvers&gt;<br class="xooki-br"/>    &lt;chain name="chain-example"&gt;<br class="xooki-br"/>      &lt;filesystem name="libraries"&gt;<br class="xooki-br"/>        &lt;artifact pattern="${ivy.settings.dir}/repository/[artifact]-[revision].[ext]" /&gt;<br class="xooki-br"/>      &lt;/filesystem&gt;<br class="xooki-br"/>      &lt;ibiblio name="ibiblio" m2compatible="true" /&gt;<br class="xooki-br"/>    &lt;/chain&gt;<br class="xooki-br"/>  &lt;/resolvers&gt;<br class="xooki-br"/>&lt;/ivysettings&gt;
+</pre>
+<h2>the <b>settings</b> tag</h2>
+This tag initializes Ivy with some parameters. Here only one parameter is set, the name of the resolver to use by default.<br class="xooki-br"/><br class="xooki-br"/><h2>the <b>resolvers</b> tag</h2>
+The resolvers section defines the list of resolvers that Ivy will use to locate artifacts. In our example, we have only one resolver named "chain-example", which is unique in that it defines a list (hence a chain) of resolvers.<br class="xooki-br"/>The resolvers in this chain are:
+<ul>
+  <li>libraries : It is a filesystem resolver, so looks at a directory structure to retrieve the artifacts. This one is configured to look in the <tt>repository</tt> sub directory of the directory that contains the <tt>ivysettings.xml</tt> file.</li>
+  <li>ibiblio : It looks in the ibiblio maven repository to retrieve the artifacts.</li>
+</ul>
+
+That's it, we have just configured a chain of resolvers!<br class="xooki-br"/><br class="xooki-br"/><h1>walkthrough</h1>
+<div class="step">
+<h2>step 1: preparation</h2>
+Open a DOS or shell window, and go to the "chained-resolvers" directory.
+</div>
+<div class="step">
+<h2>step 2: clean directory tree</h2>
+On the prompt type: ant<br>
+This will clean up the entire project directory tree and Ivy cache. You can do this each time you want to clean up this example.<br class="xooki-br"/>
+<div class="tip">
+In almost all examples, we provide a clean target as default target. Since most examples use the same Ivy cache, you will clean the whole Ivy cache each time you call this target. <br class="xooki-br"/><br class="xooki-br"/>Cleaning the Ivy cache is something you can do without fear (except performance): it's only a cache, so everything can be (and should be) obtained again from repositories. This may sound strange to those coming from maven 2 land. But remember that in Ivy, the cache is not a local repository and the two are completely isolated.
+</div>
+</div>
+<div class="step">
+<h2>step 3: run the project</h2>
+Go to <tt>chained-resolvers</tt> project directory. And simply run <tt>ant</tt>.<br class="xooki-br"/>
+<div class="shell"><pre>
+[ivy@apache:/ivy/chained-resolvers/chainedresolvers-project]$ ant 
+Buildfile: /ivy/chained-resolvers/chainedresolvers-project/build.xml
+
+resolve:
+[ivy:retrieve] :: Ivy 2.2.0 - 20100923230623 :: http://ant.apache.org/ivy/ ::
+[ivy:retrieve] :: loading settings :: file = /ivy/chained-resolvers/settings/ivysettings.xml
+[ivy:retrieve] :: resolving dependencies :: org.apache#chained-resolvers;working@apache
+[ivy:retrieve] 	confs: [default]
+[ivy:retrieve] 	found commons-lang#commons-lang;2.0 in ibiblio
+[ivy:retrieve] 	found org.apache#test;1.0 in libraries
+[ivy:retrieve] downloading http://repo1.maven.org/maven2/commons-lang/commons-lang/2.0/commons-lang-2.0.jar ...
+[ivy:retrieve] ........................................................................................................................................................................................................................................................................................................................................... (165kB)
+[ivy:retrieve] .. (0kB)
+[ivy:retrieve] 	[SUCCESSFUL ] commons-lang#commons-lang;2.0!commons-lang.jar (2745ms)
+[ivy:retrieve] downloading /ivy/chained-resolvers/settings/repository/test-1.0.jar ...
+[ivy:retrieve] .. (1kB)
+[ivy:retrieve] 	[SUCCESSFUL ] org.apache#test;1.0!test.jar (16ms)
+[ivy:retrieve] :: resolution report :: resolve 4836ms :: artifacts dl 2761ms
+	---------------------------------------------------------------------
+	|                  |            modules            ||   artifacts   |
+	|       conf       | number| search|dwnlded|evicted|| number|dwnlded|
+	---------------------------------------------------------------------
+	|      default     |   2   |   2   |   1   |   0   ||   2   |   2   |
+	---------------------------------------------------------------------
+[ivy:retrieve] :: retrieving :: org.apache#chained-resolvers
+[ivy:retrieve] 	confs: [default]
+[ivy:retrieve] 	2 artifacts copied, 0 already retrieved (166kB/62ms)
+
+run:
+    [mkdir] Created dir: /ivy/chained-resolvers/chainedresolvers-project/build
+    [javac] /ivy/chained-resolvers/chainedresolvers-project/build.xml:58: warning: 'includeantruntime' was not set, defaulting to build.sysclasspath=last; set to false for repeatable builds
+    [javac] Compiling 1 source file to /ivy/chained-resolvers/chainedresolvers-project/build
+     [java] standard message :example world !
+     [java] capitalized by org.apache.commons.lang.WordUtils : Example World !
+     [java] upperCased by test.StringUtils : EXAMPLE WORLD !
+
+BUILD SUCCESSFUL
+Total time: 10 seconds
+
+</pre></div></div>
+
+We can see in the log of the resolve task, that the two dependencies have been retrieved (2 artifacts) and copied to the Ivy cache directory (2 downloaded). <br class="xooki-br"/><br class="xooki-br"/>Also notice that the 'run' Ant target succeeded in using both commons-lang.jar coming from the ibiblio repository and test.jar coming from the local repository.<br class="xooki-br"/><br class="xooki-br"/><h1>Going further</h1>
+This very simple example helps us see how to set up two resolvers in a chain. The <a href="resolver/chain.html">chain resolver's reference documentation</a> is available for those who would like to know all the features offered by this resolver.<br class="xooki-br"/><br class="xooki-br"/>Below are a few more interesting things worth knowing about chain resolvers. After reading them, go ahead and try tweaking this example using your new wealth of knowledge!
+<ul>
+<li>a chain is not limited to two nested resolvers, you can use as many as you want</li>
+<li>by setting <tt>returnFirst="true"</tt>, you can have a chain which stops as soon as it has found a result for a given module</li>
+<li>by setting <tt>dual="true"</tt>, the full chain will be used both for module descriptors and artifacts, while setting <tt>dual="false"</tt>, the resolver in the chain which found the module descriptor (if any) is also used for artifacts</li>
+</ul>
+
+	<hr/><div class='toc-title toc-title-3'>Dual Resolver</div><br class="xooki-br"/>In some cases, your module descriptions (i.e. Ivy files, maven poms) are located separately from the module artifacts (i.e. jars). So what can you do about it?<br class="xooki-br"/><br class="xooki-br"/>Use a Dual resolver! And this tutorial will show you how.<br class="xooki-br"/><br class="xooki-br"/><h1>project description</h1>
+Let's have a look at the <tt>src/example/dual</tt> directory in your Ivy distribution.<br class="xooki-br"/>It contains a build file and 3 directories:
+<ul>
+<li>settings: contains the ivy settings file</li>
+<li>repository: a sample repository of ivy files</li>
+<li>project: the project making use of Ivy with dual resolver</li>
+</ul>
+
+<h2>the dual project</h2>
+The project is very simple and contains only one simple class: <tt>example.Hello</tt>
+It depends on two libraries: Apache commons-lang and Apache commons-httpclient.<br class="xooki-br"/><br class="xooki-br"/>Here is the content of the project:
+<ul>
+  <li>build.xml: the ant build file for the project</li>
+  <li>ivy.xml: the ivy project file</li>
+  <li>src\example\Hello.java: the only class of the project</li>
+</ul>
+
+Let's have a look at the <tt>ivy.xml</tt> file:
+<pre>
+&lt;ivy-module version="1.0"&gt;<br class="xooki-br"/>    &lt;info organisation="org.apache" module="hello-ivy"/&gt;<br class="xooki-br"/>    &lt;dependencies&gt;<br class="xooki-br"/>        &lt;dependency org="commons-httpclient" name="commons-httpclient" rev="2.0.2"/&gt;<br class="xooki-br"/>        &lt;dependency org="commons-lang" name="commons-lang" rev="2.0"/&gt;<br class="xooki-br"/>    &lt;/dependencies&gt;<br class="xooki-br"/>&lt;/ivy-module&gt;
+</pre>
+
+As you can see, nothing special here... Indeed, Ivy's philosophy is to keep ivy files independent of the way dependencies are resolved.<br class="xooki-br"/><br class="xooki-br"/><h2>the <b>ivy</b> settings</h2>
+The ivy settings are defined in the <tt>ivysettings.xml</tt> file located in the <tt>settings</tt> directory. Here is what it contains, followed by an explanation.<br class="xooki-br"/>
+<pre>
+&lt;ivysettings&gt;<br class="xooki-br"/>  &lt;settings defaultResolver="dual-example"/&gt;<br class="xooki-br"/>  &lt;resolvers&gt;<br class="xooki-br"/>    &lt;dual name="dual-example"&gt;<br class="xooki-br"/>      &lt;filesystem name="ivys"&gt;<br class="xooki-br"/>        &lt;ivy pattern="${ivy.settings.dir}/../repository/[module]-ivy-[revision].xml" /&gt;<br class="xooki-br"/>      &lt;/filesystem&gt;<br class="xooki-br"/>      &lt;ibiblio name="ibiblio" m2compatible="true" usepoms="false" /&gt;<br class="xooki-br"/>    &lt;/dual&gt;<br class="xooki-br"/>  &lt;/resolvers&gt;<br class="xooki-br"/>&lt;/ivysettings&gt;
+</pre>
+
+Here we configured one resolver, the default one, which is a dual resolver. This dual resolver has two sub resolvers: the first is what is called the "ivy" or "metadata" resolver of the dual resolver, and the second one is what is called the "artifact" resolver. It is important that the dual resolver has exactly two sub resolvers in this given order.<br class="xooki-br"/><br class="xooki-br"/>The metadata resolver, here a filesystem one, is used only to find module descriptors, in this case Ivy files. The setting shown here tells Ivy that all ivy files are in the <tt>repository</tt> directory, named with the pattern: <tt>[module]-ivy-[revision].xml</tt>. If we check the <tt>repository</tt> directory, we can confirm that it contains a file named <tt>commons-httpclient-ivy-2.0.2.xml</tt>. This file matches the pattern, so it will be found by the resolver.<br class="xooki-br"/><br class="xooki-br"/>The artifact resolver is simply an ibiblio one, configured in m2compatible mode 
 to use the maven 2 repository, with <tt>usepoms="false"</tt> to make sure it won't use maven 2 metadata. Note that this isn't necessary, since the second resolver in a dual resolver (the artifact resolver) is never asked to find module metadata.<br class="xooki-br"/><br class="xooki-br"/><h1>walkthrough</h1>
+<div class="step">
+<h2>step 1 : preparation</h2>
+Open a DOS or shell window, and go to the <tt>dual</tt> directory.
+</div>
+<div class="step">
+<h2>step 2 : clean up</h2>
+On the prompt type : <tt>ant</tt><br>
+This will clean up the entire project directory tree (compiled classes and retrieved libs) and the Ivy cache. You can run this each time you want to clean up this example.
+</div>
+<div class="step">
+<h2>step 3 : run the project</h2>
+Go to the project directory. And simply run <tt>ant</tt>.
+<div class="shell"><pre>
+[ivy@apache:/ivy/dual/project]$ ant 
+Buildfile: /ivy/dual/project/build.xml
+
+resolve:
+[ivy:retrieve] :: Ivy 2.2.0 - 20100923230623 :: http://ant.apache.org/ivy/ ::
+[ivy:retrieve] :: loading settings :: file = /ivy/dual/settings/ivysettings.xml
+[ivy:retrieve] :: resolving dependencies :: org.apache#hello-ivy;working@apache
+[ivy:retrieve] 	confs: [default]
+[ivy:retrieve] 	found commons-httpclient#commons-httpclient;2.0.2 in ivys
+[ivy:retrieve] 	found commons-logging#commons-logging;1.0.4 in ibiblio
+[ivy:retrieve] 	found commons-lang#commons-lang;2.0 in ibiblio
+[ivy:retrieve] downloading http://repo1.maven.org/maven2/commons-httpclient/commons-httpclient/2.0.2/commons-httpclient-2.0.2.jar ...
+[ivy:retrieve] .................................................................................................................................................................................................................................................................................................................................................................................................................................................... (220kB)
+[ivy:retrieve] .. (0kB)
+[ivy:retrieve] 	[SUCCESSFUL ] commons-httpclient#commons-httpclient;2.0.2!commons-httpclient.jar (3853ms)
+[ivy:retrieve] downloading http://repo1.maven.org/maven2/commons-lang/commons-lang/2.0/commons-lang-2.0.jar ...
+[ivy:retrieve] ................................................................................................................................................................................................................................................................................................................................................ (165kB)
+[ivy:retrieve] .. (0kB)
+[ivy:retrieve] 	[SUCCESSFUL ] commons-lang#commons-lang;2.0!commons-lang.jar (1826ms)
+[ivy:retrieve] downloading http://repo1.maven.org/maven2/commons-logging/commons-logging/1.0.4/commons-logging-1.0.4.jar ...
+[ivy:retrieve] .......................................................................... (37kB)
+[ivy:retrieve] .. (0kB)
+[ivy:retrieve] 	[SUCCESSFUL ] commons-logging#commons-logging;1.0.4!commons-logging.jar (1341ms)
+[ivy:retrieve] :: resolution report :: resolve 1076ms :: artifacts dl 7036ms
+	---------------------------------------------------------------------
+	|                  |            modules            ||   artifacts   |
+	|       conf       | number| search|dwnlded|evicted|| number|dwnlded|
+	---------------------------------------------------------------------
+	|      default     |   3   |   3   |   1   |   0   ||   3   |   3   |
+	---------------------------------------------------------------------
+[ivy:retrieve] :: retrieving :: org.apache#hello-ivy
+[ivy:retrieve] 	confs: [default]
+[ivy:retrieve] 	3 artifacts copied, 0 already retrieved (423kB/47ms)
+
+run:
+    [mkdir] Created dir: /ivy/dual/project/build
+    [javac] /ivy/dual/project/build.xml:58: warning: 'includeantruntime' was not set, defaulting to build.sysclasspath=last; set to false for repeatable builds
+    [javac] Compiling 1 source file to /ivy/dual/project/build
+     [java] standard message : hello ivy !
+     [java] capitalized by org.apache.commons.lang.WordUtils : Hello Ivy !
+     [java] head status code with httpclient: 200
+     [java] now check if httpclient dependency on commons-logging has been realized
+     [java] found logging class in classpath: interface org.apache.commons.logging.Log
+
+BUILD SUCCESSFUL
+Total time: 10 seconds
+
+</pre></div></div>
+<br/>
+As you can see, Ivy not only downloaded commons-lang and commons-httpclient, but also commons-logging. Indeed, commons-logging is a dependency of httpclient, as we can see in the httpclient ivy file found in the <tt>repository</tt> directory:
+<pre>
+&lt;ivy-module version="1.0"&gt;<br class="xooki-br"/>    &lt;info <br class="xooki-br"/>        organisation="commons-httpclient"<br class="xooki-br"/>        module="commons-httpclient"<br class="xooki-br"/>        revision="2.0.2"<br class="xooki-br"/>        status="release"<br class="xooki-br"/>        publication="20041010174300"/&gt;<br class="xooki-br"/>    &lt;dependencies&gt;<br class="xooki-br"/>        &lt;dependency org="commons-logging" name="commons-logging" rev="1.0.4" conf="default"/&gt;<br class="xooki-br"/>    &lt;/dependencies&gt;<br class="xooki-br"/>&lt;/ivy-module&gt;
+</pre>
+<br/>
+So everything seemed to work. The ivy file was found in the <tt>repository</tt> directory and the artifacts have been downloaded from ibiblio. <br class="xooki-br"/><br class="xooki-br"/>This kind of setup can be useful if you don't want to rely on the maven 2 repository for metadata, or if you want to take full advantage of Ivy files for some or all modules. Combining chain and dual resolvers should give you enough flexibility to meet almost any requirement.<br class="xooki-br"/><br class="xooki-br"/>For full details about the dual resolver, have a look at the corresponding <a href="resolver/dual.html">reference documentation</a>.<br class="xooki-br"/>	<hr/><div class='toc-title toc-title-3'>Project dependencies</div><br class="xooki-br"/>This tutorial will show you how to use Ivy when one of your projects depends on another.<br class="xooki-br"/><br class="xooki-br"/>For our example, we will have two projects, depender and dependee, where the depender project uses/requires
  the dependee project. This example will help illustrate two things about Ivy: 
+<ul>
+  <li>that dependencies defined by parent projects (dependee) will automatically be retrieved for use by child projects (depender)</li>
+  <li>that child projects can retrieve the "latest" version of the dependee project</li>
+</ul>
+<h1>projects used</h1>
+<h2>dependee</h2>
+The dependee project is very simple. It depends on the apache library commons-lang and contains only one class: <tt>standalone.Main</tt> which provides two services:
+<ul>
+  <li>return the version of the project</li>
+  <li>capitalize a string using <tt>org.apache.commons.lang.WordUtils.capitalizeFully</tt></li>
+</ul>
+Here is the content of the project:
+<ul>
+  <li>build.xml: the ant build file for the project</li>
+  <li>ivy.xml: the project ivy file</li>
+  <li>src\standalone\Main.java: the only class of the project</li>
+</ul>
+Take a look at the <b>ivy.xml</b> file:
+<pre>
+&lt;ivy-module version="1.0"&gt;<br class="xooki-br"/>    &lt;info organisation="org.apache" module="dependee"/&gt;<br class="xooki-br"/>    &lt;dependencies&gt;<br class="xooki-br"/>        &lt;dependency org="commons-lang" name="commons-lang" rev="2.0"/&gt;<br class="xooki-br"/>    &lt;/dependencies&gt;<br class="xooki-br"/>&lt;/ivy-module&gt;
+</pre>
+
+The ivy file declares only one dependency, that being the apache commons-lang library.<br class="xooki-br"/><h2>depender</h2>
+The depender project is very simple as well. It declares only one dependency on the latest version of the dependee project, and it contains only one class, <tt>depending.Main</tt>, which does 2 things:
+<ul>
+  <li>gets the version of the standalone project by calling <tt>standalone.Main.getVersion()</tt></li>
+  <li>transforms a string by calling <tt>standalone.Main.capitalizeWords(str)</tt></li>
+</ul>
+Take a look at the <tt>ivy.xml</tt> file:
+<pre>
+&lt;ivy-module version="1.0"&gt;<br class="xooki-br"/>    &lt;info organisation="org.apache" module="depender"/&gt;<br class="xooki-br"/>    &lt;dependencies&gt;<br class="xooki-br"/>        &lt;dependency name="dependee" rev="latest.integration" /&gt;<br class="xooki-br"/>    &lt;/dependencies&gt;<br class="xooki-br"/>&lt;/ivy-module&gt;
+</pre>
+
+<h1>settings</h1>
+The Ivy settings are defined in two files located in the settings directory:
+<ul>
+  <li><tt>ivysettings.properties</tt>: a property file</li>
+  <li><tt>ivysettings.xml</tt>: the file containing the settings</li>
+</ul>
+
+Let's have a look at the <tt>ivysettings.xml</tt> file:
+<pre>
+&lt;ivysettings&gt;<br class="xooki-br"/>	&lt;properties file="${ivy.settings.dir}/ivysettings.properties"/&gt;<br class="xooki-br"/>	&lt;settings defaultCache="${ivy.settings.dir}/ivy-cache" defaultResolver="libraries"/&gt;<br class="xooki-br"/>	&lt;resolvers&gt;<br class="xooki-br"/>		&lt;filesystem name="projects"&gt;<br class="xooki-br"/>			&lt;artifact pattern="${repository.dir}/[artifact]-[revision].[ext]" /&gt;<br class="xooki-br"/>			&lt;ivy pattern="${repository.dir}/[module]-[revision].xml" /&gt;<br class="xooki-br"/>		&lt;/filesystem&gt;<br class="xooki-br"/>		&lt;ibiblio name="libraries" m2compatible="true" usepoms="false" /&gt;<br class="xooki-br"/>	&lt;/resolvers&gt;<br class="xooki-br"/>	&lt;modules&gt;<br class="xooki-br"/>		&lt;module organisation="org.apache" name="dependee" resolver="projects"/&gt;<br class="xooki-br"/>	&lt;/modules&gt;<br class="xooki-br"/>&lt;/ivysettings&gt;
+</pre>
+The file contains four main tags: properties, settings, resolvers and modules.<br class="xooki-br"/><h2>properties</h2>
+This tag loads some properties for the Ivy process, just like Ant does.<br class="xooki-br"/><h2>settings</h2>
+This tag initializes some parameters for the Ivy process. In this case, the directory that Ivy will use to cache artifacts will be in a sub directory called ivy-cache of the directory containing the <tt>ivysettings.xml</tt> file itself. <br class="xooki-br"/>The second parameter, tells Ivy to use a resolver named "libraries" as its default resolver. More information can be found in the <a href="settings.html">settings reference documentation</a>.<br class="xooki-br"/><h2>resolvers</h2>
+This tag defines the resolvers to use. Here we have two resolvers defined: "projects" and "libraries".<br class="xooki-br"/>The filesystem resolver called "projects" is able to resolve the internal dependencies by locating them on the local filesystem. <br class="xooki-br"/>The ibiblio resolver called "libraries" is able to find dependencies on the maven 2 repository, but doesn't use maven poms.<br class="xooki-br"/><h2>modules</h2>
+The modules tag allows you to configure which resolver should be used for which module. Here the setting tells Ivy to use the "projects" resolver for all modules having an organisation of <tt>org.apache</tt> and module name of <tt>dependee</tt>. This actually corresponds to only one module, but a regular expression could be used, or many other types of expressions (like glob expressions).<br class="xooki-br"/><br class="xooki-br"/>All other modules (i.e. all modules but org.apache#dependee), will use the default resolver ("libraries").<br class="xooki-br"/><h1>walkthrough</h1>
+<div class="step">
+<h2>step 1: preparation</h2>
+Open a DOS or shell window, and go to the <tt>src/example/dependence</tt> directory.
+</div>
+<div class="step">
+<h2>step 2: clean directory tree</h2>
+On the prompt type: <tt>ant</tt>
+This will clean up the entire project directory tree. You can do this each time you want to clean up this example.
+</div>
+<div class="step">
+<h2>step 3: publication of dependee project</h2>
+Go to <tt>dependee</tt> directory  and publish the project
+<div class="shell"><pre>
+[ivy@apache:/ivy/dependence/dependee]$ ant publish
+Buildfile: /ivy/dependence/dependee/build.xml
+
+resolve:
+[ivy:retrieve] :: Ivy 2.2.0 - 20100923230623 :: http://ant.apache.org/ivy/ ::
+[ivy:retrieve] :: loading settings :: file = /ivy/dependence/settings/ivysettings.xml
+[ivy:retrieve] DEPRECATED: 'defaultCache' is deprecated, use 'caches[@defaultCacheDir]' instead (file://ivy/dependence/settings/ivysettings.xml)
+[ivy:retrieve] :: resolving dependencies :: org.apache#dependee;working@apache
+[ivy:retrieve] 	confs: [default]
+[ivy:retrieve] 	found commons-lang#commons-lang;2.0 in libraries
+[ivy:retrieve] downloading http://repo1.maven.org/maven2/commons-lang/commons-lang/2.0/commons-lang-2.0.jar ...
+[ivy:retrieve] ...................................................................................................................................................................................................................................................................................................................................
+[ivy:retrieve]  (165kB)
+[ivy:retrieve] .. (0kB)
+[ivy:retrieve] 	[SUCCESSFUL ] commons-lang#commons-lang;2.0!commons-lang.jar (3260ms)
+[ivy:retrieve] :: resolution report :: resolve 530ms :: artifacts dl 3260ms
+	---------------------------------------------------------------------
+	|                  |            modules            ||   artifacts   |
+	|       conf       | number| search|dwnlded|evicted|| number|dwnlded|
+	---------------------------------------------------------------------
+	|      default     |   1   |   1   |   0   |   0   ||   1   |   1   |
+	---------------------------------------------------------------------
+[ivy:retrieve] :: retrieving :: org.apache#dependee
+[ivy:retrieve] 	confs: [default]
+[ivy:retrieve] 	1 artifacts copied, 0 already retrieved (165kB/31ms)
+
+compile:
+    [mkdir] Created dir: /ivy/dependence/dependee/build/classes
+    [javac] /ivy/dependence/dependee/build.xml:60: warning: 'includeantruntime' was not set, defaulting to build.sysclasspath=last; set to false for repeatable builds
+    [javac] Compiling 1 source file to /ivy/dependence/dependee/build/classes
+
+jar:
+[propertyfile] Creating new property file: /ivy/dependence/dependee/build/classes/version.properties
+      [jar] Building jar: /ivy/dependence/dependee/build/dependee.jar
+
+publish:
+[ivy:publish] :: delivering :: org.apache#dependee;working@apache :: 1 :: release :: Thu Sep 23 23:15:49 CEST 2010
+[ivy:publish] 	delivering ivy file to /ivy/dependence/dependee/build/ivy.xml
+[ivy:publish] :: publishing :: org.apache#dependee
+[ivy:publish] 	published dependee to /ivy/dependence/settings/repository/dependee-1.jar
+[ivy:publish] 	published ivy to /ivy/dependence/settings/repository/dependee-1.xml

[... 5335 lines stripped ...]


Mime
View raw message