<!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">
1. <a href="#what">What is Apache IvyDE?</a>
2. <a href="#status">Status of this release</a>
3. <a href="#majorchanges">Major Changes in this Release</a>
4. <a href="#contrib">Committers and Contributors for this release</a>
5. <a href="#changes">List of Changes in this Release   </a>


<h1><a name="what"></a>What is Apache IvyDE?</h1>

IvyDE is the plugin which integrate Ivy into Eclipse.

IvyDE lets you manage your dependencies declared in an ivy.xml in your Java
Eclipse projects. IvyDE will contribute to the classpath of your Java project or
you can make it retrieve your dependencies directly into your project. Last but
not least IvyDE offer editors of ivy.xml and ivysettings.xml files with completion.

<h1><a name="status"></a>Status of this release</h1>

This is the first release considered as stable since the project as been hosted
by the Apache Software Foundation.

<h1><a name="majorchanges"></a>Major Changes in this Release</h1>

The "resolve in workspace" feature (make IvyDE search for Ivy dependencies
directly into the Eclipse projects) has been introduced in the last release
but was quite experimental. It has been refactored to be more reliable and
have been reported to be working like a charm by some of the IvyDE early users.

The IvyDE user documentation is now available directly into the Eclipse help center.

IvyDE can now load property files along with the Ivy settings.

<h1><a name="contrib"></a>Committers and Contributors for this Release</h1>

Here is the list of people who have contributed source code and documentation
to this release. Many thanks to all of them, and also to the whole IvyDE community
contributing ideas and feedback, and promoting the use of IvyDE. The list would be too
long, but IvyDE couldn't be what it is without you!

Committers
    Maarten Coene
    Xavier Hanin
    Nicolas Lalevee
    Gilles Scokart

Contributors
    Daniel Becheanu
    Eugene Goldfarb
    Will Gorman
    Marko Niemi

For the list of people who have contributed since IvyDE inception, see CHANGES.txt file.

<h1><a name="changes"></a>List of Changes in this Release</h1>

For a full release history of IvyDE see the file CHANGES.txt

For details about the following changes, check our JIRA install at 
https://issues.apache.org/jira/browse/ivyde

List of changes since IvyDE 2.0.0-beta1:

- NEW: Add the IvyDE documentation to the Eclipse help (IVYDE-150)
- NEW: Export IVY_HOME as a classpath variable (IVYDE-141)
- NEW: Support variables in ivyconf.xml (IVYDE-13) (thanks to Will Gorman)
- NEW: Allow to manually reload the settings (IVYDE-26)
- NEW: Allow to not trigger full resolve at startup (IVYDE-74)

- IMPROVE: Split the global configuration panel into sevral ones (IVYDE-151)
- IMPROVE: Add ivy.xsd to ivy.xml template (IVYDE-165) (thanks to Marko Niemi)
- IMPROVE: Better support the resolve in workspace feature (IVYDE-153) (thanks to Eugene Goldfarb)

- FIX: When migrating from ivyde alpha to ivyde beta eclipse is throwing NPE at startup (IVYDE-136) (thanks to Daniel Becheanu)
- FIX: The retrieve configuration doesn't support '*' as accepted types (IVYDE-137) (thanks to Daniel Becheanu)
- FIX: NPE when a project:/// path is used and path does not exist (IVYDE-144)
- FIX: project://[projectname]/ scheme for settings only work with java projects, not simple projects (IVYDE-145)
- FIX: source and javadoc attachment regression (IVYDE-146)
- FIX: IvyDE does not save "Configurations" and "Types" field values for "Retrive" tab  (IVYDE-142) (thanks to Daniel Becheanu)
- FIX: Retrieve after resolve task fails because of wrong resolve configuration (IVYDE-140) (thanks to Daniel Becheanu)
- FIX: Conversion from "file:" to "project:" fails (IVYDE-143) (thanks to Will Gorman)
- FIX: The decorators can throw a NPE at startup (IVYDE-133)
- FIX: Changing any setting for the classpath container loses the "exported" setting of the classpath container (IVYDE-149)
- FIX: IvyConsole:java.io.IOException: Output Stream is closed (IVYDE-130)
- FIX: "Delete old retrieved artifacts" gets grayed out after OK'ing the dialog (IVYDE-155)
- FIX: REGRESSION: Resolving does no longer respect configurations (IVYDE-161)
- FIX: Parsing ivy file fails in IvyDE while it succeeds in Ant (IVYDE-35)
- FIX: Sources attach but Javadocs don't (IVYDE-166)
- FIX: Branch in repository pattern and defaultBranch (IVYDE-168)
- FIX: The resolve in workspace is being evicted by transitive dependencies (IVYDE-169)
- FIX: Error messages when setting path to ivy settings file covers what is being typed in (IVYDE-172)
- FIX: ResolveAllAction does not resolve multiple IvyDE containers in a single project (IVYDE-175)
- FIX: The sources/javadocs are not added for dependencies which don't have a fixed revision (IVYDE-174)
- FIX: Refresh action is detaching javadoc and sources (IVYDE-176)
- FIX: Add Ivy Library command adds classpath container even though it already exists (IVYDE-164)
- FIX: Importing a project with Ivy configured with an embedded ivysettings fails (IVYDE-181)
- FIX: Importing a project with Ivy fails if properties files are specified in settings (IVYDE-182)
- FIX: IvyDE does not set javadoc archive path properly (IVYDE-179)

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