<!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">

<h1><a name="latest"></a>Install the last release via Internet</h1>

For most user who have access to the internet it is simpler to install the latest release from the IvyDE updatesite. So just look out there:
http://ant.apache.org/ivy/ivyde/download.cgi

<h1><a name="manual"></a>Manual install</h1>

<h2>Install IvyDE</h2>

So you should have the zip distribution of IvyDE in which you should find these files:
<ul>
<li>features/org.apache.ivyde.feature_2.0.0.final-XXXX.jar</li>
<li>plugins/org.apache.ivyde.eclipse_2.0.0.final-XXXX.jar</li>
</ul>

You can then install them by copying them respectively in the $ECLIPSE_HOME/features and the $ECLIPSE_HOME/plugins:
<code>
cp features/* $ECLIPSE_HOME/features
cp plugins/* $ECLIPSE_HOME/plugins
</code>

<h2>Install the latest Ivy bundle</h2>

Get the latest Ivy feature and bundle for the updatesite:
<ul>
<li>the <a href="[preferred]/ant/ivyde/updatesite/features">features folder</a></li>
<li>the <a href="[preferred]/ant/ivyde/updatesite/plugins">plugins folder</a></li>
</ul>

And then just copy them respectively in the $ECLIPSE_HOME/features and the $ECLIPSE_HOME/plugins folders.

<h2>Restart Eclipse</h2>

After installing manually your plugins, you have to restart your Eclipse to have it take into account the changes. It is recommended to restart it with the -clean option on the command line.

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