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

<h2>Announcement</h2>

<pre>
December 21, 2015 - The Apache Ivy project is pleased to announce its 2.5.0 release.
 
Apache Ivy is a tool for managing (recording, tracking, resolving and
reporting) project dependencies, characterized by flexibility,
configurability, and tight integration with Apache Ant.

Key features of this 2.5.0 release are
* TODO
* TODO
* TODO

You can download this 2.5.0 release at:
http://ant.apache.org/ivy/download.cgi
 
Issues should be reported to:
https://issues.apache.org/jira/browse/IVY
 
More information can be found on the website:
http://ant.apache.org/ivy/
</pre>
 
<h2>List of Changes in this Release</h2>
 
For details about the following changes, check our JIRA install at 
http://issues.apache.org/jira/browse/ivy
 
List of changes since Ivy 2.4.0:

- FIX: ArrayIndexOutOfBoundsException when using a p2 repository for dependencies (IVY-1504)
- FIX: fixdeps remove transitive 'kept' dependencies
- FIX: PomModuleDescriptorParser should parse licenses from parent POM (IVY-1526) (Thanks to Jaikiran Pai)

- IMPROVEMENT: Optimization: limit the revision numbers scanned if revision prefix is specified (Thanks to Ernestas Vaiciukevi&#269;ius)

- NEW: Lets ssh-based resolvers use an ~/.ssh/config file to find username/hostname/keyfile options (Thanks to Colin Stanfill)

<!-- Samples :
- NEW: bla bla bla (IVY-1234) (Thanks to Jane Doe)
- IMPROVEMENT: bla bla bla (IVY-1234) (Thanks to Jane Doe)
- FIX: bla bla bla (IVY-1234) (Thanks to Jane Doe)
- DOCUMENTATION: bla bla bla (IVY-1234) (Thanks to Jane Doe)
-->

<h2>Committers and Contributors</h2>

Here is the list of people who have contributed source code and documentation up 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 Apache Ivy !

<ul>Committers
<li>Matt Benson</li>
<li>Jean-Louis Boudart</li>
<li>Maarten Coene</li>
<li>Charles Duffy</li>
<li>Xavier Hanin</li>
<li>Nicolas Lalevee</li>
<li>Jon Schneider</li>
<li>Gilles Scokart</li>
</ul>

<ul>Contributors:
<li>Ingo Adler</li>
<li>alex322</li>
<li>Mathieu Anquetin</li>
<li>Andreas Axelsson</li>
<li>Stephane Bailliez</li>
<li>Karl Baum</li>
<li>Andrew Bernhagen</li>
<li>Mikkel Bjerg</li>
<li>Per Arnold Blaasmo</li>
<li>Jeffrey Blattman</li>
<li>Jasper Blues</li>
<li>Jim Bonanno</li>
<li>Joseph Boyd</li>
<li>Dave Brosius</li>
<li>Matthieu Brouillard</li>
<li>Carlton Brown</li>
<li>Mirko Bulovic</li>
<li>Ed Burcher</li>
<li>Jamie Burns</li>
<li>Wei Chen</li>
<li>Chris Chilvers</li>
<li>Kristian Cibulskis</li>
<li>Andrea Bernardo Ciddio</li>
<li>Archie Cobbs</li>
<li>Flavio Coutinho da Costa</li>
<li>Stefan De Boey</li>
<li>Mykhailo Delegan</li>
<li>Charles Duffy</li>
<li>Martin Eigenbrodt</li>
<li>Stephen Evanchik</li>
<li>Robin Fernandes</li>
<li>Gregory Fernandez</li>
<li>Danno Ferrin</li>
<li>Benjamin Francisoud</li>
<li>Wolfgang Frank</li>
<li>Jacob Grydholt Jensen</li>
<li>John Gibson</li>
<li>Mitch Gitman</li>
<li>Evgeny Goldin</li>
<li>Scott Goldstein</li>
<li>Pierre Hägnestrand</li>
<li>Scott Hebert</li>
<li>Tobias Himstedt</li>
<li>Aaron Hachez</li>
<li>Ben Hale</li>
<li>Stephen Haberman</li>
<li>Peter Hayes</li>
<li>Scott Hebert</li>
<li>Payam Hekmat</li>
<li>Achim Huegen</li>
<li>Matt Inger</li>
<li>Anders Jacobsson</li>
<li>Anders Janmyr</li>
<li>Steve Jones</li>
<li>Christer Jonsson</li>
<li>Michael Kebe</li>
<li>Matthias Kilian</li>
<li>Alexey Kiselev</li>
<li>Gregory Kisling</li>
<li>Stepan Koltsov</li>
<li>Heschi Kreinick</li>
<li>Sebastian Krueger</li>
<li>Thomas Kurpick</li>
<li>Tat Leung</li>
<li>Costin Leau</li>
<li>Antoine Levy-Lambert</li>
<li>Tony Likhite</li>
<li>Andrey Lomakin</li>
<li>William Lyvers</li>
<li>Sakari Maaranen</li>
<li>Jan Materne</li>
<li>Markus M. May</li>
<li>Abel Muino</li>
<li>J. Lewis Muir</li>
<li>Stephen Nesbitt</li>
<li>Joshua Nichols</li>
<li>Bernard Niset</li>
<li>Ales Nosek</li>
<li>David Maplesden</li>
<li>Glen Marchesani</li>
<li>Phil Messenger</li>
<li>Steve Miller</li>
<li>Mathias Muller</li>
<li>Randy Nott</li>
<li>Peter Oxenham</li>
<li>Jaikiran Pai</li>
<li>Douglas Palmer</li>
<li>Jesper Pedersen</li>
<li>Emmanuel Pellereau</li>
<li>Carsten Pfeiffer</li>
<li>Yanus Poluektovich</li>
<li>Roshan Punnoose</li>
<li>Jean-Baptiste Quenot</li>
<li>Carl Quinn</li>
<li>Damon Rand</li>
<li>Geoff Reedy</li>
<li>Torkild U. Resheim</li>
<li>Christian Riege</li>
<li>Frederic Riviere</li>
<li>Jens Rohloff</li>
<li>Andreas Sahlbach</li>
<li>Brian Sanders</li>
<li>Adrian Sandor</li>
<li>Michael Scheetz</li>
<li>Ben Schmidt</li>
<li>Ruslan Shevchenko</li>
<li>John Shields</li>
<li>Nihal Sinha</li>
<li>Gene Smith</li>
<li>Colin Stanfill</li>
<li>Simon Steiner</li>
<li>Johan Stuyts</li>
<li>John Tinetti</li>
<li>Erwin Tratar</li>
<li>Jason Trump</li>
<li>David Turner</li>
<li>Ernestas Vaiciukevi&#269;ius</li>
<li>Tjeerd Verhagen</li>
<li>Richard Vowles</li>
<li>Sven Walter</li>
<li>James P. White</li>
<li>Tom Widmer</li>
<li>John Williams</li>
<li>Chris Wood</li>
<li>Patrick Woodworth</li>
<li>Jaroslaw Wypychowski</li>
<li>Sven Zethelius</li>
<li>Aleksey Zhukov</li>
<li>Zhong Wang</li>
</ul>

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