<!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">
If you have successfully followed and understood all the tutorials, you still might need to get a better picture of how to use Ivy in the real world.

Here are some links which might be interesting:

<h3><a href="http://wiki.hippo.nl/display/OS/SAnt+build+system">SAnt</a></h3>
SAnt is an experimental build system based on Ant and Ivy. It can be interesting to use "as is", or to get insight on an interesting approach to manage your builds.

<h3><a href="https://springmodules.dev.java.net/">Spring Modules</a></h3>
The spring modules project build system is based on Ant and Ivy, and it's really interesting to have a look at how a modularized project can take advantage of advanced Ant and Ivy features to make the build simpler.

<h3><a href="http://www.opensymphony.com/webwork/">Webwork</a></h3>
The webwork project (which should become struts action framework) uses ant+ivy for their build, and thus makes their framework very easy to use in an ant+ivy build system. They have a <a href="http://wiki.opensymphony.com/display/WW/Dependencies">page documenting how to use Ivy with their framework</a>, which can be an interesting reading, even if you don't plan to use webwork.

<h3><a href="http://www.jaya.free.fr/ivy/doc/articles/ease-multi-module.html">Easing multi-module development</a></h3>
Johan stuyts, the author of SAnt, also contributed a nice article on his view of how to use Ivy on a multi-module environment.

<h3><a href="http://olmex.blogspot.in/2012/04/ivy-beginners-guide.html">Beginners Guide</a></h3>

Apache Ivy - Beginners Guide is a step by step guide to assist beginners in understanding basic concepts/tasks and use them straight away in their projects either through Ant build or in Eclipse IDE.


	</textarea>
<script type="text/javascript">xooki.postProcess();</script>
</body>
</html>
