                            Apache IvyDE v2.2.0
                               Release Notes
   -----------------------------------------------------------------------

CONTENTS
1. What is Apache IvyDE?
2. Status of this release
3. Major Changes in this Release
4. Committers and Contributors for this release
5. List of Changes in this Release   


1. What is Apache IvyDE?

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.

2. Status of this release 

This is a minor update from the previous version and is considered as stable. Some
bugs were fixed, and some feature have been added with backward compatibility in mind.

3. Major Changes in this Release

TODO WHEN RELEASING: highlight some big feature here

4. Committers and Contributors for this Release

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
    Jon Schneider
    Gilles Scokart

 Contributors
    TODO WHEN RELEASING: add the contributors to this release from the CHANGES.txt

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

5. List of Changes in this Release

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:

TODO WHEN RELEASING: add the list of changes of this release from the CHANGES.txt
