<!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: 0};</script>	
	<script type="text/javascript" src="xooki/xooki.js"></script>
</head>
<body>
	<textarea id="xooki-source">
The IvyDE classpath container will help you manage the classpath of your Java&#153; Eclipse&#153; projects, based on the dependencies declared in Ivy files found in your projects.

Some of the tasks that can be performed on the container include:
<ul>
    <li><a href="cpc/create.html">Create</a> a container</li>
    <li><a href="cpc/edit.html">Edit</a> its setup</li>
    <li>Launch a <a href="cpc/resolve.html">resolve</a> of the dependencies</li>
    <li><a href="cpc/retrieve.html">Retrieve</a> the dependencies in your project</li>
    <li>Resolve dependencies within the Eclipse <a href="cpc/workspace.html">workspace</a></li>
    <li><a href="cpc/launch.html">Launch</a> software or unit tests with a classpath managed by IvyDE</li>
    <li>Use IvyDE with <a href="cpc/maven.html">maven pom.xml</a></li>
    <li>Use IvyDE in concert with <a href="cpc/wtp.html">WTP</a></li>
</ul>
</textarea>
<script type="text/javascript">xooki.postProcess();</script>
</body>
</html>
