<!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>
	<script type="text/javascript">var xookiConfig = {level: 1};</script>	
	<script type="text/javascript" src="../xooki/xooki.js"></script>
</head>
<body>
	<textarea id="xooki-source">
First, locate an ivy.xml file or a maven pom.xml ready to be used to build a classpath.  Also, if necessary, locate a supporting ivysettings.xml.

<h1>Fast creation</h1>
For most of the projects, the ivy.xml file (or the pom.xml) is in the java project. So you can just right click on the ivy.xml and select "Add Ivy Library..." and you can directly access the prefilled setup of the IvyDE classpath container

<center><img src="../images/addivylibrary.jpg"></center>

<h1>Standard creation</h1>
The standard way to add the IvyDE classpath container is to manipulate the Eclipse&#153;'s "Build Path":
<ul>
<li>Select the project in which you want to create an IvyDE classpath container and open the "Add Libraries" form of Eclipse (in package Explorer, in the context menu of your project choose : [Build Path]/[Add Libraries]).<br/><br/><center><img src="../images/build_path_menu.jpg"/></center><br/><br/></li>
<li>Select the "IvyDE Managed Dependencies" item.<br/><br/><center><img src="../images/add_lib.jpg"/></center><br/><br/></li>
<li>Select an ivy.xml file or a <a href="maven.html">maven pom.xml</a> and the desired configurations.<br/><br/><center><img src="../images/ivy_file_def.jpg"/></center><br/><br/></li>
</ul>
<li><a name="localconf"></a>You then might want to use specific settings for your project, a configuration different from the <a href="../preferences.html">global one</a>. Click on the "Enable project specific settings" check box. For additional configuration options, see the documentation about <a href="../eclipsevar.html">Eclipse variables</a>.

<center><img src="../images/project_specific_settings.jpg"/></center></li>
Now your classpath is set and you can see all dependencies in one unique folder of the package explorer (folder name = ivy-file-name[conf1,conf2]).


<center><img src="../images/cp_node.jpg"></center>


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