<!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: 1};</script>	
	<script type="text/javascript" src="../xooki/xooki.js"></script>
</head>
<body>
	<textarea id="xooki-source">
The IvyDE classpath container can also be used in the launch configuration, run or debug.

<h1>Default behavior</h1>

By default, the container will be used because it is included in the default classpath of you project.  This is the configuration that you implicitly have when you do a "Run As..." on a Java class. The container you see in the launch classpath is the same as the one you have in your project in the package explorer.

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

Launching with the default the compile classpath might not be appropriate for some situations.  For example, you may have additional libraries included in the container under a configuration intended to support unit testing but that may cause some instability in the runtime application.

<h1>Managing the classpath manually</h1>

When you do need to have finer-grained control over which configurations are visible to the runtime classpath, it is possible to edit the runtime classpath manually.

By creating a launch configuration, you will get the default classpath as described above. So the first step is to remove it. Most likely, you will want to re-add your project in the user entries. Then to add an IvyDE container, choose "Advanced":

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

Choose "Add Library":

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

Choose "IvyDE Managed dependencies":

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

Select the absolute path to your ivy.xml and select the proper configurations:

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

<b>Note:</b> in the launch configuration it is not possible to edit or launch a resolve manually on the container you are creating. But it is possible to launch a resolve before each launch. It is recommended to do so if the resolve process is not too long. Otherwise you will have to recreate the container each time you change something in the ivy.xml for instance.

To enable the resolve before each launch, go into the "Advanced" tab and select "Resolve before launch".

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

Click "Finish" and see the result:

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


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