  ------
  Release Notes
  ------
  Hervé Boutemy
  ------
  2010-07-19
  ------

~~ 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.

~~ NOTE: For help with the syntax of this file, see:
~~ http://maven.apache.org/doxia/references/apt-format.html

Maven Ant Tasks

* 2.1.2 Release Notes

  The full list of changes can be found in our {{{http://jira.codehaus.org/secure/ReleaseNote.jspa?projectId=11533&version=16670}iss
ue management system}}, and is reproduced below.

** Bug

    * [MANTTASKS-206] - dependecies task overrides custom definition of 'central' repository

    * [MANTTASKS-208] - Change ant groupId to org.apache.ant

** Improvement

    * [MANTTASKS-199] - Loading dependencies from file echo is ant warning instead of info 

    * [MANTTASKS-210] - When creating path objects using the dependencies task it is not possible to filter out artifacts by type.

    * [MANTTASKS-211] - Support launching Maven 3.x from the mvn task

    * [MANTTASKS-217] - Add a pseudo-reactor so that parent pom references can be resolved without pushing poms to the file system

* 2.1.1 Release Notes

  The full list of changes can be found in our {{{http://jira.codehaus.org/secure/ReleaseNote.jspa?projectId=11533&version=16024}issue management system}}, and is reproduced below.

** Bug

    * [MANTTASKS-173] - Value of project.build.finalName is not resolved

    * [MANTTASKS-178] - artifact:pom task not working with Ant 1.8.0

    * [MANTTASKS-179] - Variables nested in pom.xml are not being interpolated

    * [MANTTASKS-185] - null pointer exception when caching dependency information

    * [MANTTASKS-187] - maven ant tasks 2.1.0 pom task no longer extrapolates properties

    * [MANTTASKS-188] - dependencyrefsbuildfile attribute doesn't work with absolute paths.

    * [MANTTASKS-189] - NPE when using scope="system"

    * [MANTTASKS-190] - dependency scope attribute is not validated

    * [MANTTASKS-191] - No explanation of how to use multiple Maven repositories to resolve dependencies

    * [MANTTASKS-192] - NPE when using remoteRepository with refid which has not been defined

    * [MANTTASKS-193] - POM properties aren't available as ANT properties contrary to the documentation

    * [MANTTASKS-195] - Cannot override central repository with my own

** Improvement

    * [MANTTASKS-181] - update tasks code to use Java 5

** Wish

    * [MANTTASKS-172] - extend scope of 'result' variable in org.apache.maven.artifact.ant.DependenciesTask.doExecute()


* 2.1.0 Release Notes

  The full list of changes can be found in our {{{http://jira.codehaus.org/secure/ReleaseNote.jspa?projectId=11533&version=13522}issue management system}}, and is reproduced below.

** Bug

    * [MANTTASKS-4] - System scope not working properly in Maven Antlib

    * [MANTTASKS-152] - Mvn task omit localRepository param

    * [MANTTASKS-153] - Properties defined in Ant are not passed to Maven

    * [MANTTASKS-155] - Dependency fileset should set the current ant project

    * [MANTTASKS-159] - Wrong credentials used for mirrored repositories

    * [MANTTASKS-160] - Wrong metadata files created for mirrored remote repositories

    * [MANTTASKS-167] - Generated ant build file should save version list for version mapper

** Improvement

    * [MANTTASKS-117] - Setting Maven user-properties not possible

    * [MANTTASKS-169] - Dependencies "verbose" option should be deprecated in favor of standard ant verbose option

** New Feature

    * [MANTTASKS-151] - Support for artfacts that are 'classified' from birth

    * [MANTTASKS-156] - Add feature to dependencies task to write file paths to a file.

    * [MANTTASKS-168] - New task to write a pom file


* 2.0.10 Release Notes

  The full list of changes can be found in our {{{http://jira.codehaus.org/secure/IssueNavigator.jspa?reset=true&pid=11533&fixfor=14199}issue management system}}, and is reproduced below.

**Bug

    * [MANTTASKS-87] - Using a pom.xml for dependencies, in which the pom.xml has a parent pom.xml will cause a "Error downloading parent pom" error

    * [MANTTASKS-106] - Maven ant tasks artifact has maven inside the jar and so can't be used from inside the maven (maven-antrun-plugin) - classes do conflict

    * [MANTTASKS-111] - Support for SNAPSHOT deployment

    * [MANTTASKS-116] - NPE when install target is missing file and pom type is JAR

    * [MANTTASKS-142] - Default remote repository id not safe

    * [MANTTASKS-144] - "Error reading settings file" error is reported when settings.xml is deleted from maven/conf folder.

    * [MANTTASKS-145] - Dependency management doesn't work with pom and dependencies tasks

** Improvement

    * [MANTTASKS-35] - Support profiles in pom type

    * [MANTTASKS-114] - improve documentation

    * [MANTTASKS-146] - Improvements to site documentation

    * [MANTTASKS-147] - Improvements to scope filtering

** New Feature

    * [MANTTASKS-71] - running m2 inside Ant

    * [MANTTASKS-149] - Allow multiple types in the type filter


* 2.0.9 Release Notes

  The full list of changes can be found in our {{{http://jira.codehaus.org/secure/IssueNavigator.jspa?reset=true&pid=11533&fixfor=13935&sorter/field=issuekey&sorter/order=DESC}issue management system}}, and is reproduced below.

**Bug

    * [MANTTASKS-13] - Ant Tasks use of <authentication> is inconsistent

    * [MANTTASKS-91] - [task dependencies]Trouble between mvn and manttasks

    * [MANTTASKS-103] - Can't deploy to a file: repository

    * [MANTTASKS-104] - files returned in sourcesFileset when no dependencies sources available

    * [MANTTASKS-105] - dependencies task don't read remote repositories from settings xml

    * [MANTTASKS-107] - repository defined in pom not used to download parent pom when defining pom reference

    * [MANTTASKS-108] - Maven Ant Tasks are switching the Classloader of the Main Ant Thread

**Improvement

    * [MANTTASKS-88] - Add the ability to download javadoc dependencies


* 2.0.8 Release Notes

  The full list of changes can be found in our {{{http://jira.codehaus.org/secure/IssueNavigator.jspa?reset=true&pid=11533&fixfor=13618&sorter/field=issuekey&sorter/order=DESC}issue management system}}, and is reproduced below.

**Bug

    * [MANTTASKS-2] - artifact:dependencies related error: No files specified for filelist

    * [MANTTASKS-22] - artifact:dependencies does not respect in the generated classpath the order of the dependencies

    * [MANTTASKS-23] - antlib:deploy doesn't set correct snapshot version

    * [MANTTASKS-67] - artifact:deploy - The name of deploying element in snapshot repository is wrong

    * [MANTTASKS-77] - <offline> element of settings.xml ignored by artifact:dependencies.

    * [MANTTASKS-78] - unable to download a dependency when it is a SNAPSHOT and multiple remoteRepositories are used

    * [MANTTASKS-79] - add XML encoding support for pom.xml and settings.xml

    * [MANTTASKS-82] - Environment variables are not resolved in settings files

    * [MANTTASKS-84] - VersionMapper does not work on SNAPSHOT dependencies where uniqueVersion="true"

    * [MANTTASKS-85] - settings config ignored for remoteRepositories not defined in pom

    * [MANTTASKS-87] - Using a pom.xml for dependencies, in which the pom.xml has a parent pom.xml will cause a "Error downloading parent pom" error

    * [MANTTASKS-98] - NPE if user settings file doesn't exist

**Improvement

    * [MANTTASKS-33] - Pass Ant properties for resolved dependency JARs

    * [MANTTASKS-80] - weak/Inconsistent handling of settings

    * [MANTTASKS-97] - add support for <mirrorOf>*</mirrorOf>

    * [MANTTASKS-101] - get pom properties values like any other element


* 2.0.7 Release Notes

  <<Warning>>: there are 2 incompatible changes that you must know before upgrading, to fix your Ant build files:

    [[1]][MANTTASKS-44]: <<<\<localRepository path="..."/\>>>> instead of <<<\<localRepository location=""/\>>>> for Ant 1.7 compatibility
    (location attribute is used internally by Ant 1.7)

    [[2]][MANTTASKS-65]:  central repository is not automatically added any more if a remoteRepository is set: the code has been changed to work
    as expected and documented (explicit declaration)

  The full list of changes can be found in our {{{http://jira.codehaus.org/secure/IssueNavigator.jspa?reset=true&fixfor=13521&pid=11533&sorter/field=issuekey&sorter/order=DESC}issue management system}}, and is reproduced below.

**Bug

    * [MANTTASKS-1] - dependencies ant task incorrectly handles transitive snapshot dependencies

    * [MANTTASKS-6] - ant artifact doesn't read settings.xml

    * [MANTTASKS-11] - antlib + http based repository + version range errors badly

    * [MANTTASKS-12] - No means of preventing ant task from querying repo1.maven.org

    * [MANTTASKS-15] - scp:// urls not recognised, even when wagon-ssh is installed.

    * [MANTTASKS-18] - filesetId does not contain all dependencies when artifact was not yet locally installed

    * [MANTTASKS-26] - artifact:dependencies filesetId attribute causes NPE

    * [MANTTASKS-65] - [PATCH] add central repository only if no remoteRepository set

    * [MANTTASKS-70] - m2 tasks not reentrant

    * [MANTTASKS-75] - [PATCH] NPE if loaded settings.xml does not contain <localRepository>

**Improvement

    * [MANTTASKS-44] - bootstrap of components/trunk fails with ant-1.7.0RC1

    * [MANTTASKS-66] - [PATCH] add more information when Ant run in verbose mode (ant -v)

    * [MANTTASKS-69] - [PATCH] improve sample.build.xml

    * [MANTTASKS-72] - Remove hardcoded groupId in install-provider task

    * [MANTTASKS-76] - [PATCH] update Maven Ant Tasks to Maven core 2.0.7

**New Feature

    * [MANTTASKS-29] - more powerful filesetId

**Wish

    * [MANTTASKS-24] - Not enough diagnostics if failed to validate POM

    * [MANTTASKS-37] - The Dependencies task of Maven Antlib should override an existing path reference instead of failing

    * [MANTTASKS-73] - miss RemoteRepository sub-element for tasks pom and install-provider


* 2.0.6 Release Notes

  The full list of changes can be found in our {{{http://jira.codehaus.org/secure/IssueNavigator.jspa?reset=true&fixfor=13351&pid=11533&sorter/field=issuekey&sorter/order=DESC}issue management system}}, and is reproduced below.

**Bug

    * [MANTTASKS-7] - dependencies ant task does not handle scoped transitive dependencies correctly

    * [MANTTASKS-62] - Maven 2.0.5 needs Maven 2.0.5 Tasks for Ant and Maven 2.0.5 Embedder for everything to remain sane

**Improvement

    * [MANTTASKS-31] - [PATCH] Ant tasks should allow you to specify a custom location for settings.xml

**New Feature

    * [MANTTASKS-28] - [PATCH] add sourcesFilesetId attribute to dependencies task to download sources

    * [MANTTASKS-42] - Allow install and deploy tasks to include attached artifacts

**Task

    * [MANTTASKS-30] - rename maven-artifact-ant to maven-ant-tasks

**Wish

    * [MANTTASKS-45] - Document pomRefId attribute for M2 ant tasks on M2 website.
