You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@maven.apache.org by cs...@apache.org on 2021/04/29 13:24:20 UTC

[maven-artifact-transfer] branch MSHARED-987-providers created (now bf9aa04)

This is an automated email from the ASF dual-hosted git repository.

cstamas pushed a change to branch MSHARED-987-providers
in repository https://gitbox.apache.org/repos/asf/maven-artifact-transfer.git.


      at bf9aa04  UTs pass

This branch includes the following new commits:

     new 25248b2  Step 1
     new bf9aa04  UTs pass

The 2 revisions listed above as "new" are entirely new to this
repository and will be described in separate emails.  The revisions
listed as "add" were already present in the repository and have only
been added to this reference.


[maven-artifact-transfer] 01/02: Step 1

Posted by cs...@apache.org.
This is an automated email from the ASF dual-hosted git repository.

cstamas pushed a commit to branch MSHARED-987-providers
in repository https://gitbox.apache.org/repos/asf/maven-artifact-transfer.git

commit 25248b2b28b05111341b4f6c4438ac7d9880f1f8
Author: Tamas Cservenak <ta...@cservenak.net>
AuthorDate: Thu Apr 29 09:44:14 2021 +0200

    Step 1
---
 maven-3.0.x/pom.xml                                | 145 ++++++
 .../transfer/artifact/ArtifactCoordinate.java      | 118 ++---
 .../artifact/DefaultArtifactCoordinate.java        | 368 +++++++-------
 .../shared/transfer/artifact/TransferUtils.java    | 250 +++++-----
 .../transfer/artifact/deploy/ArtifactDeployer.java |   0
 .../artifact/deploy/ArtifactDeployerException.java |   0
 .../deploy/internal/DefaultArtifactDeployer.java   |   0
 .../transfer/artifact/deploy/internal/Invoker.java |   0
 .../deploy/internal/Maven30ArtifactDeployer.java   |   0
 .../deploy/internal/Maven31ArtifactDeployer.java   |   0
 .../deploy/internal/MavenArtifactDeployer.java     |   0
 .../artifact/install/ArtifactInstaller.java        |   0
 .../install/ArtifactInstallerException.java        |   0
 .../install/internal/DefaultArtifactInstaller.java |   0
 .../artifact/install/internal/Invoker.java         |   0
 .../install/internal/Maven30ArtifactInstaller.java |   0
 .../install/internal/Maven31ArtifactInstaller.java |   0
 .../install/internal/MavenArtifactInstaller.java   |   0
 .../artifact/resolve/ArtifactResolver.java         |   0
 .../resolve/ArtifactResolverException.java         |   0
 .../transfer/artifact/resolve/ArtifactResult.java  |  72 +--
 .../resolve/internal/DefaultArtifactResolver.java  |   0
 .../artifact/resolve/internal/Invoker.java         |   0
 .../resolve/internal/Maven30ArtifactResolver.java  |   0
 .../resolve/internal/Maven30ArtifactResult.java    | 114 ++---
 .../resolve/internal/Maven31ArtifactResolver.java  |   0
 .../resolve/internal/Maven31ArtifactResult.java    | 118 ++---
 .../resolve/internal/MavenArtifactResolver.java    |   0
 .../shared/transfer/collection/CollectRequest.java |   0
 .../shared/transfer/collection/CollectResult.java  |   0
 .../collection/DependencyCollectionException.java  |   0
 .../transfer/collection/DependencyCollector.java   |   0
 .../internal/DefaultDependencyCollector.java       |   0
 .../transfer/collection/internal/Invoker.java      |   0
 .../internal/Maven30ArtifactRepositoryAdapter.java |   0
 .../collection/internal/Maven30CollectResult.java  |   0
 .../internal/Maven30DependencyCollector.java       |   0
 .../internal/Maven30DependencyNodeAdapter.java     |   0
 .../internal/Maven31ArtifactRepositoryAdapter.java |   0
 .../collection/internal/Maven31CollectResult.java  |   0
 .../internal/Maven31DependencyCollector.java       |   0
 .../internal/Maven31DependencyNodeAdapter.java     |   0
 .../internal/MavenDependencyCollector.java         |   0
 .../dependencies/DefaultDependableCoordinate.java  | 366 +++++++-------
 .../dependencies/DependableCoordinate.java         | 140 +++---
 .../transfer/dependencies/TransferUtils.java       | 272 +++++------
 .../dependencies/collect/CollectorResult.java      |  74 +--
 .../dependencies/collect/DependencyCollector.java  | 146 +++---
 .../collect/DependencyCollectorException.java      |  86 ++--
 .../internal/DefaultDependencyCollector.java       | 396 +++++++--------
 .../dependencies/collect/internal/Invoker.java     | 186 +++----
 .../internal/Maven30ArtifactRepositoryAdapter.java | 532 ++++++++++-----------
 .../collect/internal/Maven30CollectorResult.java   | 170 +++----
 .../internal/Maven30DependencyCollector.java       | 320 ++++++-------
 .../internal/Maven30DependencyNodeAdapter.java     |   0
 .../internal/Maven31ArtifactRepositoryAdapter.java | 532 ++++++++++-----------
 .../collect/internal/Maven31CollectorResult.java   | 170 +++----
 .../internal/Maven31DependencyCollector.java       | 320 ++++++-------
 .../internal/Maven31DependencyNodeAdapter.java     |   0
 .../collect/internal/MavenDependencyCollector.java |   0
 .../dependencies/resolve/DependencyResolver.java   | 162 +++----
 .../resolve/DependencyResolverException.java       | 108 ++---
 .../dependencies/resolve/DependencyResult.java     |  74 +--
 .../internal/DefaultDependencyResolver.java        | 380 +++++++--------
 .../dependencies/resolve/internal/Invoker.java     | 190 ++++----
 .../resolve/internal/Maven30ArtifactResult.java    | 114 ++---
 .../internal/Maven30DependencyResolver.java        | 494 +++++++++----------
 .../Maven30DependencyResolverException.java        | 122 ++---
 .../resolve/internal/Maven31ArtifactResult.java    | 118 ++---
 .../internal/Maven31DependencyResolver.java        | 486 +++++++++----------
 .../Maven31DependencyResolverException.java        | 110 ++---
 .../resolve/internal/MavenDependencyResolver.java  |   0
 .../shared/transfer/graph/DependencyNode.java      |   0
 .../shared/transfer/graph/DependencyVisitor.java   |   0
 .../shared/transfer/metadata/ArtifactMetadata.java |   0
 .../metadata/internal/Maven30MetadataBridge.java   |   0
 .../metadata/internal/Maven31MetadataBridge.java   |   0
 .../shared/transfer/project/MavenAetherUtils.java  |   0
 .../transfer/project/NoFileAssignedException.java  |   0
 .../transfer/project/deploy/ProjectDeployer.java   |   0
 .../project/deploy/ProjectDeployerRequest.java     | 264 +++++-----
 .../deploy/internal/DefaultProjectDeployer.java    |   0
 .../transfer/project/install/ProjectInstaller.java |   0
 .../project/install/ProjectInstallerRequest.java   | 102 ++--
 .../install/internal/DefaultProjectInstaller.java  |   0
 .../transfer/repository/RepositoryManager.java     |   0
 .../repository/RepositoryManagerException.java     |   0
 .../internal/DefaultRepositoryManager.java         |   0
 .../transfer/repository/internal/Invoker.java      |   0
 .../internal/Maven302RepositoryManager.java        |   0
 .../internal/Maven30RepositoryManager.java         |   0
 .../internal/Maven31RepositoryManager.java         |   0
 .../internal/MavenRepositoryManager.java           |   0
 .../artifact/DefaultArtifactCoordinateTest.java    | 100 ++--
 .../internal/DefaultArtifactDeployerTest.java      |   0
 .../internal/DefaultArtifactInstallerTest.java     |   0
 .../internal/Maven30ArtifactInstallerTest.java     |   0
 .../internal/DefaultArtifactResolverTest.java      |   0
 .../internal/DefaultDependencyCollectorTest.java   |   0
 .../DefaultDependableCoordinateTest.java           | 104 ++--
 .../internal/DefaultDependencyCollectorTest.java   |   0
 .../internal/DefaultDependencyResolverTest.java    |   0
 .../internal/DefaultProjectDeployerTest.java       |   0
 .../internal/DefaultProjectInstallerTest.java      |   0
 .../internal/Maven30RepositoryManagerTest.java     |   0
 maven-3.1.x/pom.xml                                | 140 ++++++
 .../transfer/artifact/ArtifactCoordinate.java      | 118 ++---
 .../artifact/DefaultArtifactCoordinate.java        | 368 +++++++-------
 .../shared/transfer/artifact/TransferUtils.java    | 250 +++++-----
 .../transfer/artifact/deploy/ArtifactDeployer.java |   0
 .../artifact/deploy/ArtifactDeployerException.java |   0
 .../deploy/internal/DefaultArtifactDeployer.java   |   0
 .../transfer/artifact/deploy/internal/Invoker.java |   0
 .../deploy/internal/Maven30ArtifactDeployer.java   |   0
 .../deploy/internal/Maven31ArtifactDeployer.java   |   0
 .../deploy/internal/MavenArtifactDeployer.java     |   0
 .../artifact/install/ArtifactInstaller.java        |   0
 .../install/ArtifactInstallerException.java        |   0
 .../install/internal/DefaultArtifactInstaller.java |   0
 .../artifact/install/internal/Invoker.java         |   0
 .../install/internal/Maven30ArtifactInstaller.java |   0
 .../install/internal/Maven31ArtifactInstaller.java |   0
 .../install/internal/MavenArtifactInstaller.java   |   0
 .../artifact/resolve/ArtifactResolver.java         |   0
 .../resolve/ArtifactResolverException.java         |   0
 .../transfer/artifact/resolve/ArtifactResult.java  |  72 +--
 .../resolve/internal/DefaultArtifactResolver.java  |   0
 .../artifact/resolve/internal/Invoker.java         |   0
 .../resolve/internal/Maven30ArtifactResolver.java  |   0
 .../resolve/internal/Maven30ArtifactResult.java    | 114 ++---
 .../resolve/internal/Maven31ArtifactResolver.java  |   0
 .../resolve/internal/Maven31ArtifactResult.java    | 118 ++---
 .../resolve/internal/MavenArtifactResolver.java    |   0
 .../shared/transfer/collection/CollectRequest.java |   0
 .../shared/transfer/collection/CollectResult.java  |   0
 .../collection/DependencyCollectionException.java  |   0
 .../transfer/collection/DependencyCollector.java   |   0
 .../internal/DefaultDependencyCollector.java       |   0
 .../transfer/collection/internal/Invoker.java      |   0
 .../internal/Maven30ArtifactRepositoryAdapter.java |   0
 .../collection/internal/Maven30CollectResult.java  |   0
 .../internal/Maven30DependencyCollector.java       |   0
 .../internal/Maven30DependencyNodeAdapter.java     |   0
 .../internal/Maven31ArtifactRepositoryAdapter.java |   0
 .../collection/internal/Maven31CollectResult.java  |   0
 .../internal/Maven31DependencyCollector.java       |   0
 .../internal/Maven31DependencyNodeAdapter.java     |   0
 .../internal/MavenDependencyCollector.java         |   0
 .../dependencies/DefaultDependableCoordinate.java  | 366 +++++++-------
 .../dependencies/DependableCoordinate.java         | 140 +++---
 .../transfer/dependencies/TransferUtils.java       | 272 +++++------
 .../dependencies/collect/CollectorResult.java      |  74 +--
 .../dependencies/collect/DependencyCollector.java  | 146 +++---
 .../collect/DependencyCollectorException.java      |  86 ++--
 .../internal/DefaultDependencyCollector.java       | 396 +++++++--------
 .../dependencies/collect/internal/Invoker.java     | 186 +++----
 .../internal/Maven30ArtifactRepositoryAdapter.java | 532 ++++++++++-----------
 .../collect/internal/Maven30CollectorResult.java   | 170 +++----
 .../internal/Maven30DependencyCollector.java       | 320 ++++++-------
 .../internal/Maven30DependencyNodeAdapter.java     |   0
 .../internal/Maven31ArtifactRepositoryAdapter.java | 532 ++++++++++-----------
 .../collect/internal/Maven31CollectorResult.java   | 170 +++----
 .../internal/Maven31DependencyCollector.java       | 320 ++++++-------
 .../internal/Maven31DependencyNodeAdapter.java     |   0
 .../collect/internal/MavenDependencyCollector.java |   0
 .../dependencies/resolve/DependencyResolver.java   | 162 +++----
 .../resolve/DependencyResolverException.java       | 108 ++---
 .../dependencies/resolve/DependencyResult.java     |  74 +--
 .../internal/DefaultDependencyResolver.java        | 380 +++++++--------
 .../dependencies/resolve/internal/Invoker.java     | 190 ++++----
 .../resolve/internal/Maven30ArtifactResult.java    | 114 ++---
 .../internal/Maven30DependencyResolver.java        | 494 +++++++++----------
 .../Maven30DependencyResolverException.java        | 122 ++---
 .../resolve/internal/Maven31ArtifactResult.java    | 118 ++---
 .../internal/Maven31DependencyResolver.java        | 486 +++++++++----------
 .../Maven31DependencyResolverException.java        | 110 ++---
 .../resolve/internal/MavenDependencyResolver.java  |   0
 .../shared/transfer/graph/DependencyNode.java      |   0
 .../shared/transfer/graph/DependencyVisitor.java   |   0
 .../shared/transfer/metadata/ArtifactMetadata.java |   0
 .../metadata/internal/Maven30MetadataBridge.java   |   0
 .../metadata/internal/Maven31MetadataBridge.java   |   0
 .../shared/transfer/project/MavenAetherUtils.java  |   0
 .../transfer/project/NoFileAssignedException.java  |   0
 .../transfer/project/deploy/ProjectDeployer.java   |   0
 .../project/deploy/ProjectDeployerRequest.java     | 264 +++++-----
 .../deploy/internal/DefaultProjectDeployer.java    |   0
 .../transfer/project/install/ProjectInstaller.java |   0
 .../project/install/ProjectInstallerRequest.java   | 102 ++--
 .../install/internal/DefaultProjectInstaller.java  |   0
 .../transfer/repository/RepositoryManager.java     |   0
 .../repository/RepositoryManagerException.java     |   0
 .../internal/DefaultRepositoryManager.java         |   0
 .../transfer/repository/internal/Invoker.java      |   0
 .../internal/Maven302RepositoryManager.java        |   0
 .../internal/Maven30RepositoryManager.java         |   0
 .../internal/Maven31RepositoryManager.java         |   0
 .../internal/MavenRepositoryManager.java           |   0
 .../artifact/DefaultArtifactCoordinateTest.java    | 100 ++--
 .../internal/DefaultArtifactDeployerTest.java      |   0
 .../internal/DefaultArtifactInstallerTest.java     |   0
 .../internal/Maven30ArtifactInstallerTest.java     |   0
 .../internal/DefaultArtifactResolverTest.java      |   0
 .../internal/DefaultDependencyCollectorTest.java   |   0
 .../DefaultDependableCoordinateTest.java           | 104 ++--
 .../internal/DefaultDependencyCollectorTest.java   |   0
 .../internal/DefaultDependencyResolverTest.java    |   0
 .../internal/DefaultProjectDeployerTest.java       |   0
 .../internal/DefaultProjectInstallerTest.java      |   0
 .../internal/Maven30RepositoryManagerTest.java     |   0
 maven-artifact-transfer-api/pom.xml                |  50 ++
 .../transfer/artifact/ArtifactCoordinate.java      | 118 ++---
 .../artifact/DefaultArtifactCoordinate.java        | 368 +++++++-------
 .../shared/transfer/artifact/TransferUtils.java    | 250 +++++-----
 .../transfer/artifact/deploy/ArtifactDeployer.java |   0
 .../artifact/deploy/ArtifactDeployerException.java |   0
 .../deploy/internal/DefaultArtifactDeployer.java   |   0
 .../transfer/artifact/deploy/internal/Invoker.java |   0
 .../deploy/internal/Maven30ArtifactDeployer.java   |   0
 .../deploy/internal/Maven31ArtifactDeployer.java   |   0
 .../deploy/internal/MavenArtifactDeployer.java     |   0
 .../artifact/install/ArtifactInstaller.java        |   0
 .../install/ArtifactInstallerException.java        |   0
 .../install/internal/DefaultArtifactInstaller.java |   0
 .../artifact/install/internal/Invoker.java         |   0
 .../install/internal/Maven30ArtifactInstaller.java |   0
 .../install/internal/Maven31ArtifactInstaller.java |   0
 .../install/internal/MavenArtifactInstaller.java   |   0
 .../artifact/resolve/ArtifactResolver.java         |   0
 .../resolve/ArtifactResolverException.java         |   0
 .../transfer/artifact/resolve/ArtifactResult.java  |  72 +--
 .../resolve/internal/DefaultArtifactResolver.java  |   0
 .../artifact/resolve/internal/Invoker.java         |   0
 .../resolve/internal/Maven30ArtifactResolver.java  |   0
 .../resolve/internal/Maven30ArtifactResult.java    | 114 ++---
 .../resolve/internal/Maven31ArtifactResolver.java  |   0
 .../resolve/internal/Maven31ArtifactResult.java    | 118 ++---
 .../resolve/internal/MavenArtifactResolver.java    |   0
 .../shared/transfer/collection/CollectRequest.java |   0
 .../shared/transfer/collection/CollectResult.java  |   0
 .../collection/DependencyCollectionException.java  |   0
 .../transfer/collection/DependencyCollector.java   |   0
 .../internal/DefaultDependencyCollector.java       |   0
 .../transfer/collection/internal/Invoker.java      |   0
 .../internal/Maven30ArtifactRepositoryAdapter.java |   0
 .../collection/internal/Maven30CollectResult.java  |   0
 .../internal/Maven30DependencyCollector.java       |   0
 .../internal/Maven30DependencyNodeAdapter.java     |   0
 .../internal/Maven31ArtifactRepositoryAdapter.java |   0
 .../collection/internal/Maven31CollectResult.java  |   0
 .../internal/Maven31DependencyCollector.java       |   0
 .../internal/Maven31DependencyNodeAdapter.java     |   0
 .../internal/MavenDependencyCollector.java         |   0
 .../dependencies/DefaultDependableCoordinate.java  | 366 +++++++-------
 .../dependencies/DependableCoordinate.java         | 140 +++---
 .../transfer/dependencies/TransferUtils.java       | 272 +++++------
 .../dependencies/collect/CollectorResult.java      |  74 +--
 .../dependencies/collect/DependencyCollector.java  | 146 +++---
 .../collect/DependencyCollectorException.java      |  86 ++--
 .../internal/DefaultDependencyCollector.java       | 396 +++++++--------
 .../dependencies/collect/internal/Invoker.java     | 186 +++----
 .../internal/Maven30ArtifactRepositoryAdapter.java | 532 ++++++++++-----------
 .../collect/internal/Maven30CollectorResult.java   | 170 +++----
 .../internal/Maven30DependencyCollector.java       | 320 ++++++-------
 .../internal/Maven30DependencyNodeAdapter.java     |   0
 .../internal/Maven31ArtifactRepositoryAdapter.java | 532 ++++++++++-----------
 .../collect/internal/Maven31CollectorResult.java   | 170 +++----
 .../internal/Maven31DependencyCollector.java       | 320 ++++++-------
 .../internal/Maven31DependencyNodeAdapter.java     |   0
 .../collect/internal/MavenDependencyCollector.java |   0
 .../dependencies/resolve/DependencyResolver.java   | 162 +++----
 .../resolve/DependencyResolverException.java       | 108 ++---
 .../dependencies/resolve/DependencyResult.java     |  74 +--
 .../internal/DefaultDependencyResolver.java        | 380 +++++++--------
 .../dependencies/resolve/internal/Invoker.java     | 190 ++++----
 .../resolve/internal/Maven30ArtifactResult.java    | 114 ++---
 .../internal/Maven30DependencyResolver.java        | 494 +++++++++----------
 .../Maven30DependencyResolverException.java        | 122 ++---
 .../resolve/internal/Maven31ArtifactResult.java    | 118 ++---
 .../internal/Maven31DependencyResolver.java        | 486 +++++++++----------
 .../Maven31DependencyResolverException.java        | 110 ++---
 .../resolve/internal/MavenDependencyResolver.java  |   0
 .../shared/transfer/graph/DependencyNode.java      |   0
 .../shared/transfer/graph/DependencyVisitor.java   |   0
 .../shared/transfer/metadata/ArtifactMetadata.java |   0
 .../metadata/internal/Maven30MetadataBridge.java   |   0
 .../metadata/internal/Maven31MetadataBridge.java   |   0
 .../shared/transfer/project/MavenAetherUtils.java  |   0
 .../transfer/project/NoFileAssignedException.java  |   0
 .../transfer/project/deploy/ProjectDeployer.java   |   0
 .../project/deploy/ProjectDeployerRequest.java     | 264 +++++-----
 .../deploy/internal/DefaultProjectDeployer.java    |   0
 .../transfer/project/install/ProjectInstaller.java |   0
 .../project/install/ProjectInstallerRequest.java   | 102 ++--
 .../install/internal/DefaultProjectInstaller.java  |   0
 .../transfer/repository/RepositoryManager.java     |   0
 .../repository/RepositoryManagerException.java     |   0
 .../internal/DefaultRepositoryManager.java         |   0
 .../transfer/repository/internal/Invoker.java      |   0
 .../internal/Maven302RepositoryManager.java        |   0
 .../internal/Maven30RepositoryManager.java         |   0
 .../internal/Maven31RepositoryManager.java         |   0
 .../internal/MavenRepositoryManager.java           |   0
 maven-artifact-transfer/pom.xml                    | 147 ++++++
 .../src}/it/maven-artifact-deployer-plugin/pom.xml |   0
 .../artifact/deployer/ArtifactDeployerMojo.java    |   0
 .../artifact/deployer/ArtifactDeployerTest.java    |   0
 .../src/test/projects/example/pom.xml              |   0
 .../it/maven-artifact-installer-plugin/pom.xml     |   0
 .../artifact/installer/ArtifactInstallerMojo.java  |   0
 .../artifact/installer/ArtifactInstallerTest.java  |   0
 .../src/test/projects/example/pom.xml              |   0
 .../it/maven-dependency-collector-plugin/pom.xml   |   0
 .../collector/DependencyCollectorMojo.java         |   0
 .../collector/DependencyCollectorTest.java         |   0
 .../src/test/projects/example/pom.xml              |   0
 .../src}/it/maven-project-deployer-plugin/pom.xml  |   0
 .../plugin/project/deploy/ProjectDeployerMojo.java |   0
 .../plugin/project/deploy/ProjectDeployerTest.java |   0
 .../src/test/projects/example/pom.xml              |   0
 .../src}/it/maven-project-installer-plugin/pom.xml |   0
 .../project/install/ProjectInstallerMojo.java      |   0
 .../project/install/ProjectInstallerTest.java      |   0
 .../src/test/projects/example/pom.xml              |   0
 .../src/test/projects/pom-only-example/pom.xml     |   0
 .../src}/it/settings.xml                           |   0
 .../transfer/artifact/ArtifactCoordinate.java      | 118 ++---
 .../artifact/DefaultArtifactCoordinate.java        | 368 +++++++-------
 .../shared/transfer/artifact/TransferUtils.java    | 250 +++++-----
 .../transfer/artifact/deploy/ArtifactDeployer.java |   0
 .../artifact/deploy/ArtifactDeployerException.java |   0
 .../deploy/internal/DefaultArtifactDeployer.java   |   0
 .../transfer/artifact/deploy/internal/Invoker.java |   0
 .../deploy/internal/Maven30ArtifactDeployer.java   |   0
 .../deploy/internal/Maven31ArtifactDeployer.java   |   0
 .../deploy/internal/MavenArtifactDeployer.java     |   0
 .../artifact/install/ArtifactInstaller.java        |   0
 .../install/ArtifactInstallerException.java        |   0
 .../install/internal/DefaultArtifactInstaller.java |   0
 .../artifact/install/internal/Invoker.java         |   0
 .../install/internal/Maven30ArtifactInstaller.java |   0
 .../install/internal/Maven31ArtifactInstaller.java |   0
 .../install/internal/MavenArtifactInstaller.java   |   0
 .../artifact/resolve/ArtifactResolver.java         |   0
 .../resolve/ArtifactResolverException.java         |   0
 .../transfer/artifact/resolve/ArtifactResult.java  |  72 +--
 .../resolve/internal/DefaultArtifactResolver.java  |   0
 .../artifact/resolve/internal/Invoker.java         |   0
 .../resolve/internal/Maven30ArtifactResolver.java  |   0
 .../resolve/internal/Maven30ArtifactResult.java    | 114 ++---
 .../resolve/internal/Maven31ArtifactResolver.java  |   0
 .../resolve/internal/Maven31ArtifactResult.java    | 118 ++---
 .../resolve/internal/MavenArtifactResolver.java    |   0
 .../shared/transfer/collection/CollectRequest.java |   0
 .../shared/transfer/collection/CollectResult.java  |   0
 .../collection/DependencyCollectionException.java  |   0
 .../transfer/collection/DependencyCollector.java   |   0
 .../internal/DefaultDependencyCollector.java       |   0
 .../transfer/collection/internal/Invoker.java      |   0
 .../internal/Maven30ArtifactRepositoryAdapter.java |   0
 .../collection/internal/Maven30CollectResult.java  |   0
 .../internal/Maven30DependencyCollector.java       |   0
 .../internal/Maven30DependencyNodeAdapter.java     |   0
 .../internal/Maven31ArtifactRepositoryAdapter.java |   0
 .../collection/internal/Maven31CollectResult.java  |   0
 .../internal/Maven31DependencyCollector.java       |   0
 .../internal/Maven31DependencyNodeAdapter.java     |   0
 .../internal/MavenDependencyCollector.java         |   0
 .../dependencies/DefaultDependableCoordinate.java  | 366 +++++++-------
 .../dependencies/DependableCoordinate.java         | 140 +++---
 .../transfer/dependencies/TransferUtils.java       | 272 +++++------
 .../dependencies/collect/CollectorResult.java      |  74 +--
 .../dependencies/collect/DependencyCollector.java  | 146 +++---
 .../collect/DependencyCollectorException.java      |  86 ++--
 .../internal/DefaultDependencyCollector.java       | 396 +++++++--------
 .../dependencies/collect/internal/Invoker.java     | 186 +++----
 .../internal/Maven30ArtifactRepositoryAdapter.java | 532 ++++++++++-----------
 .../collect/internal/Maven30CollectorResult.java   | 170 +++----
 .../internal/Maven30DependencyCollector.java       | 320 ++++++-------
 .../internal/Maven30DependencyNodeAdapter.java     |   0
 .../internal/Maven31ArtifactRepositoryAdapter.java | 532 ++++++++++-----------
 .../collect/internal/Maven31CollectorResult.java   | 170 +++----
 .../internal/Maven31DependencyCollector.java       | 320 ++++++-------
 .../internal/Maven31DependencyNodeAdapter.java     |   0
 .../collect/internal/MavenDependencyCollector.java |   0
 .../dependencies/resolve/DependencyResolver.java   | 162 +++----
 .../resolve/DependencyResolverException.java       | 108 ++---
 .../dependencies/resolve/DependencyResult.java     |  74 +--
 .../internal/DefaultDependencyResolver.java        | 380 +++++++--------
 .../dependencies/resolve/internal/Invoker.java     | 190 ++++----
 .../resolve/internal/Maven30ArtifactResult.java    | 114 ++---
 .../internal/Maven30DependencyResolver.java        | 494 +++++++++----------
 .../Maven30DependencyResolverException.java        | 122 ++---
 .../resolve/internal/Maven31ArtifactResult.java    | 118 ++---
 .../internal/Maven31DependencyResolver.java        | 486 +++++++++----------
 .../Maven31DependencyResolverException.java        | 110 ++---
 .../resolve/internal/MavenDependencyResolver.java  |   0
 .../shared/transfer/graph/DependencyNode.java      |   0
 .../shared/transfer/graph/DependencyVisitor.java   |   0
 .../shared/transfer/metadata/ArtifactMetadata.java |   0
 .../metadata/internal/Maven30MetadataBridge.java   |   0
 .../metadata/internal/Maven31MetadataBridge.java   |   0
 .../shared/transfer/project/MavenAetherUtils.java  |   0
 .../transfer/project/NoFileAssignedException.java  |   0
 .../transfer/project/deploy/ProjectDeployer.java   |   0
 .../project/deploy/ProjectDeployerRequest.java     | 264 +++++-----
 .../deploy/internal/DefaultProjectDeployer.java    |   0
 .../transfer/project/install/ProjectInstaller.java |   0
 .../project/install/ProjectInstallerRequest.java   | 102 ++--
 .../install/internal/DefaultProjectInstaller.java  |   0
 .../transfer/repository/RepositoryManager.java     |   0
 .../repository/RepositoryManagerException.java     |   0
 .../internal/DefaultRepositoryManager.java         |   0
 .../transfer/repository/internal/Invoker.java      |   0
 .../internal/Maven302RepositoryManager.java        |   0
 .../internal/Maven30RepositoryManager.java         |   0
 .../internal/Maven31RepositoryManager.java         |   0
 .../internal/MavenRepositoryManager.java           |   0
 .../artifact/DefaultArtifactCoordinateTest.java    | 100 ++--
 .../internal/DefaultArtifactDeployerTest.java      |   0
 .../internal/DefaultArtifactInstallerTest.java     |   0
 .../internal/Maven30ArtifactInstallerTest.java     |   0
 .../internal/DefaultArtifactResolverTest.java      |   0
 .../internal/DefaultDependencyCollectorTest.java   |   0
 .../DefaultDependableCoordinateTest.java           | 104 ++--
 .../internal/DefaultDependencyCollectorTest.java   |   0
 .../internal/DefaultDependencyResolverTest.java    |   0
 .../internal/DefaultProjectDeployerTest.java       |   0
 .../internal/DefaultProjectInstallerTest.java      |   0
 .../internal/Maven30RepositoryManagerTest.java     |   0
 pom.xml                                            | 407 ++++++----------
 431 files changed, 15885 insertions(+), 15512 deletions(-)

diff --git a/maven-3.0.x/pom.xml b/maven-3.0.x/pom.xml
new file mode 100644
index 0000000..ee140b8
--- /dev/null
+++ b/maven-3.0.x/pom.xml
@@ -0,0 +1,145 @@
+<?xml version='1.0' encoding='UTF-8'?>
+<!--
+  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.
+-->
+<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
+  <modelVersion>4.0.0</modelVersion>
+
+  <parent>
+    <groupId>org.apache.maven.shared</groupId>
+    <artifactId>maven-artifact-transfer-parent</artifactId>
+    <version>2.0.0-SNAPSHOT</version>
+  </parent>
+
+  <artifactId>maven-artifact-transfer-maven-3.0.x</artifactId>
+
+  <name>Apache Maven Artifact Transfer Maven 3.0.x provider</name>
+
+  <dependencies>
+    <dependency>
+      <groupId>org.apache.maven</groupId>
+      <artifactId>maven-plugin-api</artifactId>
+      <version>3.0</version>
+    </dependency>
+    <dependency>
+      <groupId>org.apache.maven</groupId>
+      <artifactId>maven-core</artifactId>
+      <version>3.0</version>
+    </dependency>
+    <dependency>
+      <groupId>org.apache.maven</groupId>
+      <artifactId>maven-artifact</artifactId>
+      <version>3.0</version>
+    </dependency>
+
+    <dependency>
+      <groupId>org.codehaus.plexus</groupId>
+      <artifactId>plexus-component-annotations</artifactId>
+    </dependency>
+
+    <dependency>
+      <groupId>org.apache.maven.shared</groupId>
+      <artifactId>maven-common-artifact-filters</artifactId>
+      <version>3.1.0</version>
+    </dependency>
+    <dependency>
+      <groupId>org.codehaus.plexus</groupId>
+      <artifactId>plexus-utils</artifactId>
+      <version>3.3.0</version>
+    </dependency>
+
+    <!-- Maven 3.0.x -->
+    <dependency>
+      <groupId>org.sonatype.aether</groupId>
+      <artifactId>aether-api</artifactId>
+      <version>1.7</version>
+      <scope>provided</scope>
+    </dependency>
+    <dependency>
+      <groupId>org.sonatype.aether</groupId>
+      <artifactId>aether-util</artifactId>
+      <version>1.7</version>
+      <scope>provided</scope>
+    </dependency>
+    <dependency>
+      <groupId>org.sonatype.aether</groupId>
+      <artifactId>aether-impl</artifactId>
+      <version>1.7</version>
+      <scope>test</scope>
+    </dependency>
+
+    <!-- Maven 3.1.x and above -->
+    <dependency>
+      <groupId>org.eclipse.aether</groupId>
+      <artifactId>aether-api</artifactId>
+      <version>0.9.0.M2</version>
+      <scope>provided</scope>
+    </dependency>
+    <dependency>
+      <groupId>org.eclipse.aether</groupId>
+      <artifactId>aether-util</artifactId>
+      <version>0.9.0.M2</version>
+      <!-- provided scoped dependencies aren't shaded -->
+    </dependency>
+    <dependency>
+      <groupId>org.eclipse.aether</groupId>
+      <artifactId>aether-impl</artifactId>
+      <version>0.9.0.M2</version>
+      <scope>provided</scope>
+    </dependency>
+
+    <dependency>
+      <groupId>org.slf4j</groupId>
+      <artifactId>slf4j-api</artifactId>
+      <version>1.7.5</version>
+    </dependency>
+
+    <!-- TEST -->
+    <dependency>
+      <groupId>junit</groupId>
+      <artifactId>junit</artifactId>
+      <version>4.13.1</version>
+      <scope>test</scope>
+    </dependency>
+
+    <dependency>
+      <groupId>org.mockito</groupId>
+      <artifactId>mockito-core</artifactId>
+      <version>2.28.2</version>
+      <scope>test</scope>
+    </dependency>
+  </dependencies>
+
+  <build>
+    <plugins>
+      <plugin>
+        <groupId>org.eclipse.sisu</groupId>
+        <artifactId>sisu-maven-plugin</artifactId>
+      </plugin>
+      <plugin>
+        <groupId>org.apache.rat</groupId>
+        <artifactId>apache-rat-plugin</artifactId>
+      </plugin>
+      <plugin>
+        <groupId>org.codehaus.mojo</groupId>
+        <artifactId>animal-sniffer-maven-plugin</artifactId>
+      </plugin>
+    </plugins>
+  </build>
+
+</project>
diff --git a/src/main/java/org/apache/maven/shared/transfer/artifact/ArtifactCoordinate.java b/maven-3.0.x/src/main/java/org/apache/maven/shared/transfer/artifact/ArtifactCoordinate.java
similarity index 96%
copy from src/main/java/org/apache/maven/shared/transfer/artifact/ArtifactCoordinate.java
copy to maven-3.0.x/src/main/java/org/apache/maven/shared/transfer/artifact/ArtifactCoordinate.java
index eed2eca..7b0654b 100644
--- a/src/main/java/org/apache/maven/shared/transfer/artifact/ArtifactCoordinate.java
+++ b/maven-3.0.x/src/main/java/org/apache/maven/shared/transfer/artifact/ArtifactCoordinate.java
@@ -1,60 +1,60 @@
-package org.apache.maven.shared.transfer.artifact;
-
-/*
- * 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.
- */
-
-/**
- * <p>
- * Contains all required elements of a Maven Artifact to resolve and calculate its path for either a local or
- * remote Maven2 repository.
- * </p>
- * 
- * @author Robert Scholte
- */
-public interface ArtifactCoordinate
-{
-    /**
-     * @return The groupId of the artifact.
-     */
-    String getGroupId();
-
-    /**
-     * @return The artifactId of the artifact.
-     */
-    String getArtifactId();
-
-    /**
-     * A version, never a versionRange
-     * 
-     * @return The version.
-     */
-    String getVersion();
-
-    /**
-     * The file-extension of the artifact.
-     * 
-     * @return The extension.
-     */
-    String getExtension();
-
-    /**
-     * @return The classifier of the artifact.
-     */
-    String getClassifier();
+package org.apache.maven.shared.transfer.artifact;
+
+/*
+ * 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.
+ */
+
+/**
+ * <p>
+ * Contains all required elements of a Maven Artifact to resolve and calculate its path for either a local or
+ * remote Maven2 repository.
+ * </p>
+ * 
+ * @author Robert Scholte
+ */
+public interface ArtifactCoordinate
+{
+    /**
+     * @return The groupId of the artifact.
+     */
+    String getGroupId();
+
+    /**
+     * @return The artifactId of the artifact.
+     */
+    String getArtifactId();
+
+    /**
+     * A version, never a versionRange
+     * 
+     * @return The version.
+     */
+    String getVersion();
+
+    /**
+     * The file-extension of the artifact.
+     * 
+     * @return The extension.
+     */
+    String getExtension();
+
+    /**
+     * @return The classifier of the artifact.
+     */
+    String getClassifier();
 }
\ No newline at end of file
diff --git a/src/main/java/org/apache/maven/shared/transfer/artifact/DefaultArtifactCoordinate.java b/maven-3.0.x/src/main/java/org/apache/maven/shared/transfer/artifact/DefaultArtifactCoordinate.java
similarity index 95%
copy from src/main/java/org/apache/maven/shared/transfer/artifact/DefaultArtifactCoordinate.java
copy to maven-3.0.x/src/main/java/org/apache/maven/shared/transfer/artifact/DefaultArtifactCoordinate.java
index 070607d..9b86ee2 100644
--- a/src/main/java/org/apache/maven/shared/transfer/artifact/DefaultArtifactCoordinate.java
+++ b/maven-3.0.x/src/main/java/org/apache/maven/shared/transfer/artifact/DefaultArtifactCoordinate.java
@@ -1,184 +1,184 @@
-package org.apache.maven.shared.transfer.artifact;
-
-/*
- * 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.
- */
-
-/**
- * Common usage of an ArtifactCoordinate for a Mojo
- * 
- * <pre>
- * &#64;Parameter
- * private DefaultArtifactCoordinate[] artifacts;
- * </pre>
- * 
- * and
- * 
- * <pre>
- * private DefaultArtifactCoordinate artifact = new DefaultArtifactCoordinate();
- * 
- * &#64;Parameter( property = "groupId" )
- * private String groupId;
- * 
- * &#64;Parameter( property = "artifactId" )
- * private String artifactId;
- * 
- * &#64;Parameter( property = "version" )
- * private String version;
- * 
- * &#64;Parameter( property = "classifier" )
- * private String classifier;
- * 
- * &#64;Parameter( property = "type" )
- * private String type;
- * 
- * public void setGroupId( String groupId )
- * {
- *     this.artifact.setGroupId( groupId );
- * }
- * 
- * public void setArtifactId( String artifactId )
- * {
- *     this.artifact.setArtifactId( artifactId );
- * }
- * 
- * public void setVersion( String version )
- * {
- *     this.artifact.setVersion( version );
- * }
- * 
- * public void setClassifier( String classifier )
- * {
- *     this.artifact.setClassifier( classifier );
- * }
- * 
- * public void setType( String type )
- * {
- *     this.artifact.setType( type );
- * }
- * </pre>
- * 
- * <strong>Note: </strong> type is not the same as extension! {@link org.apache.maven.artifact.handler.ArtifactHandler}s
- * are used to map a type to an extension.
- * 
- * @author Robert Scholte
- * @since 3.0
- */
-public class DefaultArtifactCoordinate
-    implements ArtifactCoordinate
-{
-    private String groupId;
-
-    private String artifactId;
-
-    private String version;
-
-    private String extension;
-
-    private String classifier;
-
-    @Override
-    public final String getGroupId()
-    {
-        return groupId;
-    }
-
-    /**
-     * @param groupId The groupId to be used.
-     */
-    public final void setGroupId( String groupId )
-    {
-        this.groupId = groupId;
-    }
-
-    @Override
-    public final String getArtifactId()
-    {
-        return artifactId;
-    }
-
-    /**
-     * @param artifactId The artifactId to be used.
-     */
-    public final void setArtifactId( String artifactId )
-    {
-        this.artifactId = artifactId;
-    }
-
-    @Override
-    public final String getVersion()
-    {
-        return version;
-    }
-
-    /**
-     * @param version The version to be used.
-     */
-    public final void setVersion( String version )
-    {
-        this.version = version;
-    }
-
-    @Override
-    public final String getExtension()
-    {
-        return extension != null ? extension : "jar";
-    }
-
-    /**
-     * @param extension The extension to be used.
-     */
-    public final void setExtension( String extension )
-    {
-        this.extension = extension;
-    }
-
-    @Override
-    public final String getClassifier()
-    {
-        return classifier;
-    }
-
-    /**
-     * @param classifier The classifier to be used.
-     */
-    public final void setClassifier( String classifier )
-    {
-        this.classifier = classifier;
-    }
-
-    /**
-     * @see org.apache.maven.artifact.DefaultArtifact#toString()
-     */
-    @Override
-    public String toString()
-    {
-        StringBuilder sb = new StringBuilder().append( groupId ).append( ':' )
-                        .append( artifactId ).append( ':' ).append( getExtension() );
-
-        if ( classifier != null )
-        {
-            sb.append( ':' ).append( classifier );
-        }
-
-        sb.append( ':' ).append( version );
-
-        return sb.toString();
-    }
-
-}
+package org.apache.maven.shared.transfer.artifact;
+
+/*
+ * 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.
+ */
+
+/**
+ * Common usage of an ArtifactCoordinate for a Mojo
+ * 
+ * <pre>
+ * &#64;Parameter
+ * private DefaultArtifactCoordinate[] artifacts;
+ * </pre>
+ * 
+ * and
+ * 
+ * <pre>
+ * private DefaultArtifactCoordinate artifact = new DefaultArtifactCoordinate();
+ * 
+ * &#64;Parameter( property = "groupId" )
+ * private String groupId;
+ * 
+ * &#64;Parameter( property = "artifactId" )
+ * private String artifactId;
+ * 
+ * &#64;Parameter( property = "version" )
+ * private String version;
+ * 
+ * &#64;Parameter( property = "classifier" )
+ * private String classifier;
+ * 
+ * &#64;Parameter( property = "type" )
+ * private String type;
+ * 
+ * public void setGroupId( String groupId )
+ * {
+ *     this.artifact.setGroupId( groupId );
+ * }
+ * 
+ * public void setArtifactId( String artifactId )
+ * {
+ *     this.artifact.setArtifactId( artifactId );
+ * }
+ * 
+ * public void setVersion( String version )
+ * {
+ *     this.artifact.setVersion( version );
+ * }
+ * 
+ * public void setClassifier( String classifier )
+ * {
+ *     this.artifact.setClassifier( classifier );
+ * }
+ * 
+ * public void setType( String type )
+ * {
+ *     this.artifact.setType( type );
+ * }
+ * </pre>
+ * 
+ * <strong>Note: </strong> type is not the same as extension! {@link org.apache.maven.artifact.handler.ArtifactHandler}s
+ * are used to map a type to an extension.
+ * 
+ * @author Robert Scholte
+ * @since 3.0
+ */
+public class DefaultArtifactCoordinate
+    implements ArtifactCoordinate
+{
+    private String groupId;
+
+    private String artifactId;
+
+    private String version;
+
+    private String extension;
+
+    private String classifier;
+
+    @Override
+    public final String getGroupId()
+    {
+        return groupId;
+    }
+
+    /**
+     * @param groupId The groupId to be used.
+     */
+    public final void setGroupId( String groupId )
+    {
+        this.groupId = groupId;
+    }
+
+    @Override
+    public final String getArtifactId()
+    {
+        return artifactId;
+    }
+
+    /**
+     * @param artifactId The artifactId to be used.
+     */
+    public final void setArtifactId( String artifactId )
+    {
+        this.artifactId = artifactId;
+    }
+
+    @Override
+    public final String getVersion()
+    {
+        return version;
+    }
+
+    /**
+     * @param version The version to be used.
+     */
+    public final void setVersion( String version )
+    {
+        this.version = version;
+    }
+
+    @Override
+    public final String getExtension()
+    {
+        return extension != null ? extension : "jar";
+    }
+
+    /**
+     * @param extension The extension to be used.
+     */
+    public final void setExtension( String extension )
+    {
+        this.extension = extension;
+    }
+
+    @Override
+    public final String getClassifier()
+    {
+        return classifier;
+    }
+
+    /**
+     * @param classifier The classifier to be used.
+     */
+    public final void setClassifier( String classifier )
+    {
+        this.classifier = classifier;
+    }
+
+    /**
+     * @see org.apache.maven.artifact.DefaultArtifact#toString()
+     */
+    @Override
+    public String toString()
+    {
+        StringBuilder sb = new StringBuilder().append( groupId ).append( ':' )
+                        .append( artifactId ).append( ':' ).append( getExtension() );
+
+        if ( classifier != null )
+        {
+            sb.append( ':' ).append( classifier );
+        }
+
+        sb.append( ':' ).append( version );
+
+        return sb.toString();
+    }
+
+}
diff --git a/src/main/java/org/apache/maven/shared/transfer/artifact/TransferUtils.java b/maven-3.0.x/src/main/java/org/apache/maven/shared/transfer/artifact/TransferUtils.java
similarity index 97%
copy from src/main/java/org/apache/maven/shared/transfer/artifact/TransferUtils.java
copy to maven-3.0.x/src/main/java/org/apache/maven/shared/transfer/artifact/TransferUtils.java
index 83fa7e1..d4506c3 100644
--- a/src/main/java/org/apache/maven/shared/transfer/artifact/TransferUtils.java
+++ b/maven-3.0.x/src/main/java/org/apache/maven/shared/transfer/artifact/TransferUtils.java
@@ -1,125 +1,125 @@
-package org.apache.maven.shared.transfer.artifact;
-
-/*
- * 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.
- */
-
-import org.apache.maven.artifact.Artifact;
-import org.apache.maven.model.Extension;
-import org.apache.maven.model.Parent;
-import org.apache.maven.model.Plugin;
-import org.apache.maven.model.ReportPlugin;
-
-/**
- * Utility class
- * 
- * @author Robert Scholte
- */
-public final class TransferUtils
-{
-    private TransferUtils()
-    {
-    }
-
-    /**
-     * @param artifact {@link Artifact}
-     * @return {@link ArtifactCoordinate}
-     */
-    public static ArtifactCoordinate toArtifactCoordinate( Artifact artifact )
-    {
-        DefaultArtifactCoordinate coordinate = new DefaultArtifactCoordinate();
-
-        coordinate.setGroupId( artifact.getGroupId() );
-        coordinate.setArtifactId( artifact.getArtifactId() );
-        coordinate.setVersion( artifact.getVersion() );
-        coordinate.setExtension( artifact.getArtifactHandler().getExtension() );
-        coordinate.setClassifier( artifact.getClassifier() );
-
-        return coordinate;
-    }
-
-    /**
-     * Special case: an extension is always of type {@code jar}, so can be transformed to an ArtifactCoordinate.
-     * 
-     * @param extension {@link Extension}
-     * @return {@link ArtifactCoordinate}
-     */
-    public static ArtifactCoordinate toArtifactCoordinate( Extension extension )
-    {
-        DefaultArtifactCoordinate coordinate = new DefaultArtifactCoordinate();
-
-        coordinate.setGroupId( extension.getGroupId() );
-        coordinate.setArtifactId( extension.getArtifactId() );
-        coordinate.setVersion( extension.getVersion() );
-
-        return coordinate;
-    }
-
-    /**
-     * Special case: a parent is always of type {@code pom}, so can be transformed to an ArtifactCoordinate.
-     * 
-     * @param parent {@link Parent}
-     * @return {@link ArtifactCoordinate}
-     */
-    public static ArtifactCoordinate toArtifactCoordinate( Parent parent )
-    {
-        DefaultArtifactCoordinate coordinate = new DefaultArtifactCoordinate();
-
-        coordinate.setGroupId( parent.getGroupId() );
-        coordinate.setArtifactId( parent.getArtifactId() );
-        coordinate.setVersion( parent.getVersion() );
-        coordinate.setExtension( "pom" );
-
-        return coordinate;
-    }
-
-    /**
-     * Special case: a plugin is always of type {@code jar}, so can be transformed to an ArtifactCoordinate.
-     * 
-     * @param plugin {@link Plugin}
-     * @return {@link ArtifactCoordinate}
-     */
-    public static ArtifactCoordinate toArtifactCoordinate( Plugin plugin )
-    {
-        DefaultArtifactCoordinate coordinate = new DefaultArtifactCoordinate();
-
-        coordinate.setGroupId( plugin.getGroupId() );
-        coordinate.setArtifactId( plugin.getArtifactId() );
-        coordinate.setVersion( plugin.getVersion() );
-
-        return coordinate;
-    }
-    
-    /**
-     * Special case: a reportPlugin is always of type {@code jar}, so can be transformed to an ArtifactCoordinate.
-     * 
-     * @param plugin {@link ReportPlugin}
-     * @return {@link ArtifactCoordinate}
-     */
-    public static ArtifactCoordinate toArtifactCoordinate( ReportPlugin plugin )
-    {
-        DefaultArtifactCoordinate coordinate = new DefaultArtifactCoordinate();
-
-        coordinate.setGroupId( plugin.getGroupId() );
-        coordinate.setArtifactId( plugin.getArtifactId() );
-        coordinate.setVersion( plugin.getVersion() );
-
-        return coordinate;
-    }
-
-}
+package org.apache.maven.shared.transfer.artifact;
+
+/*
+ * 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.
+ */
+
+import org.apache.maven.artifact.Artifact;
+import org.apache.maven.model.Extension;
+import org.apache.maven.model.Parent;
+import org.apache.maven.model.Plugin;
+import org.apache.maven.model.ReportPlugin;
+
+/**
+ * Utility class
+ * 
+ * @author Robert Scholte
+ */
+public final class TransferUtils
+{
+    private TransferUtils()
+    {
+    }
+
+    /**
+     * @param artifact {@link Artifact}
+     * @return {@link ArtifactCoordinate}
+     */
+    public static ArtifactCoordinate toArtifactCoordinate( Artifact artifact )
+    {
+        DefaultArtifactCoordinate coordinate = new DefaultArtifactCoordinate();
+
+        coordinate.setGroupId( artifact.getGroupId() );
+        coordinate.setArtifactId( artifact.getArtifactId() );
+        coordinate.setVersion( artifact.getVersion() );
+        coordinate.setExtension( artifact.getArtifactHandler().getExtension() );
+        coordinate.setClassifier( artifact.getClassifier() );
+
+        return coordinate;
+    }
+
+    /**
+     * Special case: an extension is always of type {@code jar}, so can be transformed to an ArtifactCoordinate.
+     * 
+     * @param extension {@link Extension}
+     * @return {@link ArtifactCoordinate}
+     */
+    public static ArtifactCoordinate toArtifactCoordinate( Extension extension )
+    {
+        DefaultArtifactCoordinate coordinate = new DefaultArtifactCoordinate();
+
+        coordinate.setGroupId( extension.getGroupId() );
+        coordinate.setArtifactId( extension.getArtifactId() );
+        coordinate.setVersion( extension.getVersion() );
+
+        return coordinate;
+    }
+
+    /**
+     * Special case: a parent is always of type {@code pom}, so can be transformed to an ArtifactCoordinate.
+     * 
+     * @param parent {@link Parent}
+     * @return {@link ArtifactCoordinate}
+     */
+    public static ArtifactCoordinate toArtifactCoordinate( Parent parent )
+    {
+        DefaultArtifactCoordinate coordinate = new DefaultArtifactCoordinate();
+
+        coordinate.setGroupId( parent.getGroupId() );
+        coordinate.setArtifactId( parent.getArtifactId() );
+        coordinate.setVersion( parent.getVersion() );
+        coordinate.setExtension( "pom" );
+
+        return coordinate;
+    }
+
+    /**
+     * Special case: a plugin is always of type {@code jar}, so can be transformed to an ArtifactCoordinate.
+     * 
+     * @param plugin {@link Plugin}
+     * @return {@link ArtifactCoordinate}
+     */
+    public static ArtifactCoordinate toArtifactCoordinate( Plugin plugin )
+    {
+        DefaultArtifactCoordinate coordinate = new DefaultArtifactCoordinate();
+
+        coordinate.setGroupId( plugin.getGroupId() );
+        coordinate.setArtifactId( plugin.getArtifactId() );
+        coordinate.setVersion( plugin.getVersion() );
+
+        return coordinate;
+    }
+    
+    /**
+     * Special case: a reportPlugin is always of type {@code jar}, so can be transformed to an ArtifactCoordinate.
+     * 
+     * @param plugin {@link ReportPlugin}
+     * @return {@link ArtifactCoordinate}
+     */
+    public static ArtifactCoordinate toArtifactCoordinate( ReportPlugin plugin )
+    {
+        DefaultArtifactCoordinate coordinate = new DefaultArtifactCoordinate();
+
+        coordinate.setGroupId( plugin.getGroupId() );
+        coordinate.setArtifactId( plugin.getArtifactId() );
+        coordinate.setVersion( plugin.getVersion() );
+
+        return coordinate;
+    }
+
+}
diff --git a/src/main/java/org/apache/maven/shared/transfer/artifact/deploy/ArtifactDeployer.java b/maven-3.0.x/src/main/java/org/apache/maven/shared/transfer/artifact/deploy/ArtifactDeployer.java
similarity index 100%
copy from src/main/java/org/apache/maven/shared/transfer/artifact/deploy/ArtifactDeployer.java
copy to maven-3.0.x/src/main/java/org/apache/maven/shared/transfer/artifact/deploy/ArtifactDeployer.java
diff --git a/src/main/java/org/apache/maven/shared/transfer/artifact/deploy/ArtifactDeployerException.java b/maven-3.0.x/src/main/java/org/apache/maven/shared/transfer/artifact/deploy/ArtifactDeployerException.java
similarity index 100%
copy from src/main/java/org/apache/maven/shared/transfer/artifact/deploy/ArtifactDeployerException.java
copy to maven-3.0.x/src/main/java/org/apache/maven/shared/transfer/artifact/deploy/ArtifactDeployerException.java
diff --git a/src/main/java/org/apache/maven/shared/transfer/artifact/deploy/internal/DefaultArtifactDeployer.java b/maven-3.0.x/src/main/java/org/apache/maven/shared/transfer/artifact/deploy/internal/DefaultArtifactDeployer.java
similarity index 100%
copy from src/main/java/org/apache/maven/shared/transfer/artifact/deploy/internal/DefaultArtifactDeployer.java
copy to maven-3.0.x/src/main/java/org/apache/maven/shared/transfer/artifact/deploy/internal/DefaultArtifactDeployer.java
diff --git a/src/main/java/org/apache/maven/shared/transfer/artifact/deploy/internal/Invoker.java b/maven-3.0.x/src/main/java/org/apache/maven/shared/transfer/artifact/deploy/internal/Invoker.java
similarity index 100%
copy from src/main/java/org/apache/maven/shared/transfer/artifact/deploy/internal/Invoker.java
copy to maven-3.0.x/src/main/java/org/apache/maven/shared/transfer/artifact/deploy/internal/Invoker.java
diff --git a/src/main/java/org/apache/maven/shared/transfer/artifact/deploy/internal/Maven30ArtifactDeployer.java b/maven-3.0.x/src/main/java/org/apache/maven/shared/transfer/artifact/deploy/internal/Maven30ArtifactDeployer.java
similarity index 100%
copy from src/main/java/org/apache/maven/shared/transfer/artifact/deploy/internal/Maven30ArtifactDeployer.java
copy to maven-3.0.x/src/main/java/org/apache/maven/shared/transfer/artifact/deploy/internal/Maven30ArtifactDeployer.java
diff --git a/src/main/java/org/apache/maven/shared/transfer/artifact/deploy/internal/Maven31ArtifactDeployer.java b/maven-3.0.x/src/main/java/org/apache/maven/shared/transfer/artifact/deploy/internal/Maven31ArtifactDeployer.java
similarity index 100%
copy from src/main/java/org/apache/maven/shared/transfer/artifact/deploy/internal/Maven31ArtifactDeployer.java
copy to maven-3.0.x/src/main/java/org/apache/maven/shared/transfer/artifact/deploy/internal/Maven31ArtifactDeployer.java
diff --git a/src/main/java/org/apache/maven/shared/transfer/artifact/deploy/internal/MavenArtifactDeployer.java b/maven-3.0.x/src/main/java/org/apache/maven/shared/transfer/artifact/deploy/internal/MavenArtifactDeployer.java
similarity index 100%
copy from src/main/java/org/apache/maven/shared/transfer/artifact/deploy/internal/MavenArtifactDeployer.java
copy to maven-3.0.x/src/main/java/org/apache/maven/shared/transfer/artifact/deploy/internal/MavenArtifactDeployer.java
diff --git a/src/main/java/org/apache/maven/shared/transfer/artifact/install/ArtifactInstaller.java b/maven-3.0.x/src/main/java/org/apache/maven/shared/transfer/artifact/install/ArtifactInstaller.java
similarity index 100%
copy from src/main/java/org/apache/maven/shared/transfer/artifact/install/ArtifactInstaller.java
copy to maven-3.0.x/src/main/java/org/apache/maven/shared/transfer/artifact/install/ArtifactInstaller.java
diff --git a/src/main/java/org/apache/maven/shared/transfer/artifact/install/ArtifactInstallerException.java b/maven-3.0.x/src/main/java/org/apache/maven/shared/transfer/artifact/install/ArtifactInstallerException.java
similarity index 100%
copy from src/main/java/org/apache/maven/shared/transfer/artifact/install/ArtifactInstallerException.java
copy to maven-3.0.x/src/main/java/org/apache/maven/shared/transfer/artifact/install/ArtifactInstallerException.java
diff --git a/src/main/java/org/apache/maven/shared/transfer/artifact/install/internal/DefaultArtifactInstaller.java b/maven-3.0.x/src/main/java/org/apache/maven/shared/transfer/artifact/install/internal/DefaultArtifactInstaller.java
similarity index 100%
copy from src/main/java/org/apache/maven/shared/transfer/artifact/install/internal/DefaultArtifactInstaller.java
copy to maven-3.0.x/src/main/java/org/apache/maven/shared/transfer/artifact/install/internal/DefaultArtifactInstaller.java
diff --git a/src/main/java/org/apache/maven/shared/transfer/artifact/install/internal/Invoker.java b/maven-3.0.x/src/main/java/org/apache/maven/shared/transfer/artifact/install/internal/Invoker.java
similarity index 100%
copy from src/main/java/org/apache/maven/shared/transfer/artifact/install/internal/Invoker.java
copy to maven-3.0.x/src/main/java/org/apache/maven/shared/transfer/artifact/install/internal/Invoker.java
diff --git a/src/main/java/org/apache/maven/shared/transfer/artifact/install/internal/Maven30ArtifactInstaller.java b/maven-3.0.x/src/main/java/org/apache/maven/shared/transfer/artifact/install/internal/Maven30ArtifactInstaller.java
similarity index 100%
copy from src/main/java/org/apache/maven/shared/transfer/artifact/install/internal/Maven30ArtifactInstaller.java
copy to maven-3.0.x/src/main/java/org/apache/maven/shared/transfer/artifact/install/internal/Maven30ArtifactInstaller.java
diff --git a/src/main/java/org/apache/maven/shared/transfer/artifact/install/internal/Maven31ArtifactInstaller.java b/maven-3.0.x/src/main/java/org/apache/maven/shared/transfer/artifact/install/internal/Maven31ArtifactInstaller.java
similarity index 100%
copy from src/main/java/org/apache/maven/shared/transfer/artifact/install/internal/Maven31ArtifactInstaller.java
copy to maven-3.0.x/src/main/java/org/apache/maven/shared/transfer/artifact/install/internal/Maven31ArtifactInstaller.java
diff --git a/src/main/java/org/apache/maven/shared/transfer/artifact/install/internal/MavenArtifactInstaller.java b/maven-3.0.x/src/main/java/org/apache/maven/shared/transfer/artifact/install/internal/MavenArtifactInstaller.java
similarity index 100%
copy from src/main/java/org/apache/maven/shared/transfer/artifact/install/internal/MavenArtifactInstaller.java
copy to maven-3.0.x/src/main/java/org/apache/maven/shared/transfer/artifact/install/internal/MavenArtifactInstaller.java
diff --git a/src/main/java/org/apache/maven/shared/transfer/artifact/resolve/ArtifactResolver.java b/maven-3.0.x/src/main/java/org/apache/maven/shared/transfer/artifact/resolve/ArtifactResolver.java
similarity index 100%
copy from src/main/java/org/apache/maven/shared/transfer/artifact/resolve/ArtifactResolver.java
copy to maven-3.0.x/src/main/java/org/apache/maven/shared/transfer/artifact/resolve/ArtifactResolver.java
diff --git a/src/main/java/org/apache/maven/shared/transfer/artifact/resolve/ArtifactResolverException.java b/maven-3.0.x/src/main/java/org/apache/maven/shared/transfer/artifact/resolve/ArtifactResolverException.java
similarity index 100%
copy from src/main/java/org/apache/maven/shared/transfer/artifact/resolve/ArtifactResolverException.java
copy to maven-3.0.x/src/main/java/org/apache/maven/shared/transfer/artifact/resolve/ArtifactResolverException.java
diff --git a/src/main/java/org/apache/maven/shared/transfer/artifact/resolve/ArtifactResult.java b/maven-3.0.x/src/main/java/org/apache/maven/shared/transfer/artifact/resolve/ArtifactResult.java
similarity index 96%
copy from src/main/java/org/apache/maven/shared/transfer/artifact/resolve/ArtifactResult.java
copy to maven-3.0.x/src/main/java/org/apache/maven/shared/transfer/artifact/resolve/ArtifactResult.java
index bc89ff0..6941975 100644
--- a/src/main/java/org/apache/maven/shared/transfer/artifact/resolve/ArtifactResult.java
+++ b/maven-3.0.x/src/main/java/org/apache/maven/shared/transfer/artifact/resolve/ArtifactResult.java
@@ -1,36 +1,36 @@
-package org.apache.maven.shared.transfer.artifact.resolve;
-
-/*
- * 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.
- */
-
-import org.apache.maven.artifact.Artifact;
-
-/**
- * The Artifact Result
- * 
- * @author Robert Scholte
- * @since 3.0
- */
-public interface ArtifactResult
-{
-    /**
-     * @return {@link Artifact}
-     */
-    Artifact getArtifact();
-}
+package org.apache.maven.shared.transfer.artifact.resolve;
+
+/*
+ * 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.
+ */
+
+import org.apache.maven.artifact.Artifact;
+
+/**
+ * The Artifact Result
+ * 
+ * @author Robert Scholte
+ * @since 3.0
+ */
+public interface ArtifactResult
+{
+    /**
+     * @return {@link Artifact}
+     */
+    Artifact getArtifact();
+}
diff --git a/src/main/java/org/apache/maven/shared/transfer/artifact/resolve/internal/DefaultArtifactResolver.java b/maven-3.0.x/src/main/java/org/apache/maven/shared/transfer/artifact/resolve/internal/DefaultArtifactResolver.java
similarity index 100%
copy from src/main/java/org/apache/maven/shared/transfer/artifact/resolve/internal/DefaultArtifactResolver.java
copy to maven-3.0.x/src/main/java/org/apache/maven/shared/transfer/artifact/resolve/internal/DefaultArtifactResolver.java
diff --git a/src/main/java/org/apache/maven/shared/transfer/artifact/resolve/internal/Invoker.java b/maven-3.0.x/src/main/java/org/apache/maven/shared/transfer/artifact/resolve/internal/Invoker.java
similarity index 100%
copy from src/main/java/org/apache/maven/shared/transfer/artifact/resolve/internal/Invoker.java
copy to maven-3.0.x/src/main/java/org/apache/maven/shared/transfer/artifact/resolve/internal/Invoker.java
diff --git a/src/main/java/org/apache/maven/shared/transfer/artifact/resolve/internal/Maven30ArtifactResolver.java b/maven-3.0.x/src/main/java/org/apache/maven/shared/transfer/artifact/resolve/internal/Maven30ArtifactResolver.java
similarity index 100%
copy from src/main/java/org/apache/maven/shared/transfer/artifact/resolve/internal/Maven30ArtifactResolver.java
copy to maven-3.0.x/src/main/java/org/apache/maven/shared/transfer/artifact/resolve/internal/Maven30ArtifactResolver.java
diff --git a/src/main/java/org/apache/maven/shared/transfer/artifact/resolve/internal/Maven30ArtifactResult.java b/maven-3.0.x/src/main/java/org/apache/maven/shared/transfer/artifact/resolve/internal/Maven30ArtifactResult.java
similarity index 97%
copy from src/main/java/org/apache/maven/shared/transfer/artifact/resolve/internal/Maven30ArtifactResult.java
copy to maven-3.0.x/src/main/java/org/apache/maven/shared/transfer/artifact/resolve/internal/Maven30ArtifactResult.java
index 3bbea28..e65c00b 100644
--- a/src/main/java/org/apache/maven/shared/transfer/artifact/resolve/internal/Maven30ArtifactResult.java
+++ b/maven-3.0.x/src/main/java/org/apache/maven/shared/transfer/artifact/resolve/internal/Maven30ArtifactResult.java
@@ -1,57 +1,57 @@
-package org.apache.maven.shared.transfer.artifact.resolve.internal;
-
-/*
- * 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.
- */
-
-import org.apache.maven.RepositoryUtils;
-import org.apache.maven.shared.transfer.artifact.resolve.ArtifactResolverException;
-import org.sonatype.aether.artifact.Artifact;
-import org.sonatype.aether.resolution.ArtifactResult;
-
-/**
- * {@link org.apache.maven.shared.transfer.artifact.resolve.ArtifactResult} wrapper for {@link ArtifactResult}
- *
- * @author Robert Scholte
- * @since 3.0
- */
-class Maven30ArtifactResult implements org.apache.maven.shared.transfer.artifact.resolve.ArtifactResult
-{
-    private final ArtifactResult artifactResult;
-
-    /**
-     * @param artifactResult {@link ArtifactResult}
-     */
-    Maven30ArtifactResult( ArtifactResult artifactResult )
-    {
-        this.artifactResult = artifactResult;
-    }
-
-    @Override
-    public org.apache.maven.artifact.Artifact getArtifact()
-    {
-        try
-        {
-            return Invoker.invoke( RepositoryUtils.class, "toArtifact", Artifact.class, artifactResult.getArtifact() );
-        }
-        catch ( ArtifactResolverException e )
-        {
-            throw new RuntimeException( e );
-        }
-    }
-}
+package org.apache.maven.shared.transfer.artifact.resolve.internal;
+
+/*
+ * 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.
+ */
+
+import org.apache.maven.RepositoryUtils;
+import org.apache.maven.shared.transfer.artifact.resolve.ArtifactResolverException;
+import org.sonatype.aether.artifact.Artifact;
+import org.sonatype.aether.resolution.ArtifactResult;
+
+/**
+ * {@link org.apache.maven.shared.transfer.artifact.resolve.ArtifactResult} wrapper for {@link ArtifactResult}
+ *
+ * @author Robert Scholte
+ * @since 3.0
+ */
+class Maven30ArtifactResult implements org.apache.maven.shared.transfer.artifact.resolve.ArtifactResult
+{
+    private final ArtifactResult artifactResult;
+
+    /**
+     * @param artifactResult {@link ArtifactResult}
+     */
+    Maven30ArtifactResult( ArtifactResult artifactResult )
+    {
+        this.artifactResult = artifactResult;
+    }
+
+    @Override
+    public org.apache.maven.artifact.Artifact getArtifact()
+    {
+        try
+        {
+            return Invoker.invoke( RepositoryUtils.class, "toArtifact", Artifact.class, artifactResult.getArtifact() );
+        }
+        catch ( ArtifactResolverException e )
+        {
+            throw new RuntimeException( e );
+        }
+    }
+}
diff --git a/src/main/java/org/apache/maven/shared/transfer/artifact/resolve/internal/Maven31ArtifactResolver.java b/maven-3.0.x/src/main/java/org/apache/maven/shared/transfer/artifact/resolve/internal/Maven31ArtifactResolver.java
similarity index 100%
copy from src/main/java/org/apache/maven/shared/transfer/artifact/resolve/internal/Maven31ArtifactResolver.java
copy to maven-3.0.x/src/main/java/org/apache/maven/shared/transfer/artifact/resolve/internal/Maven31ArtifactResolver.java
diff --git a/src/main/java/org/apache/maven/shared/transfer/artifact/resolve/internal/Maven31ArtifactResult.java b/maven-3.0.x/src/main/java/org/apache/maven/shared/transfer/artifact/resolve/internal/Maven31ArtifactResult.java
similarity index 97%
copy from src/main/java/org/apache/maven/shared/transfer/artifact/resolve/internal/Maven31ArtifactResult.java
copy to maven-3.0.x/src/main/java/org/apache/maven/shared/transfer/artifact/resolve/internal/Maven31ArtifactResult.java
index 7b56826..56fbc0b 100644
--- a/src/main/java/org/apache/maven/shared/transfer/artifact/resolve/internal/Maven31ArtifactResult.java
+++ b/maven-3.0.x/src/main/java/org/apache/maven/shared/transfer/artifact/resolve/internal/Maven31ArtifactResult.java
@@ -1,59 +1,59 @@
-package org.apache.maven.shared.transfer.artifact.resolve.internal;
-
-/*
- * 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.
- */
-
-import org.apache.maven.RepositoryUtils;
-import org.apache.maven.shared.transfer.artifact.resolve.ArtifactResolverException;
-import org.eclipse.aether.resolution.ArtifactResult;
-import org.eclipse.aether.artifact.Artifact;
-
-/**
- * {@link org.apache.maven.shared.transfer.artifact.resolve.ArtifactResult} wrapper for {@link ArtifactResult}
- * 
- * @author Robert Scholte
- * @since 3.0
- */
-class Maven31ArtifactResult
-    implements org.apache.maven.shared.transfer.artifact.resolve.ArtifactResult
-{
-    private final ArtifactResult artifactResult;
-
-    /**
-     * @param artifactResult {@link ArtifactResult}
-     */
-    Maven31ArtifactResult( ArtifactResult artifactResult )
-    {
-        this.artifactResult = artifactResult;
-    }
-
-    @Override
-    public org.apache.maven.artifact.Artifact getArtifact()
-    {
-        try
-        {
-            return Invoker.invoke( RepositoryUtils.class, "toArtifact",
-                                                                        Artifact.class, artifactResult.getArtifact() );
-        }
-        catch ( ArtifactResolverException e )
-        {
-            throw new RuntimeException( e );
-        }
-    }
-}
+package org.apache.maven.shared.transfer.artifact.resolve.internal;
+
+/*
+ * 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.
+ */
+
+import org.apache.maven.RepositoryUtils;
+import org.apache.maven.shared.transfer.artifact.resolve.ArtifactResolverException;
+import org.eclipse.aether.resolution.ArtifactResult;
+import org.eclipse.aether.artifact.Artifact;
+
+/**
+ * {@link org.apache.maven.shared.transfer.artifact.resolve.ArtifactResult} wrapper for {@link ArtifactResult}
+ * 
+ * @author Robert Scholte
+ * @since 3.0
+ */
+class Maven31ArtifactResult
+    implements org.apache.maven.shared.transfer.artifact.resolve.ArtifactResult
+{
+    private final ArtifactResult artifactResult;
+
+    /**
+     * @param artifactResult {@link ArtifactResult}
+     */
+    Maven31ArtifactResult( ArtifactResult artifactResult )
+    {
+        this.artifactResult = artifactResult;
+    }
+
+    @Override
+    public org.apache.maven.artifact.Artifact getArtifact()
+    {
+        try
+        {
+            return Invoker.invoke( RepositoryUtils.class, "toArtifact",
+                                                                        Artifact.class, artifactResult.getArtifact() );
+        }
+        catch ( ArtifactResolverException e )
+        {
+            throw new RuntimeException( e );
+        }
+    }
+}
diff --git a/src/main/java/org/apache/maven/shared/transfer/artifact/resolve/internal/MavenArtifactResolver.java b/maven-3.0.x/src/main/java/org/apache/maven/shared/transfer/artifact/resolve/internal/MavenArtifactResolver.java
similarity index 100%
copy from src/main/java/org/apache/maven/shared/transfer/artifact/resolve/internal/MavenArtifactResolver.java
copy to maven-3.0.x/src/main/java/org/apache/maven/shared/transfer/artifact/resolve/internal/MavenArtifactResolver.java
diff --git a/src/main/java/org/apache/maven/shared/transfer/collection/CollectRequest.java b/maven-3.0.x/src/main/java/org/apache/maven/shared/transfer/collection/CollectRequest.java
similarity index 100%
copy from src/main/java/org/apache/maven/shared/transfer/collection/CollectRequest.java
copy to maven-3.0.x/src/main/java/org/apache/maven/shared/transfer/collection/CollectRequest.java
diff --git a/src/main/java/org/apache/maven/shared/transfer/collection/CollectResult.java b/maven-3.0.x/src/main/java/org/apache/maven/shared/transfer/collection/CollectResult.java
similarity index 100%
copy from src/main/java/org/apache/maven/shared/transfer/collection/CollectResult.java
copy to maven-3.0.x/src/main/java/org/apache/maven/shared/transfer/collection/CollectResult.java
diff --git a/src/main/java/org/apache/maven/shared/transfer/collection/DependencyCollectionException.java b/maven-3.0.x/src/main/java/org/apache/maven/shared/transfer/collection/DependencyCollectionException.java
similarity index 100%
copy from src/main/java/org/apache/maven/shared/transfer/collection/DependencyCollectionException.java
copy to maven-3.0.x/src/main/java/org/apache/maven/shared/transfer/collection/DependencyCollectionException.java
diff --git a/src/main/java/org/apache/maven/shared/transfer/collection/DependencyCollector.java b/maven-3.0.x/src/main/java/org/apache/maven/shared/transfer/collection/DependencyCollector.java
similarity index 100%
copy from src/main/java/org/apache/maven/shared/transfer/collection/DependencyCollector.java
copy to maven-3.0.x/src/main/java/org/apache/maven/shared/transfer/collection/DependencyCollector.java
diff --git a/src/main/java/org/apache/maven/shared/transfer/collection/internal/DefaultDependencyCollector.java b/maven-3.0.x/src/main/java/org/apache/maven/shared/transfer/collection/internal/DefaultDependencyCollector.java
similarity index 100%
copy from src/main/java/org/apache/maven/shared/transfer/collection/internal/DefaultDependencyCollector.java
copy to maven-3.0.x/src/main/java/org/apache/maven/shared/transfer/collection/internal/DefaultDependencyCollector.java
diff --git a/src/main/java/org/apache/maven/shared/transfer/collection/internal/Invoker.java b/maven-3.0.x/src/main/java/org/apache/maven/shared/transfer/collection/internal/Invoker.java
similarity index 100%
copy from src/main/java/org/apache/maven/shared/transfer/collection/internal/Invoker.java
copy to maven-3.0.x/src/main/java/org/apache/maven/shared/transfer/collection/internal/Invoker.java
diff --git a/src/main/java/org/apache/maven/shared/transfer/collection/internal/Maven30ArtifactRepositoryAdapter.java b/maven-3.0.x/src/main/java/org/apache/maven/shared/transfer/collection/internal/Maven30ArtifactRepositoryAdapter.java
similarity index 100%
copy from src/main/java/org/apache/maven/shared/transfer/collection/internal/Maven30ArtifactRepositoryAdapter.java
copy to maven-3.0.x/src/main/java/org/apache/maven/shared/transfer/collection/internal/Maven30ArtifactRepositoryAdapter.java
diff --git a/src/main/java/org/apache/maven/shared/transfer/collection/internal/Maven30CollectResult.java b/maven-3.0.x/src/main/java/org/apache/maven/shared/transfer/collection/internal/Maven30CollectResult.java
similarity index 100%
copy from src/main/java/org/apache/maven/shared/transfer/collection/internal/Maven30CollectResult.java
copy to maven-3.0.x/src/main/java/org/apache/maven/shared/transfer/collection/internal/Maven30CollectResult.java
diff --git a/src/main/java/org/apache/maven/shared/transfer/collection/internal/Maven30DependencyCollector.java b/maven-3.0.x/src/main/java/org/apache/maven/shared/transfer/collection/internal/Maven30DependencyCollector.java
similarity index 100%
copy from src/main/java/org/apache/maven/shared/transfer/collection/internal/Maven30DependencyCollector.java
copy to maven-3.0.x/src/main/java/org/apache/maven/shared/transfer/collection/internal/Maven30DependencyCollector.java
diff --git a/src/main/java/org/apache/maven/shared/transfer/collection/internal/Maven30DependencyNodeAdapter.java b/maven-3.0.x/src/main/java/org/apache/maven/shared/transfer/collection/internal/Maven30DependencyNodeAdapter.java
similarity index 100%
copy from src/main/java/org/apache/maven/shared/transfer/collection/internal/Maven30DependencyNodeAdapter.java
copy to maven-3.0.x/src/main/java/org/apache/maven/shared/transfer/collection/internal/Maven30DependencyNodeAdapter.java
diff --git a/src/main/java/org/apache/maven/shared/transfer/collection/internal/Maven31ArtifactRepositoryAdapter.java b/maven-3.0.x/src/main/java/org/apache/maven/shared/transfer/collection/internal/Maven31ArtifactRepositoryAdapter.java
similarity index 100%
copy from src/main/java/org/apache/maven/shared/transfer/collection/internal/Maven31ArtifactRepositoryAdapter.java
copy to maven-3.0.x/src/main/java/org/apache/maven/shared/transfer/collection/internal/Maven31ArtifactRepositoryAdapter.java
diff --git a/src/main/java/org/apache/maven/shared/transfer/collection/internal/Maven31CollectResult.java b/maven-3.0.x/src/main/java/org/apache/maven/shared/transfer/collection/internal/Maven31CollectResult.java
similarity index 100%
copy from src/main/java/org/apache/maven/shared/transfer/collection/internal/Maven31CollectResult.java
copy to maven-3.0.x/src/main/java/org/apache/maven/shared/transfer/collection/internal/Maven31CollectResult.java
diff --git a/src/main/java/org/apache/maven/shared/transfer/collection/internal/Maven31DependencyCollector.java b/maven-3.0.x/src/main/java/org/apache/maven/shared/transfer/collection/internal/Maven31DependencyCollector.java
similarity index 100%
copy from src/main/java/org/apache/maven/shared/transfer/collection/internal/Maven31DependencyCollector.java
copy to maven-3.0.x/src/main/java/org/apache/maven/shared/transfer/collection/internal/Maven31DependencyCollector.java
diff --git a/src/main/java/org/apache/maven/shared/transfer/collection/internal/Maven31DependencyNodeAdapter.java b/maven-3.0.x/src/main/java/org/apache/maven/shared/transfer/collection/internal/Maven31DependencyNodeAdapter.java
similarity index 100%
copy from src/main/java/org/apache/maven/shared/transfer/collection/internal/Maven31DependencyNodeAdapter.java
copy to maven-3.0.x/src/main/java/org/apache/maven/shared/transfer/collection/internal/Maven31DependencyNodeAdapter.java
diff --git a/src/main/java/org/apache/maven/shared/transfer/collection/internal/MavenDependencyCollector.java b/maven-3.0.x/src/main/java/org/apache/maven/shared/transfer/collection/internal/MavenDependencyCollector.java
similarity index 100%
copy from src/main/java/org/apache/maven/shared/transfer/collection/internal/MavenDependencyCollector.java
copy to maven-3.0.x/src/main/java/org/apache/maven/shared/transfer/collection/internal/MavenDependencyCollector.java
diff --git a/src/main/java/org/apache/maven/shared/transfer/dependencies/DefaultDependableCoordinate.java b/maven-3.0.x/src/main/java/org/apache/maven/shared/transfer/dependencies/DefaultDependableCoordinate.java
similarity index 95%
copy from src/main/java/org/apache/maven/shared/transfer/dependencies/DefaultDependableCoordinate.java
copy to maven-3.0.x/src/main/java/org/apache/maven/shared/transfer/dependencies/DefaultDependableCoordinate.java
index 1619586..dcd78b5 100644
--- a/src/main/java/org/apache/maven/shared/transfer/dependencies/DefaultDependableCoordinate.java
+++ b/maven-3.0.x/src/main/java/org/apache/maven/shared/transfer/dependencies/DefaultDependableCoordinate.java
@@ -1,183 +1,183 @@
-package org.apache.maven.shared.transfer.dependencies;
-
-/*
- * 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.
- */
-
-/**
- * Common usage of an DependableCoordinate for a Mojo
- * 
- * <pre>
- * &#64;Parameter
- * private DefaultDependableCoordinate[] dependencies;
- * </pre>
- * 
- * and
- * 
- * <pre>
- * private DefaultDependableCoordinate dependable = new DefaultDependableCoordinate();
- * 
- * &#64;Parameter( property = "groupId" )
- * private String groupId;
- * 
- * &#64;Parameter( property = "artifactId" )
- * private String artifactId;
- * 
- * &#64;Parameter( property = "version" )
- * private String version;
- * 
- * &#64;Parameter( property = "classifier" )
- * private String classifier;
- * 
- * &#64;Parameter( property = "type" )
- * private String type;
- * 
- * public void setGroupId( String groupId )
- * {
- *   this.dependable.setGroupId( groupId );
- * }
- * 
- * public void setArtifactId( String artifactId )
- * {
- *   this.dependable.setArtifactId( artifactId );
- * }
- * 
- * public void setVersion( String version )
- * {
- *   this.dependable.setVersion( version );
- * }
- * 
- * public void setClassifier( String classifier )
- * {
- *   this.dependable.setClassifier( classifier );
- * }
- * 
- * public void setType( String type )
- * {
- *   this.dependable.setType( type );
- * }
- * </pre>
- * <strong>Note: </strong> type is not the same as extension! 
- * {@link org.apache.maven.artifact.handler.ArtifactHandler}s are used to map a type to an extension.  
- * 
- * 
- * @author Robert Scholte
- * @since 3.0
- */
-public class DefaultDependableCoordinate implements DependableCoordinate
-{
-    private String groupId;
-    
-    private String artifactId;
-    
-    private String version;
-    
-    private String type;
-    
-    private String classifier;
-    
-    @Override
-    public final String getGroupId()
-    {
-        return groupId;
-    }
-
-    /**
-     * @param groupId The groupId to be set.
-     */
-    public final void setGroupId( String groupId )
-    {
-        this.groupId = groupId;
-    }
-
-    @Override
-    public final String getArtifactId()
-    {
-        return artifactId;
-    }
-
-    /**
-     * @param artifactId The artifactId to be set.
-     */
-    public final void setArtifactId( String artifactId )
-    {
-        this.artifactId = artifactId;
-    }
-
-    @Override
-    public final String getVersion()
-    {
-        return version;
-    }
-
-    /**
-     * @param version The version to be set.
-     */
-    public final void setVersion( String version )
-    {
-        this.version = version;
-    }
-
-    @Override
-    public final String getType()
-    {
-        return type != null ? type : "jar";
-    }
-
-    /**
-     * @param type The type to be set.
-     */
-    public void setType( String type )
-    {
-        this.type = type;
-    }
-    
-    @Override
-    public final String getClassifier()
-    {
-        return classifier;
-    }
-
-    /**
-     * @param classifier The classifier to be set.
-     */
-    public final void setClassifier( String classifier )
-    {
-        this.classifier = classifier;
-    }
-    
-    /**
-     * @see org.apache.maven.artifact.DefaultArtifact#toString()
-     */
-    @Override
-    public String toString()
-    {
-        StringBuilder sb =
-            new StringBuilder().append( groupId ).append( ':' ).append( artifactId ).append( ':' ).append( getType() );
-        
-        if ( classifier != null )
-        {
-            sb.append( ':' ).append( classifier );
-        }
-        
-        sb.append( ':' ).append( version );
-        
-        return sb.toString();
-    }
-    
-}
+package org.apache.maven.shared.transfer.dependencies;
+
+/*
+ * 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.
+ */
+
+/**
+ * Common usage of an DependableCoordinate for a Mojo
+ * 
+ * <pre>
+ * &#64;Parameter
+ * private DefaultDependableCoordinate[] dependencies;
+ * </pre>
+ * 
+ * and
+ * 
+ * <pre>
+ * private DefaultDependableCoordinate dependable = new DefaultDependableCoordinate();
+ * 
+ * &#64;Parameter( property = "groupId" )
+ * private String groupId;
+ * 
+ * &#64;Parameter( property = "artifactId" )
+ * private String artifactId;
+ * 
+ * &#64;Parameter( property = "version" )
+ * private String version;
+ * 
+ * &#64;Parameter( property = "classifier" )
+ * private String classifier;
+ * 
+ * &#64;Parameter( property = "type" )
+ * private String type;
+ * 
+ * public void setGroupId( String groupId )
+ * {
+ *   this.dependable.setGroupId( groupId );
+ * }
+ * 
+ * public void setArtifactId( String artifactId )
+ * {
+ *   this.dependable.setArtifactId( artifactId );
+ * }
+ * 
+ * public void setVersion( String version )
+ * {
+ *   this.dependable.setVersion( version );
+ * }
+ * 
+ * public void setClassifier( String classifier )
+ * {
+ *   this.dependable.setClassifier( classifier );
+ * }
+ * 
+ * public void setType( String type )
+ * {
+ *   this.dependable.setType( type );
+ * }
+ * </pre>
+ * <strong>Note: </strong> type is not the same as extension! 
+ * {@link org.apache.maven.artifact.handler.ArtifactHandler}s are used to map a type to an extension.  
+ * 
+ * 
+ * @author Robert Scholte
+ * @since 3.0
+ */
+public class DefaultDependableCoordinate implements DependableCoordinate
+{
+    private String groupId;
+    
+    private String artifactId;
+    
+    private String version;
+    
+    private String type;
+    
+    private String classifier;
+    
+    @Override
+    public final String getGroupId()
+    {
+        return groupId;
+    }
+
+    /**
+     * @param groupId The groupId to be set.
+     */
+    public final void setGroupId( String groupId )
+    {
+        this.groupId = groupId;
+    }
+
+    @Override
+    public final String getArtifactId()
+    {
+        return artifactId;
+    }
+
+    /**
+     * @param artifactId The artifactId to be set.
+     */
+    public final void setArtifactId( String artifactId )
+    {
+        this.artifactId = artifactId;
+    }
+
+    @Override
+    public final String getVersion()
+    {
+        return version;
+    }
+
+    /**
+     * @param version The version to be set.
+     */
+    public final void setVersion( String version )
+    {
+        this.version = version;
+    }
+
+    @Override
+    public final String getType()
+    {
+        return type != null ? type : "jar";
+    }
+
+    /**
+     * @param type The type to be set.
+     */
+    public void setType( String type )
+    {
+        this.type = type;
+    }
+    
+    @Override
+    public final String getClassifier()
+    {
+        return classifier;
+    }
+
+    /**
+     * @param classifier The classifier to be set.
+     */
+    public final void setClassifier( String classifier )
+    {
+        this.classifier = classifier;
+    }
+    
+    /**
+     * @see org.apache.maven.artifact.DefaultArtifact#toString()
+     */
+    @Override
+    public String toString()
+    {
+        StringBuilder sb =
+            new StringBuilder().append( groupId ).append( ':' ).append( artifactId ).append( ':' ).append( getType() );
+        
+        if ( classifier != null )
+        {
+            sb.append( ':' ).append( classifier );
+        }
+        
+        sb.append( ':' ).append( version );
+        
+        return sb.toString();
+    }
+    
+}
diff --git a/src/main/java/org/apache/maven/shared/transfer/dependencies/DependableCoordinate.java b/maven-3.0.x/src/main/java/org/apache/maven/shared/transfer/dependencies/DependableCoordinate.java
similarity index 96%
copy from src/main/java/org/apache/maven/shared/transfer/dependencies/DependableCoordinate.java
copy to maven-3.0.x/src/main/java/org/apache/maven/shared/transfer/dependencies/DependableCoordinate.java
index 5182b3d..a2e8a3b 100644
--- a/src/main/java/org/apache/maven/shared/transfer/dependencies/DependableCoordinate.java
+++ b/maven-3.0.x/src/main/java/org/apache/maven/shared/transfer/dependencies/DependableCoordinate.java
@@ -1,70 +1,70 @@
-package org.apache.maven.shared.transfer.dependencies;
-
-/*
- * 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.
- */
-
-/**
- * <p>
- * Represents any instance which may contain Maven Dependencies, both explicit or implicit to (transitively) resolve 
- * and calculate its path for either a local or remote Maven repository.
- * </p>
- * <p>
- * The version can be a version range. Based on the groupId and artifactId it will be resolved to the actual version.
- * </p>
- * <p>
- * The type will be translated to an extension based on the artifact descriptor ({@code pom.xml} matching the groupId,
- * artifactId and version.
- * </p>
- * A MavenProject is not considered a DependableCoordinate because it should never have a versionRange, and it has 
- * packaging instead of type.
- * 
- * @author Robert Scholte
- */
-public interface DependableCoordinate
-{
-    /**
-     * @return the groupId of the coordinate
-     */
-    String getGroupId();
-
-    /**
-     * 
-     * @return the artifact of the coordinate
-     */
-    String getArtifactId();
-
-    /**
-     * A version or versionRange
-     * 
-     * @return the version
-     */
-    String getVersion();
-
-    /**
-     * 
-     * @return the type of the coordinate
-     */
-    String getType();
-
-    /**
-     * 
-     * @return the classifier or {@code null}
-     */
-    String getClassifier();
-}
+package org.apache.maven.shared.transfer.dependencies;
+
+/*
+ * 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.
+ */
+
+/**
+ * <p>
+ * Represents any instance which may contain Maven Dependencies, both explicit or implicit to (transitively) resolve 
+ * and calculate its path for either a local or remote Maven repository.
+ * </p>
+ * <p>
+ * The version can be a version range. Based on the groupId and artifactId it will be resolved to the actual version.
+ * </p>
+ * <p>
+ * The type will be translated to an extension based on the artifact descriptor ({@code pom.xml} matching the groupId,
+ * artifactId and version.
+ * </p>
+ * A MavenProject is not considered a DependableCoordinate because it should never have a versionRange, and it has 
+ * packaging instead of type.
+ * 
+ * @author Robert Scholte
+ */
+public interface DependableCoordinate
+{
+    /**
+     * @return the groupId of the coordinate
+     */
+    String getGroupId();
+
+    /**
+     * 
+     * @return the artifact of the coordinate
+     */
+    String getArtifactId();
+
+    /**
+     * A version or versionRange
+     * 
+     * @return the version
+     */
+    String getVersion();
+
+    /**
+     * 
+     * @return the type of the coordinate
+     */
+    String getType();
+
+    /**
+     * 
+     * @return the classifier or {@code null}
+     */
+    String getClassifier();
+}
diff --git a/src/main/java/org/apache/maven/shared/transfer/dependencies/TransferUtils.java b/maven-3.0.x/src/main/java/org/apache/maven/shared/transfer/dependencies/TransferUtils.java
similarity index 97%
copy from src/main/java/org/apache/maven/shared/transfer/dependencies/TransferUtils.java
copy to maven-3.0.x/src/main/java/org/apache/maven/shared/transfer/dependencies/TransferUtils.java
index aa87f81..078ebb4 100644
--- a/src/main/java/org/apache/maven/shared/transfer/dependencies/TransferUtils.java
+++ b/maven-3.0.x/src/main/java/org/apache/maven/shared/transfer/dependencies/TransferUtils.java
@@ -1,136 +1,136 @@
-package org.apache.maven.shared.transfer.dependencies;
-
-/*
- * 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.
- */
-
-import org.apache.maven.model.Dependency;
-import org.apache.maven.model.Extension;
-import org.apache.maven.model.Model;
-import org.apache.maven.model.Parent;
-import org.apache.maven.model.Plugin;
-import org.apache.maven.model.ReportPlugin;
-
-/**
- * Utility class to convert different things like {@link Dependency}, {@link Extension}, {@link Model}, {@link Parent},
- * {@link Plugin} and {@link ReportPlugin} into {@link DependableCoordinate}.
- * 
- * @author Robert Scholte
- */
-public final class TransferUtils
-{
-    private TransferUtils()
-    {
-    }
-    
-    /**
-     * @param dependency {@link Dependency} to be converted to {@link DependableCoordinate}
-     * @return {@link DependableCoordinate}
-     */
-    public static DependableCoordinate toDependableCoordinate( Dependency dependency )
-    {
-        DefaultDependableCoordinate coordinate = new DefaultDependableCoordinate();
-        
-        coordinate.setGroupId( dependency.getGroupId() );
-        coordinate.setArtifactId( dependency.getArtifactId() );
-        coordinate.setVersion( dependency.getVersion() );
-        coordinate.setType( dependency.getType() );
-        coordinate.setClassifier( dependency.getClassifier() );
-        
-        return coordinate;
-    }
-
-    /**
-     * @param extension {@link Extension} to be converted to {@link DependableCoordinate}
-     * @return {@link DependableCoordinate}
-     */
-    public static DependableCoordinate toDependableCoordinate( Extension extension )
-    {
-        DefaultDependableCoordinate coordinate = new DefaultDependableCoordinate();
-        
-        coordinate.setGroupId( extension.getGroupId() );
-        coordinate.setArtifactId( extension.getArtifactId() );
-        coordinate.setVersion( extension.getVersion() );
-        
-        return coordinate;
-    }
-
-    /**
-     * @param model {@link Model} coordinates to be converted to {@link DependableCoordinate}.
-     * @return {@link DependableCoordinate}
-     */
-    public static DependableCoordinate toDependableCoordinate( Model model )
-    {
-        DefaultDependableCoordinate coordinate = new DefaultDependableCoordinate();
-        
-        coordinate.setGroupId( model.getGroupId() );
-        coordinate.setArtifactId( model.getArtifactId() );
-        coordinate.setVersion( model.getVersion() );
-        coordinate.setType( model.getPackaging() );
-        
-        return coordinate;
-    }
-
-    /**
-     * @param parent {@link Parent parent} coordinates to be converted to {@link DependableCoordinate}.
-     * @return {@link DependableCoordinate}.
-     */
-    public static DependableCoordinate toDependableCoordinate( Parent parent )
-    {
-        DefaultDependableCoordinate coordinate = new DefaultDependableCoordinate();
-        
-        coordinate.setGroupId( parent.getGroupId() );
-        coordinate.setArtifactId( parent.getArtifactId() );
-        coordinate.setVersion( parent.getVersion() );
-        coordinate.setType( "pom" );
-        
-        return coordinate;
-    }
-
-    /**
-     * @param plugin The {@link Plugin plugin} coordiantes which should be converted. 
-     * @return {@link DependableCoordinate}.
-     */
-    public static DependableCoordinate toDependableCoordinate( Plugin plugin )
-    {
-        DefaultDependableCoordinate coordinate = new DefaultDependableCoordinate();
-        
-        coordinate.setGroupId( plugin.getGroupId() );
-        coordinate.setArtifactId( plugin.getArtifactId() );
-        coordinate.setVersion( plugin.getVersion() );
-        
-        return coordinate;
-    }
-    
-    /**
-     * Convert {@link ReportPlugin plugin} coordinates to {@link DependableCoordinate}.
-     * @param plugin The {@link ReportPlugin plugin} to be converted to {@link DependableCoordinate}.
-     * @return The converted {@link DependableCoordinate} coordinates.
-     */
-    public static DependableCoordinate toDependableCoordinate( ReportPlugin plugin )
-    {
-        DefaultDependableCoordinate coordinate = new DefaultDependableCoordinate();
-        
-        coordinate.setGroupId( plugin.getGroupId() );
-        coordinate.setArtifactId( plugin.getArtifactId() );
-        coordinate.setVersion( plugin.getVersion() );
-        
-        return coordinate;
-    }
-
-}
+package org.apache.maven.shared.transfer.dependencies;
+
+/*
+ * 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.
+ */
+
+import org.apache.maven.model.Dependency;
+import org.apache.maven.model.Extension;
+import org.apache.maven.model.Model;
+import org.apache.maven.model.Parent;
+import org.apache.maven.model.Plugin;
+import org.apache.maven.model.ReportPlugin;
+
+/**
+ * Utility class to convert different things like {@link Dependency}, {@link Extension}, {@link Model}, {@link Parent},
+ * {@link Plugin} and {@link ReportPlugin} into {@link DependableCoordinate}.
+ * 
+ * @author Robert Scholte
+ */
+public final class TransferUtils
+{
+    private TransferUtils()
+    {
+    }
+    
+    /**
+     * @param dependency {@link Dependency} to be converted to {@link DependableCoordinate}
+     * @return {@link DependableCoordinate}
+     */
+    public static DependableCoordinate toDependableCoordinate( Dependency dependency )
+    {
+        DefaultDependableCoordinate coordinate = new DefaultDependableCoordinate();
+        
+        coordinate.setGroupId( dependency.getGroupId() );
+        coordinate.setArtifactId( dependency.getArtifactId() );
+        coordinate.setVersion( dependency.getVersion() );
+        coordinate.setType( dependency.getType() );
+        coordinate.setClassifier( dependency.getClassifier() );
+        
+        return coordinate;
+    }
+
+    /**
+     * @param extension {@link Extension} to be converted to {@link DependableCoordinate}
+     * @return {@link DependableCoordinate}
+     */
+    public static DependableCoordinate toDependableCoordinate( Extension extension )
+    {
+        DefaultDependableCoordinate coordinate = new DefaultDependableCoordinate();
+        
+        coordinate.setGroupId( extension.getGroupId() );
+        coordinate.setArtifactId( extension.getArtifactId() );
+        coordinate.setVersion( extension.getVersion() );
+        
+        return coordinate;
+    }
+
+    /**
+     * @param model {@link Model} coordinates to be converted to {@link DependableCoordinate}.
+     * @return {@link DependableCoordinate}
+     */
+    public static DependableCoordinate toDependableCoordinate( Model model )
+    {
+        DefaultDependableCoordinate coordinate = new DefaultDependableCoordinate();
+        
+        coordinate.setGroupId( model.getGroupId() );
+        coordinate.setArtifactId( model.getArtifactId() );
+        coordinate.setVersion( model.getVersion() );
+        coordinate.setType( model.getPackaging() );
+        
+        return coordinate;
+    }
+
+    /**
+     * @param parent {@link Parent parent} coordinates to be converted to {@link DependableCoordinate}.
+     * @return {@link DependableCoordinate}.
+     */
+    public static DependableCoordinate toDependableCoordinate( Parent parent )
+    {
+        DefaultDependableCoordinate coordinate = new DefaultDependableCoordinate();
+        
+        coordinate.setGroupId( parent.getGroupId() );
+        coordinate.setArtifactId( parent.getArtifactId() );
+        coordinate.setVersion( parent.getVersion() );
+        coordinate.setType( "pom" );
+        
+        return coordinate;
+    }
+
+    /**
+     * @param plugin The {@link Plugin plugin} coordiantes which should be converted. 
+     * @return {@link DependableCoordinate}.
+     */
+    public static DependableCoordinate toDependableCoordinate( Plugin plugin )
+    {
+        DefaultDependableCoordinate coordinate = new DefaultDependableCoordinate();
+        
+        coordinate.setGroupId( plugin.getGroupId() );
+        coordinate.setArtifactId( plugin.getArtifactId() );
+        coordinate.setVersion( plugin.getVersion() );
+        
+        return coordinate;
+    }
+    
+    /**
+     * Convert {@link ReportPlugin plugin} coordinates to {@link DependableCoordinate}.
+     * @param plugin The {@link ReportPlugin plugin} to be converted to {@link DependableCoordinate}.
+     * @return The converted {@link DependableCoordinate} coordinates.
+     */
+    public static DependableCoordinate toDependableCoordinate( ReportPlugin plugin )
+    {
+        DefaultDependableCoordinate coordinate = new DefaultDependableCoordinate();
+        
+        coordinate.setGroupId( plugin.getGroupId() );
+        coordinate.setArtifactId( plugin.getArtifactId() );
+        coordinate.setVersion( plugin.getVersion() );
+        
+        return coordinate;
+    }
+
+}
diff --git a/src/main/java/org/apache/maven/shared/transfer/dependencies/collect/CollectorResult.java b/maven-3.0.x/src/main/java/org/apache/maven/shared/transfer/dependencies/collect/CollectorResult.java
similarity index 96%
copy from src/main/java/org/apache/maven/shared/transfer/dependencies/collect/CollectorResult.java
copy to maven-3.0.x/src/main/java/org/apache/maven/shared/transfer/dependencies/collect/CollectorResult.java
index d5a13b5..674dad5 100644
--- a/src/main/java/org/apache/maven/shared/transfer/dependencies/collect/CollectorResult.java
+++ b/maven-3.0.x/src/main/java/org/apache/maven/shared/transfer/dependencies/collect/CollectorResult.java
@@ -1,37 +1,37 @@
-package org.apache.maven.shared.transfer.dependencies.collect;
-
-/*
- * 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.
- */
-
-import java.util.List;
-
-import org.apache.maven.artifact.repository.ArtifactRepository;
-
-/**
- * 
- * @author Robert Scholte
- *
- */
-public interface CollectorResult
-{
-    /**
-     * @return List of {@link ArtifactRepository}
-     */
-    List<ArtifactRepository> getRemoteRepositories();
-}
+package org.apache.maven.shared.transfer.dependencies.collect;
+
+/*
+ * 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.
+ */
+
+import java.util.List;
+
+import org.apache.maven.artifact.repository.ArtifactRepository;
+
+/**
+ * 
+ * @author Robert Scholte
+ *
+ */
+public interface CollectorResult
+{
+    /**
+     * @return List of {@link ArtifactRepository}
+     */
+    List<ArtifactRepository> getRemoteRepositories();
+}
diff --git a/src/main/java/org/apache/maven/shared/transfer/dependencies/collect/DependencyCollector.java b/maven-3.0.x/src/main/java/org/apache/maven/shared/transfer/dependencies/collect/DependencyCollector.java
similarity index 97%
copy from src/main/java/org/apache/maven/shared/transfer/dependencies/collect/DependencyCollector.java
copy to maven-3.0.x/src/main/java/org/apache/maven/shared/transfer/dependencies/collect/DependencyCollector.java
index 2134776..0dbc465 100644
--- a/src/main/java/org/apache/maven/shared/transfer/dependencies/collect/DependencyCollector.java
+++ b/maven-3.0.x/src/main/java/org/apache/maven/shared/transfer/dependencies/collect/DependencyCollector.java
@@ -1,73 +1,73 @@
-package org.apache.maven.shared.transfer.dependencies.collect;
-
-/*
- * 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.
- */
-
-import org.apache.maven.model.Dependency;
-import org.apache.maven.model.Model;
-import org.apache.maven.project.ProjectBuildingRequest;
-import org.apache.maven.shared.transfer.dependencies.DependableCoordinate;
-
-/**
- * Will only download the pom files when not available, never the artifact. 
- * 
- * @author Robert Scholte
- *
- */
-public interface DependencyCollector
-{
-
-    /**
-     * A dependency may have excludes 
-     * 
-     * @param buildingRequest {@link ProjectBuildingRequest}
-     * @param root {@link Dependency}
-     * @return {@link CollectorResult}
-     * @throws DependencyCollectorException in case of an error.
-     * @throws IllegalArgumentException in case of parameter <code>buildingRequest</code> is <code>null</code> or
-     *             parameter <code>root</code> is <code>null</code>.
-     */
-    CollectorResult collectDependencies( ProjectBuildingRequest buildingRequest, Dependency root )
-        throws DependencyCollectorException;
-
-    /**
-     * @param buildingRequest {@link ProjectBuildingRequest}.
-     * @param root {@link DependableCoordinate}
-     * @return {@link CollectorResult}
-     * @throws DependencyCollectorException in case of an error which can be a component lookup error or
-     *  an error while trying to look up the dependencies.
-     * @throws IllegalArgumentException in case of parameter <code>buildingRequest</code> is <code>null</code> or
-     *             parameter <code>root</code> is <code>null</code>.
-     */
-    CollectorResult collectDependencies( ProjectBuildingRequest buildingRequest, DependableCoordinate root )
-                    throws DependencyCollectorException;
-
-    /**
-     * @param buildingRequest {@link ProjectBuildingRequest}.
-     * @param root {@link Model}
-     * @return {@link CollectorResult}
-     * @throws DependencyCollectorException in case of an error which can be a component lookup error or
-     *  an error while trying to look up the dependencies.
-     * @throws IllegalArgumentException in case of parameter <code>buildingRequest</code> is <code>null</code> or
-     *             parameter <code>root</code> is <code>null</code>.
-     */
-    CollectorResult collectDependencies( ProjectBuildingRequest buildingRequest, Model root )
-                    throws DependencyCollectorException;
-
-}
+package org.apache.maven.shared.transfer.dependencies.collect;
+
+/*
+ * 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.
+ */
+
+import org.apache.maven.model.Dependency;
+import org.apache.maven.model.Model;
+import org.apache.maven.project.ProjectBuildingRequest;
+import org.apache.maven.shared.transfer.dependencies.DependableCoordinate;
+
+/**
+ * Will only download the pom files when not available, never the artifact. 
+ * 
+ * @author Robert Scholte
+ *
+ */
+public interface DependencyCollector
+{
+
+    /**
+     * A dependency may have excludes 
+     * 
+     * @param buildingRequest {@link ProjectBuildingRequest}
+     * @param root {@link Dependency}
+     * @return {@link CollectorResult}
+     * @throws DependencyCollectorException in case of an error.
+     * @throws IllegalArgumentException in case of parameter <code>buildingRequest</code> is <code>null</code> or
+     *             parameter <code>root</code> is <code>null</code>.
+     */
+    CollectorResult collectDependencies( ProjectBuildingRequest buildingRequest, Dependency root )
+        throws DependencyCollectorException;
+
+    /**
+     * @param buildingRequest {@link ProjectBuildingRequest}.
+     * @param root {@link DependableCoordinate}
+     * @return {@link CollectorResult}
+     * @throws DependencyCollectorException in case of an error which can be a component lookup error or
+     *  an error while trying to look up the dependencies.
+     * @throws IllegalArgumentException in case of parameter <code>buildingRequest</code> is <code>null</code> or
+     *             parameter <code>root</code> is <code>null</code>.
+     */
+    CollectorResult collectDependencies( ProjectBuildingRequest buildingRequest, DependableCoordinate root )
+                    throws DependencyCollectorException;
+
+    /**
+     * @param buildingRequest {@link ProjectBuildingRequest}.
+     * @param root {@link Model}
+     * @return {@link CollectorResult}
+     * @throws DependencyCollectorException in case of an error which can be a component lookup error or
+     *  an error while trying to look up the dependencies.
+     * @throws IllegalArgumentException in case of parameter <code>buildingRequest</code> is <code>null</code> or
+     *             parameter <code>root</code> is <code>null</code>.
+     */
+    CollectorResult collectDependencies( ProjectBuildingRequest buildingRequest, Model root )
+                    throws DependencyCollectorException;
+
+}
diff --git a/src/main/java/org/apache/maven/shared/transfer/dependencies/collect/DependencyCollectorException.java b/maven-3.0.x/src/main/java/org/apache/maven/shared/transfer/dependencies/collect/DependencyCollectorException.java
similarity index 96%
copy from src/main/java/org/apache/maven/shared/transfer/dependencies/collect/DependencyCollectorException.java
copy to maven-3.0.x/src/main/java/org/apache/maven/shared/transfer/dependencies/collect/DependencyCollectorException.java
index c959b05..cc5a784 100644
--- a/src/main/java/org/apache/maven/shared/transfer/dependencies/collect/DependencyCollectorException.java
+++ b/maven-3.0.x/src/main/java/org/apache/maven/shared/transfer/dependencies/collect/DependencyCollectorException.java
@@ -1,43 +1,43 @@
-package org.apache.maven.shared.transfer.dependencies.collect;
-
-/*
- * 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.
- */
-
-/**
- * 
- * @author Robert Scholte
- */
-public class DependencyCollectorException extends Exception
-{
-
-    /**
-     * 
-     */
-    private static final long serialVersionUID = -180986912170441437L;
-
-    /**
-     * @param message The message you would give for the exception.
-     * @param cause The cause which is related to the message.
-     */
-    public DependencyCollectorException( String message, Throwable cause )
-    {
-        super( message, cause );
-    }
-
-}
+package org.apache.maven.shared.transfer.dependencies.collect;
+
+/*
+ * 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.
+ */
+
+/**
+ * 
+ * @author Robert Scholte
+ */
+public class DependencyCollectorException extends Exception
+{
+
+    /**
+     * 
+     */
+    private static final long serialVersionUID = -180986912170441437L;
+
+    /**
+     * @param message The message you would give for the exception.
+     * @param cause The cause which is related to the message.
+     */
+    public DependencyCollectorException( String message, Throwable cause )
+    {
+        super( message, cause );
+    }
+
+}
diff --git a/src/main/java/org/apache/maven/shared/transfer/dependencies/collect/internal/DefaultDependencyCollector.java b/maven-3.0.x/src/main/java/org/apache/maven/shared/transfer/dependencies/collect/internal/DefaultDependencyCollector.java
similarity index 97%
copy from src/main/java/org/apache/maven/shared/transfer/dependencies/collect/internal/DefaultDependencyCollector.java
copy to maven-3.0.x/src/main/java/org/apache/maven/shared/transfer/dependencies/collect/internal/DefaultDependencyCollector.java
index fb1e498..bf84fc9 100644
--- a/src/main/java/org/apache/maven/shared/transfer/dependencies/collect/internal/DefaultDependencyCollector.java
+++ b/maven-3.0.x/src/main/java/org/apache/maven/shared/transfer/dependencies/collect/internal/DefaultDependencyCollector.java
@@ -1,198 +1,198 @@
-package org.apache.maven.shared.transfer.dependencies.collect.internal;
-
-/*
- * 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.
- */
-
-import java.util.List;
-
-import org.apache.maven.RepositoryUtils;
-import org.apache.maven.artifact.handler.manager.ArtifactHandlerManager;
-import org.apache.maven.model.Dependency;
-import org.apache.maven.model.Model;
-import org.apache.maven.project.ProjectBuildingRequest;
-import org.apache.maven.shared.transfer.dependencies.DependableCoordinate;
-import org.apache.maven.shared.transfer.dependencies.collect.CollectorResult;
-import org.apache.maven.shared.transfer.dependencies.collect.DependencyCollector;
-import org.apache.maven.shared.transfer.dependencies.collect.DependencyCollectorException;
-import org.codehaus.plexus.PlexusConstants;
-import org.codehaus.plexus.PlexusContainer;
-import org.codehaus.plexus.component.annotations.Component;
-import org.codehaus.plexus.component.repository.exception.ComponentLookupException;
-import org.codehaus.plexus.context.Context;
-import org.codehaus.plexus.context.ContextException;
-import org.codehaus.plexus.personality.plexus.lifecycle.phase.Contextualizable;
-
-/**
- * This DependencyCollector passes the request to the proper Maven 3.x implementation
- *
- * @author Robert Scholte
- */
-@Component( role = DependencyCollector.class, hint = "default" )
-class DefaultDependencyCollector implements DependencyCollector, Contextualizable
-{
-    private PlexusContainer container;
-
-    @Override
-    public CollectorResult collectDependencies( ProjectBuildingRequest buildingRequest, Dependency root )
-            throws DependencyCollectorException
-    {
-        validateParameters( buildingRequest, root );
-
-        try
-        {
-            return getMavenDependencyCollector( buildingRequest ).collectDependencies( root );
-        }
-        catch ( ComponentLookupException e )
-        {
-            throw new DependencyCollectorException( e.getMessage(), e );
-        }
-    }
-
-    @Override
-    public CollectorResult collectDependencies( ProjectBuildingRequest buildingRequest, DependableCoordinate root )
-            throws DependencyCollectorException
-    {
-        validateParameters( buildingRequest, root );
-
-        try
-        {
-            return getMavenDependencyCollector( buildingRequest ).collectDependencies( root );
-        }
-        catch ( ComponentLookupException e )
-        {
-            throw new DependencyCollectorException( e.getMessage(), e );
-        }
-    }
-
-    @Override
-    public CollectorResult collectDependencies( ProjectBuildingRequest buildingRequest, Model root )
-            throws DependencyCollectorException
-    {
-        validateParameters( buildingRequest, root );
-
-        try
-        {
-            return getMavenDependencyCollector( buildingRequest ).collectDependencies( root );
-        }
-        catch ( ComponentLookupException e )
-        {
-            throw new DependencyCollectorException( e.getMessage(), e );
-        }
-    }
-
-    private void validateParameters( ProjectBuildingRequest buildingRequest, DependableCoordinate root )
-    {
-        validateBuildingRequest( buildingRequest );
-        validateRoot( root );
-    }
-
-    private void validateParameters( ProjectBuildingRequest buildingRequest, Dependency root )
-    {
-        validateBuildingRequest( buildingRequest );
-        validateRoot( root );
-    }
-
-    private void validateParameters( ProjectBuildingRequest buildingRequest, Model root )
-    {
-        validateBuildingRequest( buildingRequest );
-        validateRoot( root );
-    }
-
-    private void validateBuildingRequest( ProjectBuildingRequest buildingRequest )
-    {
-        if ( buildingRequest == null )
-        {
-            throw new IllegalArgumentException( "The parameter buildingRequest is not allowed to be null." );
-        }
-    }
-
-    private void validateRoot( Object root )
-    {
-        if ( root == null )
-        {
-            throw new IllegalArgumentException( "The parameter root is not allowed to be null." );
-        }
-    }
-
-    /**
-     * @return true if the current Maven version is Maven 3.1.
-     */
-    private boolean isMaven31()
-    {
-        try
-        {
-            // Maven 3.1 specific
-            Thread.currentThread().getContextClassLoader().loadClass( "org.eclipse.aether.artifact.Artifact" );
-            return true;
-        }
-        catch ( ClassNotFoundException e )
-        {
-            return false;
-        }
-    }
-
-    /**
-     * Injects the Plexus content.
-     *
-     * @param context Plexus context to inject.
-     * @throws ContextException if the PlexusContainer could not be located.
-     */
-    public void contextualize( Context context ) throws ContextException
-    {
-        container = (PlexusContainer) context.get( PlexusConstants.PLEXUS_KEY );
-    }
-
-    private MavenDependencyCollector getMavenDependencyCollector( ProjectBuildingRequest buildingRequest )
-            throws ComponentLookupException, DependencyCollectorException
-    {
-        ArtifactHandlerManager artifactHandlerManager = container.lookup( ArtifactHandlerManager.class );
-
-        if ( isMaven31() )
-        {
-            org.eclipse.aether.RepositorySystem m31RepositorySystem = container.lookup(
-                    org.eclipse.aether.RepositorySystem.class );
-
-            org.eclipse.aether.RepositorySystemSession session = Invoker.invoke( buildingRequest,
-                    "getRepositorySession" );
-
-            List<org.eclipse.aether.repository.RemoteRepository> aetherRepositories = Invoker.invoke(
-                    RepositoryUtils.class, "toRepos", List.class, buildingRequest.getRemoteRepositories() );
-
-            return new Maven31DependencyCollector( m31RepositorySystem, artifactHandlerManager, session,
-                    aetherRepositories );
-        }
-        else
-        {
-
-            org.sonatype.aether.RepositorySystem m30RepositorySystem = container.lookup(
-                    org.sonatype.aether.RepositorySystem.class );
-
-            org.sonatype.aether.RepositorySystemSession session = Invoker.invoke( buildingRequest,
-                    "getRepositorySession" );
-
-            List<org.sonatype.aether.repository.RemoteRepository> aetherRepositories = Invoker.invoke(
-                    RepositoryUtils.class, "toRepos", List.class, buildingRequest.getRemoteRepositories() );
-
-            return new Maven30DependencyCollector( m30RepositorySystem, artifactHandlerManager, session,
-                    aetherRepositories );
-        }
-
-    }
-
-}
+package org.apache.maven.shared.transfer.dependencies.collect.internal;
+
+/*
+ * 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.
+ */
+
+import java.util.List;
+
+import org.apache.maven.RepositoryUtils;
+import org.apache.maven.artifact.handler.manager.ArtifactHandlerManager;
+import org.apache.maven.model.Dependency;
+import org.apache.maven.model.Model;
+import org.apache.maven.project.ProjectBuildingRequest;
+import org.apache.maven.shared.transfer.dependencies.DependableCoordinate;
+import org.apache.maven.shared.transfer.dependencies.collect.CollectorResult;
+import org.apache.maven.shared.transfer.dependencies.collect.DependencyCollector;
+import org.apache.maven.shared.transfer.dependencies.collect.DependencyCollectorException;
+import org.codehaus.plexus.PlexusConstants;
+import org.codehaus.plexus.PlexusContainer;
+import org.codehaus.plexus.component.annotations.Component;
+import org.codehaus.plexus.component.repository.exception.ComponentLookupException;
+import org.codehaus.plexus.context.Context;
+import org.codehaus.plexus.context.ContextException;
+import org.codehaus.plexus.personality.plexus.lifecycle.phase.Contextualizable;
+
+/**
+ * This DependencyCollector passes the request to the proper Maven 3.x implementation
+ *
+ * @author Robert Scholte
+ */
+@Component( role = DependencyCollector.class, hint = "default" )
+class DefaultDependencyCollector implements DependencyCollector, Contextualizable
+{
+    private PlexusContainer container;
+
+    @Override
+    public CollectorResult collectDependencies( ProjectBuildingRequest buildingRequest, Dependency root )
+            throws DependencyCollectorException
+    {
+        validateParameters( buildingRequest, root );
+
+        try
+        {
+            return getMavenDependencyCollector( buildingRequest ).collectDependencies( root );
+        }
+        catch ( ComponentLookupException e )
+        {
+            throw new DependencyCollectorException( e.getMessage(), e );
+        }
+    }
+
+    @Override
+    public CollectorResult collectDependencies( ProjectBuildingRequest buildingRequest, DependableCoordinate root )
+            throws DependencyCollectorException
+    {
+        validateParameters( buildingRequest, root );
+
+        try
+        {
+            return getMavenDependencyCollector( buildingRequest ).collectDependencies( root );
+        }
+        catch ( ComponentLookupException e )
+        {
+            throw new DependencyCollectorException( e.getMessage(), e );
+        }
+    }
+
+    @Override
+    public CollectorResult collectDependencies( ProjectBuildingRequest buildingRequest, Model root )
+            throws DependencyCollectorException
+    {
+        validateParameters( buildingRequest, root );
+
+        try
+        {
+            return getMavenDependencyCollector( buildingRequest ).collectDependencies( root );
+        }
+        catch ( ComponentLookupException e )
+        {
+            throw new DependencyCollectorException( e.getMessage(), e );
+        }
+    }
+
+    private void validateParameters( ProjectBuildingRequest buildingRequest, DependableCoordinate root )
+    {
+        validateBuildingRequest( buildingRequest );
+        validateRoot( root );
+    }
+
+    private void validateParameters( ProjectBuildingRequest buildingRequest, Dependency root )
+    {
+        validateBuildingRequest( buildingRequest );
+        validateRoot( root );
+    }
+
+    private void validateParameters( ProjectBuildingRequest buildingRequest, Model root )
+    {
+        validateBuildingRequest( buildingRequest );
+        validateRoot( root );
+    }
+
+    private void validateBuildingRequest( ProjectBuildingRequest buildingRequest )
+    {
+        if ( buildingRequest == null )
+        {
+            throw new IllegalArgumentException( "The parameter buildingRequest is not allowed to be null." );
+        }
+    }
+
+    private void validateRoot( Object root )
+    {
+        if ( root == null )
+        {
+            throw new IllegalArgumentException( "The parameter root is not allowed to be null." );
+        }
+    }
+
+    /**
+     * @return true if the current Maven version is Maven 3.1.
+     */
+    private boolean isMaven31()
+    {
+        try
+        {
+            // Maven 3.1 specific
+            Thread.currentThread().getContextClassLoader().loadClass( "org.eclipse.aether.artifact.Artifact" );
+            return true;
+        }
+        catch ( ClassNotFoundException e )
+        {
+            return false;
+        }
+    }
+
+    /**
+     * Injects the Plexus content.
+     *
+     * @param context Plexus context to inject.
+     * @throws ContextException if the PlexusContainer could not be located.
+     */
+    public void contextualize( Context context ) throws ContextException
+    {
+        container = (PlexusContainer) context.get( PlexusConstants.PLEXUS_KEY );
+    }
+
+    private MavenDependencyCollector getMavenDependencyCollector( ProjectBuildingRequest buildingRequest )
+            throws ComponentLookupException, DependencyCollectorException
+    {
+        ArtifactHandlerManager artifactHandlerManager = container.lookup( ArtifactHandlerManager.class );
+
+        if ( isMaven31() )
+        {
+            org.eclipse.aether.RepositorySystem m31RepositorySystem = container.lookup(
+                    org.eclipse.aether.RepositorySystem.class );
+
+            org.eclipse.aether.RepositorySystemSession session = Invoker.invoke( buildingRequest,
+                    "getRepositorySession" );
+
+            List<org.eclipse.aether.repository.RemoteRepository> aetherRepositories = Invoker.invoke(
+                    RepositoryUtils.class, "toRepos", List.class, buildingRequest.getRemoteRepositories() );
+
+            return new Maven31DependencyCollector( m31RepositorySystem, artifactHandlerManager, session,
+                    aetherRepositories );
+        }
+        else
+        {
+
+            org.sonatype.aether.RepositorySystem m30RepositorySystem = container.lookup(
+                    org.sonatype.aether.RepositorySystem.class );
+
+            org.sonatype.aether.RepositorySystemSession session = Invoker.invoke( buildingRequest,
+                    "getRepositorySession" );
+
+            List<org.sonatype.aether.repository.RemoteRepository> aetherRepositories = Invoker.invoke(
+                    RepositoryUtils.class, "toRepos", List.class, buildingRequest.getRemoteRepositories() );
+
+            return new Maven30DependencyCollector( m30RepositorySystem, artifactHandlerManager, session,
+                    aetherRepositories );
+        }
+
+    }
+
+}
diff --git a/src/main/java/org/apache/maven/shared/transfer/dependencies/collect/internal/Invoker.java b/maven-3.0.x/src/main/java/org/apache/maven/shared/transfer/dependencies/collect/internal/Invoker.java
similarity index 97%
copy from src/main/java/org/apache/maven/shared/transfer/dependencies/collect/internal/Invoker.java
copy to maven-3.0.x/src/main/java/org/apache/maven/shared/transfer/dependencies/collect/internal/Invoker.java
index 45872e9..9f645b6 100644
--- a/src/main/java/org/apache/maven/shared/transfer/dependencies/collect/internal/Invoker.java
+++ b/maven-3.0.x/src/main/java/org/apache/maven/shared/transfer/dependencies/collect/internal/Invoker.java
@@ -1,93 +1,93 @@
-package org.apache.maven.shared.transfer.dependencies.collect.internal;
-
-/*
- * 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.
- */
-
-import org.apache.maven.shared.transfer.dependencies.collect.DependencyCollectorException;
-
-import java.lang.reflect.InvocationTargetException;
-
-/**
- * Invokes method on objects using reflection.
- */
-final class Invoker
-{
-    private Invoker()
-    {
-        // do not instantiate
-    }
-
-    public static <T> T invoke( Object object, String method ) throws DependencyCollectorException
-    {
-        try
-        {
-            @SuppressWarnings( "unchecked" )
-            T invoke = (T) object.getClass().getMethod( method ).invoke( object );
-            return invoke;
-        }
-        catch ( IllegalAccessException | InvocationTargetException | NoSuchMethodException e )
-        {
-            throw new DependencyCollectorException( e.getMessage(), e );
-        }
-    }
-
-    public static <T> T invoke( Class<?> objectClazz, String staticMethod, Class<?> argClazz, Object arg )
-            throws DependencyCollectorException
-    {
-        try
-        {
-            @SuppressWarnings( "unchecked" )
-            T invoke = (T) objectClazz.getMethod( staticMethod, argClazz ).invoke( null, arg );
-            return invoke;
-        }
-        catch ( IllegalAccessException | InvocationTargetException | NoSuchMethodException e )
-        {
-            throw new DependencyCollectorException( e.getMessage(), e );
-        }
-    }
-
-    /**
-     * @param objectClazz  the class of the static method
-     * @param staticMethod the static method to call
-     * @param argClasses   the classes of the argument, used to select the right static method
-     * @param args         the actual arguments to be passed
-     * @return the result of the method invocation
-     * @throws DependencyCollectorException if any checked exception occurs
-     */
-    public static <T> T invoke( Class<?> objectClazz, String staticMethod, Class<?>[] argClasses, Object[] args )
-            throws DependencyCollectorException
-    {
-        if ( args.length != argClasses.length )
-        {
-            throw new IllegalArgumentException( "The number of elements in argClasses and args are not the same." );
-        }
-
-        try
-        {
-            @SuppressWarnings( "unchecked" )
-            T invoke = (T) objectClazz.getMethod( staticMethod, argClasses ).invoke( null, args );
-            return invoke;
-        }
-        catch ( IllegalAccessException | InvocationTargetException | NoSuchMethodException e )
-        {
-            throw new DependencyCollectorException( e.getMessage(), e );
-        }
-    }
-
-}
+package org.apache.maven.shared.transfer.dependencies.collect.internal;
+
+/*
+ * 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.
+ */
+
+import org.apache.maven.shared.transfer.dependencies.collect.DependencyCollectorException;
+
+import java.lang.reflect.InvocationTargetException;
+
+/**
+ * Invokes method on objects using reflection.
+ */
+final class Invoker
+{
+    private Invoker()
+    {
+        // do not instantiate
+    }
+
+    public static <T> T invoke( Object object, String method ) throws DependencyCollectorException
+    {
+        try
+        {
+            @SuppressWarnings( "unchecked" )
+            T invoke = (T) object.getClass().getMethod( method ).invoke( object );
+            return invoke;
+        }
+        catch ( IllegalAccessException | InvocationTargetException | NoSuchMethodException e )
+        {
+            throw new DependencyCollectorException( e.getMessage(), e );
+        }
+    }
+
+    public static <T> T invoke( Class<?> objectClazz, String staticMethod, Class<?> argClazz, Object arg )
+            throws DependencyCollectorException
+    {
+        try
+        {
+            @SuppressWarnings( "unchecked" )
+            T invoke = (T) objectClazz.getMethod( staticMethod, argClazz ).invoke( null, arg );
+            return invoke;
+        }
+        catch ( IllegalAccessException | InvocationTargetException | NoSuchMethodException e )
+        {
+            throw new DependencyCollectorException( e.getMessage(), e );
+        }
+    }
+
+    /**
+     * @param objectClazz  the class of the static method
+     * @param staticMethod the static method to call
+     * @param argClasses   the classes of the argument, used to select the right static method
+     * @param args         the actual arguments to be passed
+     * @return the result of the method invocation
+     * @throws DependencyCollectorException if any checked exception occurs
+     */
+    public static <T> T invoke( Class<?> objectClazz, String staticMethod, Class<?>[] argClasses, Object[] args )
+            throws DependencyCollectorException
+    {
+        if ( args.length != argClasses.length )
+        {
+            throw new IllegalArgumentException( "The number of elements in argClasses and args are not the same." );
+        }
+
+        try
+        {
+            @SuppressWarnings( "unchecked" )
+            T invoke = (T) objectClazz.getMethod( staticMethod, argClasses ).invoke( null, args );
+            return invoke;
+        }
+        catch ( IllegalAccessException | InvocationTargetException | NoSuchMethodException e )
+        {
+            throw new DependencyCollectorException( e.getMessage(), e );
+        }
+    }
+
+}
diff --git a/src/main/java/org/apache/maven/shared/transfer/dependencies/collect/internal/Maven30ArtifactRepositoryAdapter.java b/maven-3.0.x/src/main/java/org/apache/maven/shared/transfer/dependencies/collect/internal/Maven30ArtifactRepositoryAdapter.java
similarity index 96%
copy from src/main/java/org/apache/maven/shared/transfer/dependencies/collect/internal/Maven30ArtifactRepositoryAdapter.java
copy to maven-3.0.x/src/main/java/org/apache/maven/shared/transfer/dependencies/collect/internal/Maven30ArtifactRepositoryAdapter.java
index b09ccd4..a51fd56 100644
--- a/src/main/java/org/apache/maven/shared/transfer/dependencies/collect/internal/Maven30ArtifactRepositoryAdapter.java
+++ b/maven-3.0.x/src/main/java/org/apache/maven/shared/transfer/dependencies/collect/internal/Maven30ArtifactRepositoryAdapter.java
@@ -1,266 +1,266 @@
-package org.apache.maven.shared.transfer.dependencies.collect.internal;
-
-/*
- * 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.
- */
-
-import java.util.List;
-
-import org.apache.maven.artifact.Artifact;
-import org.apache.maven.artifact.metadata.ArtifactMetadata;
-import org.apache.maven.artifact.repository.ArtifactRepository;
-import org.apache.maven.artifact.repository.ArtifactRepositoryPolicy;
-import org.apache.maven.artifact.repository.Authentication;
-import org.apache.maven.artifact.repository.layout.ArtifactRepositoryLayout;
-import org.apache.maven.repository.Proxy;
-import org.sonatype.aether.repository.RemoteRepository;
-import org.sonatype.aether.repository.RepositoryPolicy;
-
-/**
- * ArtifactRepository wrapper around {@link RemoteRepository}
- * 
- * @author Robert Scholte
- *
- */
-class Maven30ArtifactRepositoryAdapter implements ArtifactRepository
-{
-    
-    private RemoteRepository remoteRepository;
-
-    /**
-     * @param remoteRepository {@link RemoteRepository}
-     */
-    Maven30ArtifactRepositoryAdapter( RemoteRepository remoteRepository )
-    {
-        this.remoteRepository = remoteRepository;
-    }
-
-    @Override
-    public String pathOf( Artifact artifact )
-    {
-        throw new UnsupportedOperationException();
-    }
-
-    @Override
-    public String pathOfRemoteRepositoryMetadata( ArtifactMetadata artifactMetadata )
-    {
-        throw new UnsupportedOperationException();
-    }
-
-    @Override
-    public String pathOfLocalRepositoryMetadata( ArtifactMetadata metadata, ArtifactRepository repository )
-    {
-        throw new UnsupportedOperationException();
-    }
-
-    @Override
-    public String getUrl()
-    {
-        return remoteRepository.getUrl();
-    }
-
-    @Override
-    public void setUrl( String url )
-    {
-        throw new UnsupportedOperationException();
-    }
-
-    @Override
-    public String getBasedir()
-    {
-        throw new UnsupportedOperationException();
-    }
-
-    @Override
-    public String getProtocol()
-    {
-        throw new UnsupportedOperationException();
-    }
-
-    @Override
-    public String getId()
-    {
-        return remoteRepository.getId();
-    }
-
-    @Override
-    public void setId( String id )
-    {
-        throw new UnsupportedOperationException();
-    }
-
-    @Override
-    public ArtifactRepositoryPolicy getSnapshots()
-    {
-        throw new UnsupportedOperationException();
-    }
-
-    @Override
-    public void setSnapshotUpdatePolicy( ArtifactRepositoryPolicy policy )
-    {
-        throw new UnsupportedOperationException();
-    }
-
-    @Override
-    public ArtifactRepositoryPolicy getReleases()
-    {
-        throw new UnsupportedOperationException();
-    }
-
-    @Override
-    public void setReleaseUpdatePolicy( ArtifactRepositoryPolicy policy )
-    {
-        throw new UnsupportedOperationException();
-    }
-
-    @Override
-    public ArtifactRepositoryLayout getLayout()
-    {
-        throw new UnsupportedOperationException();
-    }
-
-    @Override
-    public void setLayout( ArtifactRepositoryLayout layout )
-    {
-        throw new UnsupportedOperationException();
-    }
-
-    @Override
-    public String getKey()
-    {
-        throw new UnsupportedOperationException();
-    }
-
-    @Override
-    public boolean isUniqueVersion()
-    {
-        throw new UnsupportedOperationException();
-    }
-
-    @Override
-    public boolean isBlacklisted()
-    {
-        throw new UnsupportedOperationException();
-    }
-
-    @Override
-    public void setBlacklisted( boolean blackListed )
-    {
-        throw new UnsupportedOperationException();
-    }
-
-    @Override
-    public Artifact find( Artifact artifact )
-    {
-        throw new UnsupportedOperationException();
-    }
-
-    @Override
-    public List<String> findVersions( Artifact artifact )
-    {
-        throw new UnsupportedOperationException();
-    }
-
-    @Override
-    public boolean isProjectAware()
-    {
-        throw new UnsupportedOperationException();
-    }
-
-    @Override
-    public void setAuthentication( Authentication authentication )
-    {
-        throw new UnsupportedOperationException();
-    }
-
-    @Override
-    public Authentication getAuthentication()
-    {
-        throw new UnsupportedOperationException();
-    }
-
-    @Override
-    public void setProxy( Proxy proxy )
-    {
-        throw new UnsupportedOperationException();
-    }
-
-    @Override
-    public Proxy getProxy()
-    {
-        throw new UnsupportedOperationException();
-    }
-
-    @Override
-    public String toString()
-    {
-        StringBuilder sb = new StringBuilder();
-
-        sb.append( "       id: " ).append( getId() ).append( "\n" );
-        sb.append( "      url: " ).append( getUrl() ).append( "\n" );
-        sb.append( "   layout: " ).append( "default" ).append( "\n" );
-
-        RepositoryPolicy snapshotPolicy = remoteRepository.getPolicy( true ); 
-        sb.append( "snapshots: [enabled => " ).append( snapshotPolicy.isEnabled() );
-        sb.append( ", update => " ).append( snapshotPolicy.getUpdatePolicy() ).append( "]\n" );
-
-        RepositoryPolicy releasePolicy = remoteRepository.getPolicy( false ); 
-        sb.append( " releases: [enabled => " ).append( releasePolicy.isEnabled() );
-        sb.append( ", update => " ).append( releasePolicy.getUpdatePolicy() ).append( "]\n" );
-
-        return sb.toString();
-    }
-    
-    
-    @Override
-    public int hashCode()
-    {
-        return remoteRepository.hashCode();
-    }
-
-    @Override
-    public boolean equals( Object obj )
-    {
-        if ( this == obj )
-        {
-            return true;
-        }
-        if ( obj == null )
-        {
-            return false;
-        }
-        if ( getClass() != obj.getClass() )
-        {
-            return false;
-        }
-        
-        Maven30ArtifactRepositoryAdapter other = (Maven30ArtifactRepositoryAdapter) obj;
-        if ( remoteRepository == null )
-        {
-            if ( other.remoteRepository != null )
-            {
-                return false;
-            }
-        }
-        else if ( !remoteRepository.equals( other.remoteRepository ) )
-        {
-            return false;
-        }
-        return true;
-    }
-}
+package org.apache.maven.shared.transfer.dependencies.collect.internal;
+
+/*
+ * 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.
+ */
+
+import java.util.List;
+
+import org.apache.maven.artifact.Artifact;
+import org.apache.maven.artifact.metadata.ArtifactMetadata;
+import org.apache.maven.artifact.repository.ArtifactRepository;
+import org.apache.maven.artifact.repository.ArtifactRepositoryPolicy;
+import org.apache.maven.artifact.repository.Authentication;
+import org.apache.maven.artifact.repository.layout.ArtifactRepositoryLayout;
+import org.apache.maven.repository.Proxy;
+import org.sonatype.aether.repository.RemoteRepository;
+import org.sonatype.aether.repository.RepositoryPolicy;
+
+/**
+ * ArtifactRepository wrapper around {@link RemoteRepository}
+ * 
+ * @author Robert Scholte
+ *
+ */
+class Maven30ArtifactRepositoryAdapter implements ArtifactRepository
+{
+    
+    private RemoteRepository remoteRepository;
+
+    /**
+     * @param remoteRepository {@link RemoteRepository}
+     */
+    Maven30ArtifactRepositoryAdapter( RemoteRepository remoteRepository )
+    {
+        this.remoteRepository = remoteRepository;
+    }
+
+    @Override
+    public String pathOf( Artifact artifact )
+    {
+        throw new UnsupportedOperationException();
+    }
+
+    @Override
+    public String pathOfRemoteRepositoryMetadata( ArtifactMetadata artifactMetadata )
+    {
+        throw new UnsupportedOperationException();
+    }
+
+    @Override
+    public String pathOfLocalRepositoryMetadata( ArtifactMetadata metadata, ArtifactRepository repository )
+    {
+        throw new UnsupportedOperationException();
+    }
+
+    @Override
+    public String getUrl()
+    {
+        return remoteRepository.getUrl();
+    }
+
+    @Override
+    public void setUrl( String url )
+    {
+        throw new UnsupportedOperationException();
+    }
+
+    @Override
+    public String getBasedir()
+    {
+        throw new UnsupportedOperationException();
+    }
+
+    @Override
+    public String getProtocol()
+    {
+        throw new UnsupportedOperationException();
+    }
+
+    @Override
+    public String getId()
+    {
+        return remoteRepository.getId();
+    }
+
+    @Override
+    public void setId( String id )
+    {
+        throw new UnsupportedOperationException();
+    }
+
+    @Override
+    public ArtifactRepositoryPolicy getSnapshots()
+    {
+        throw new UnsupportedOperationException();
+    }
+
+    @Override
+    public void setSnapshotUpdatePolicy( ArtifactRepositoryPolicy policy )
+    {
+        throw new UnsupportedOperationException();
+    }
+
+    @Override
+    public ArtifactRepositoryPolicy getReleases()
+    {
+        throw new UnsupportedOperationException();
+    }
+
+    @Override
+    public void setReleaseUpdatePolicy( ArtifactRepositoryPolicy policy )
+    {
+        throw new UnsupportedOperationException();
+    }
+
+    @Override
+    public ArtifactRepositoryLayout getLayout()
+    {
+        throw new UnsupportedOperationException();
+    }
+
+    @Override
+    public void setLayout( ArtifactRepositoryLayout layout )
+    {
+        throw new UnsupportedOperationException();
+    }
+
+    @Override
+    public String getKey()
+    {
+        throw new UnsupportedOperationException();
+    }
+
+    @Override
+    public boolean isUniqueVersion()
+    {
+        throw new UnsupportedOperationException();
+    }
+
+    @Override
+    public boolean isBlacklisted()
+    {
+        throw new UnsupportedOperationException();
+    }
+
+    @Override
+    public void setBlacklisted( boolean blackListed )
+    {
+        throw new UnsupportedOperationException();
+    }
+
+    @Override
+    public Artifact find( Artifact artifact )
+    {
+        throw new UnsupportedOperationException();
+    }
+
+    @Override
+    public List<String> findVersions( Artifact artifact )
+    {
+        throw new UnsupportedOperationException();
+    }
+
+    @Override
+    public boolean isProjectAware()
+    {
+        throw new UnsupportedOperationException();
+    }
+
+    @Override
+    public void setAuthentication( Authentication authentication )
+    {
+        throw new UnsupportedOperationException();
+    }
+
+    @Override
+    public Authentication getAuthentication()
+    {
+        throw new UnsupportedOperationException();
+    }
+
+    @Override
+    public void setProxy( Proxy proxy )
+    {
+        throw new UnsupportedOperationException();
+    }
+
+    @Override
+    public Proxy getProxy()
+    {
+        throw new UnsupportedOperationException();
+    }
+
+    @Override
+    public String toString()
+    {
+        StringBuilder sb = new StringBuilder();
+
+        sb.append( "       id: " ).append( getId() ).append( "\n" );
+        sb.append( "      url: " ).append( getUrl() ).append( "\n" );
+        sb.append( "   layout: " ).append( "default" ).append( "\n" );
+
+        RepositoryPolicy snapshotPolicy = remoteRepository.getPolicy( true ); 
+        sb.append( "snapshots: [enabled => " ).append( snapshotPolicy.isEnabled() );
+        sb.append( ", update => " ).append( snapshotPolicy.getUpdatePolicy() ).append( "]\n" );
+
+        RepositoryPolicy releasePolicy = remoteRepository.getPolicy( false ); 
+        sb.append( " releases: [enabled => " ).append( releasePolicy.isEnabled() );
+        sb.append( ", update => " ).append( releasePolicy.getUpdatePolicy() ).append( "]\n" );
+
+        return sb.toString();
+    }
+    
+    
+    @Override
+    public int hashCode()
+    {
+        return remoteRepository.hashCode();
+    }
+
+    @Override
+    public boolean equals( Object obj )
+    {
+        if ( this == obj )
+        {
+            return true;
+        }
+        if ( obj == null )
+        {
+            return false;
+        }
+        if ( getClass() != obj.getClass() )
+        {
+            return false;
+        }
+        
+        Maven30ArtifactRepositoryAdapter other = (Maven30ArtifactRepositoryAdapter) obj;
+        if ( remoteRepository == null )
+        {
+            if ( other.remoteRepository != null )
+            {
+                return false;
+            }
+        }
+        else if ( !remoteRepository.equals( other.remoteRepository ) )
+        {
+            return false;
+        }
+        return true;
+    }
+}
diff --git a/src/main/java/org/apache/maven/shared/transfer/dependencies/collect/internal/Maven30CollectorResult.java b/maven-3.0.x/src/main/java/org/apache/maven/shared/transfer/dependencies/collect/internal/Maven30CollectorResult.java
similarity index 96%
copy from src/main/java/org/apache/maven/shared/transfer/dependencies/collect/internal/Maven30CollectorResult.java
copy to maven-3.0.x/src/main/java/org/apache/maven/shared/transfer/dependencies/collect/internal/Maven30CollectorResult.java
index 081dd66..926bfe6 100644
--- a/src/main/java/org/apache/maven/shared/transfer/dependencies/collect/internal/Maven30CollectorResult.java
+++ b/maven-3.0.x/src/main/java/org/apache/maven/shared/transfer/dependencies/collect/internal/Maven30CollectorResult.java
@@ -1,85 +1,85 @@
-package org.apache.maven.shared.transfer.dependencies.collect.internal;
-
-/*
- * 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.
- */
-
-import java.util.ArrayList;
-import java.util.HashSet;
-import java.util.List;
-import java.util.Set;
-
-import org.apache.maven.artifact.repository.ArtifactRepository;
-import org.apache.maven.shared.transfer.dependencies.collect.CollectorResult;
-import org.sonatype.aether.collection.CollectResult;
-import org.sonatype.aether.graph.DependencyNode;
-import org.sonatype.aether.graph.DependencyVisitor;
-import org.sonatype.aether.repository.RemoteRepository;
-
-/**
- * CollectorResult wrapper around {@link CollectResult} 
- * 
- * @author Robert Scholte
- *
- */
-class Maven30CollectorResult implements CollectorResult
-{
-    private final CollectResult collectResult;
-    
-    /**
-     * @param collectResult {@link CollectorResult}
-     */
-    Maven30CollectorResult( CollectResult collectResult )
-    {
-        this.collectResult = collectResult;
-    }
-
-    @Override
-    public List<ArtifactRepository> getRemoteRepositories()
-    {
-        final Set<RemoteRepository> aetherRepositories = new HashSet<>();
-        
-        DependencyVisitor visitor = new DependencyVisitor()
-        {
-            @Override
-            public boolean visitEnter( DependencyNode node )
-            {
-                aetherRepositories.addAll( node.getRepositories() );
-                return true;
-            }
-            
-            @Override
-            public boolean visitLeave( DependencyNode node )
-            {
-                return true;
-            }
-        };
-        
-        collectResult.getRoot().accept( visitor );
-        
-        List<ArtifactRepository> mavenRepositories = new ArrayList<>( aetherRepositories.size() );
-        
-        for ( RemoteRepository aetherRepository : aetherRepositories )
-        {
-            mavenRepositories.add( new Maven30ArtifactRepositoryAdapter( aetherRepository ) );
-        }
-        
-        return mavenRepositories;
-    }
-
-}
+package org.apache.maven.shared.transfer.dependencies.collect.internal;
+
+/*
+ * 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.
+ */
+
+import java.util.ArrayList;
+import java.util.HashSet;
+import java.util.List;
+import java.util.Set;
+
+import org.apache.maven.artifact.repository.ArtifactRepository;
+import org.apache.maven.shared.transfer.dependencies.collect.CollectorResult;
+import org.sonatype.aether.collection.CollectResult;
+import org.sonatype.aether.graph.DependencyNode;
+import org.sonatype.aether.graph.DependencyVisitor;
+import org.sonatype.aether.repository.RemoteRepository;
+
+/**
+ * CollectorResult wrapper around {@link CollectResult} 
+ * 
+ * @author Robert Scholte
+ *
+ */
+class Maven30CollectorResult implements CollectorResult
+{
+    private final CollectResult collectResult;
+    
+    /**
+     * @param collectResult {@link CollectorResult}
+     */
+    Maven30CollectorResult( CollectResult collectResult )
+    {
+        this.collectResult = collectResult;
+    }
+
+    @Override
+    public List<ArtifactRepository> getRemoteRepositories()
+    {
+        final Set<RemoteRepository> aetherRepositories = new HashSet<>();
+        
+        DependencyVisitor visitor = new DependencyVisitor()
+        {
+            @Override
+            public boolean visitEnter( DependencyNode node )
+            {
+                aetherRepositories.addAll( node.getRepositories() );
+                return true;
+            }
+            
+            @Override
+            public boolean visitLeave( DependencyNode node )
+            {
+                return true;
+            }
+        };
+        
+        collectResult.getRoot().accept( visitor );
+        
+        List<ArtifactRepository> mavenRepositories = new ArrayList<>( aetherRepositories.size() );
+        
+        for ( RemoteRepository aetherRepository : aetherRepositories )
+        {
+            mavenRepositories.add( new Maven30ArtifactRepositoryAdapter( aetherRepository ) );
+        }
+        
+        return mavenRepositories;
+    }
+
+}
diff --git a/src/main/java/org/apache/maven/shared/transfer/dependencies/collect/internal/Maven30DependencyCollector.java b/maven-3.0.x/src/main/java/org/apache/maven/shared/transfer/dependencies/collect/internal/Maven30DependencyCollector.java
similarity index 97%
copy from src/main/java/org/apache/maven/shared/transfer/dependencies/collect/internal/Maven30DependencyCollector.java
copy to maven-3.0.x/src/main/java/org/apache/maven/shared/transfer/dependencies/collect/internal/Maven30DependencyCollector.java
index 8a85003..aa54ac1 100644
--- a/src/main/java/org/apache/maven/shared/transfer/dependencies/collect/internal/Maven30DependencyCollector.java
+++ b/maven-3.0.x/src/main/java/org/apache/maven/shared/transfer/dependencies/collect/internal/Maven30DependencyCollector.java
@@ -1,160 +1,160 @@
-package org.apache.maven.shared.transfer.dependencies.collect.internal;
-
-/*
- * 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.
- */
-
-import java.util.ArrayList;
-import java.util.List;
-
-import org.apache.maven.RepositoryUtils;
-import org.apache.maven.artifact.handler.ArtifactHandler;
-import org.apache.maven.artifact.handler.manager.ArtifactHandlerManager;
-import org.apache.maven.model.Model;
-import org.apache.maven.shared.transfer.dependencies.DependableCoordinate;
-import org.apache.maven.shared.transfer.dependencies.collect.CollectorResult;
-import org.apache.maven.shared.transfer.dependencies.collect.DependencyCollector;
-import org.apache.maven.shared.transfer.dependencies.collect.DependencyCollectorException;
-import org.sonatype.aether.RepositorySystem;
-import org.sonatype.aether.RepositorySystemSession;
-import org.sonatype.aether.artifact.Artifact;
-import org.sonatype.aether.artifact.ArtifactTypeRegistry;
-import org.sonatype.aether.collection.CollectRequest;
-import org.sonatype.aether.collection.DependencyCollectionException;
-import org.sonatype.aether.graph.Dependency;
-import org.sonatype.aether.repository.RemoteRepository;
-import org.sonatype.aether.util.artifact.DefaultArtifact;
-
-/**
- * Maven 3.0 implementation of the {@link DependencyCollector}
- *
- * @author Robert Scholte
- */
-class Maven30DependencyCollector implements MavenDependencyCollector
-{
-    private final RepositorySystem repositorySystem;
-
-    private final ArtifactHandlerManager artifactHandlerManager;
-
-    private final RepositorySystemSession session;
-
-    private final List<RemoteRepository> aetherRepositories;
-
-    Maven30DependencyCollector( RepositorySystem repositorySystem, ArtifactHandlerManager artifactHandlerManager,
-            RepositorySystemSession session, List<RemoteRepository> aetherRepositories )
-    {
-        super();
-        this.repositorySystem = repositorySystem;
-        this.artifactHandlerManager = artifactHandlerManager;
-        this.session = session;
-        this.aetherRepositories = aetherRepositories;
-    }
-
-    private static Dependency toDependency( org.apache.maven.model.Dependency mavenDependency,
-            ArtifactTypeRegistry typeRegistry ) throws DependencyCollectorException
-    {
-        Class<?>[] argClasses = new Class<?>[] {org.apache.maven.model.Dependency.class, ArtifactTypeRegistry.class};
-
-        Object[] args = new Object[] {mavenDependency, typeRegistry};
-
-        return Invoker.invoke( RepositoryUtils.class, "toDependency", argClasses, args );
-    }
-
-    @Override
-    public CollectorResult collectDependencies( org.apache.maven.model.Dependency root )
-            throws DependencyCollectorException
-    {
-        ArtifactTypeRegistry typeRegistry = Invoker.invoke( RepositoryUtils.class, "newArtifactTypeRegistry",
-                ArtifactHandlerManager.class, artifactHandlerManager );
-
-        CollectRequest request = new CollectRequest();
-        request.setRoot( toDependency( root, typeRegistry ) );
-
-        return collectDependencies( request );
-    }
-
-    @Override
-    public CollectorResult collectDependencies( DependableCoordinate root ) throws DependencyCollectorException
-    {
-        ArtifactHandler artifactHandler = artifactHandlerManager.getArtifactHandler( root.getType() );
-
-        String extension = artifactHandler != null ? artifactHandler.getExtension() : null;
-
-        Artifact aetherArtifact = new DefaultArtifact( root.getGroupId(), root.getArtifactId(), root.getClassifier(),
-                extension, root.getVersion() );
-
-        CollectRequest request = new CollectRequest();
-        request.setRoot( new Dependency( aetherArtifact, null ) );
-
-        return collectDependencies( request );
-    }
-
-    @Override
-    public CollectorResult collectDependencies( Model root ) throws DependencyCollectorException
-    {
-        // Are there examples where packaging and type are NOT in sync
-        ArtifactHandler artifactHandler = artifactHandlerManager.getArtifactHandler( root.getPackaging() );
-
-        String extension = artifactHandler != null ? artifactHandler.getExtension() : null;
-
-        Artifact aetherArtifact = new DefaultArtifact( root.getGroupId(), root.getArtifactId(), extension,
-                root.getVersion() );
-
-        CollectRequest request = new CollectRequest();
-        request.setRoot( new Dependency( aetherArtifact, null ) );
-
-        ArtifactTypeRegistry typeRegistry = Invoker.invoke( RepositoryUtils.class, "newArtifactTypeRegistry",
-                ArtifactHandlerManager.class, artifactHandlerManager );
-
-        List<Dependency> aetherDependencies = new ArrayList<>( root.getDependencies().size() );
-        for ( org.apache.maven.model.Dependency mavenDependency : root.getDependencies() )
-        {
-            aetherDependencies.add( toDependency( mavenDependency, typeRegistry ) );
-        }
-        request.setDependencies( aetherDependencies );
-
-        if ( root.getDependencyManagement() != null )
-        {
-            List<Dependency> aetherManagerDependencies = new ArrayList<>(
-                    root.getDependencyManagement().getDependencies().size() );
-
-            for ( org.apache.maven.model.Dependency mavenDependency : root.getDependencyManagement().getDependencies() )
-            {
-                aetherManagerDependencies.add( toDependency( mavenDependency, typeRegistry ) );
-            }
-
-            request.setManagedDependencies( aetherManagerDependencies );
-        }
-
-        return collectDependencies( request );
-    }
-
-    private CollectorResult collectDependencies( CollectRequest request ) throws DependencyCollectorException
-    {
-        request.setRepositories( aetherRepositories );
-
-        try
-        {
-            return new Maven30CollectorResult( repositorySystem.collectDependencies( session, request ) );
-        }
-        catch ( DependencyCollectionException e )
-        {
-            throw new DependencyCollectorException( e.getMessage(), e );
-        }
-    }
-}
+package org.apache.maven.shared.transfer.dependencies.collect.internal;
+
+/*
+ * 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.
+ */
+
+import java.util.ArrayList;
+import java.util.List;
+
+import org.apache.maven.RepositoryUtils;
+import org.apache.maven.artifact.handler.ArtifactHandler;
+import org.apache.maven.artifact.handler.manager.ArtifactHandlerManager;
+import org.apache.maven.model.Model;
+import org.apache.maven.shared.transfer.dependencies.DependableCoordinate;
+import org.apache.maven.shared.transfer.dependencies.collect.CollectorResult;
+import org.apache.maven.shared.transfer.dependencies.collect.DependencyCollector;
+import org.apache.maven.shared.transfer.dependencies.collect.DependencyCollectorException;
+import org.sonatype.aether.RepositorySystem;
+import org.sonatype.aether.RepositorySystemSession;
+import org.sonatype.aether.artifact.Artifact;
+import org.sonatype.aether.artifact.ArtifactTypeRegistry;
+import org.sonatype.aether.collection.CollectRequest;
+import org.sonatype.aether.collection.DependencyCollectionException;
+import org.sonatype.aether.graph.Dependency;
+import org.sonatype.aether.repository.RemoteRepository;
+import org.sonatype.aether.util.artifact.DefaultArtifact;
+
+/**
+ * Maven 3.0 implementation of the {@link DependencyCollector}
+ *
+ * @author Robert Scholte
+ */
+class Maven30DependencyCollector implements MavenDependencyCollector
+{
+    private final RepositorySystem repositorySystem;
+
+    private final ArtifactHandlerManager artifactHandlerManager;
+
+    private final RepositorySystemSession session;
+
+    private final List<RemoteRepository> aetherRepositories;
+
+    Maven30DependencyCollector( RepositorySystem repositorySystem, ArtifactHandlerManager artifactHandlerManager,
+            RepositorySystemSession session, List<RemoteRepository> aetherRepositories )
+    {
+        super();
+        this.repositorySystem = repositorySystem;
+        this.artifactHandlerManager = artifactHandlerManager;
+        this.session = session;
+        this.aetherRepositories = aetherRepositories;
+    }
+
+    private static Dependency toDependency( org.apache.maven.model.Dependency mavenDependency,
+            ArtifactTypeRegistry typeRegistry ) throws DependencyCollectorException
+    {
+        Class<?>[] argClasses = new Class<?>[] {org.apache.maven.model.Dependency.class, ArtifactTypeRegistry.class};
+
+        Object[] args = new Object[] {mavenDependency, typeRegistry};
+
+        return Invoker.invoke( RepositoryUtils.class, "toDependency", argClasses, args );
+    }
+
+    @Override
+    public CollectorResult collectDependencies( org.apache.maven.model.Dependency root )
+            throws DependencyCollectorException
+    {
+        ArtifactTypeRegistry typeRegistry = Invoker.invoke( RepositoryUtils.class, "newArtifactTypeRegistry",
+                ArtifactHandlerManager.class, artifactHandlerManager );
+
+        CollectRequest request = new CollectRequest();
+        request.setRoot( toDependency( root, typeRegistry ) );
+
+        return collectDependencies( request );
+    }
+
+    @Override
+    public CollectorResult collectDependencies( DependableCoordinate root ) throws DependencyCollectorException
+    {
+        ArtifactHandler artifactHandler = artifactHandlerManager.getArtifactHandler( root.getType() );
+
+        String extension = artifactHandler != null ? artifactHandler.getExtension() : null;
+
+        Artifact aetherArtifact = new DefaultArtifact( root.getGroupId(), root.getArtifactId(), root.getClassifier(),
+                extension, root.getVersion() );
+
+        CollectRequest request = new CollectRequest();
+        request.setRoot( new Dependency( aetherArtifact, null ) );
+
+        return collectDependencies( request );
+    }
+
+    @Override
+    public CollectorResult collectDependencies( Model root ) throws DependencyCollectorException
+    {
+        // Are there examples where packaging and type are NOT in sync
+        ArtifactHandler artifactHandler = artifactHandlerManager.getArtifactHandler( root.getPackaging() );
+
+        String extension = artifactHandler != null ? artifactHandler.getExtension() : null;
+
+        Artifact aetherArtifact = new DefaultArtifact( root.getGroupId(), root.getArtifactId(), extension,
+                root.getVersion() );
+
+        CollectRequest request = new CollectRequest();
+        request.setRoot( new Dependency( aetherArtifact, null ) );
+
+        ArtifactTypeRegistry typeRegistry = Invoker.invoke( RepositoryUtils.class, "newArtifactTypeRegistry",
+                ArtifactHandlerManager.class, artifactHandlerManager );
+
+        List<Dependency> aetherDependencies = new ArrayList<>( root.getDependencies().size() );
+        for ( org.apache.maven.model.Dependency mavenDependency : root.getDependencies() )
+        {
+            aetherDependencies.add( toDependency( mavenDependency, typeRegistry ) );
+        }
+        request.setDependencies( aetherDependencies );
+
+        if ( root.getDependencyManagement() != null )
+        {
+            List<Dependency> aetherManagerDependencies = new ArrayList<>(
+                    root.getDependencyManagement().getDependencies().size() );
+
+            for ( org.apache.maven.model.Dependency mavenDependency : root.getDependencyManagement().getDependencies() )
+            {
+                aetherManagerDependencies.add( toDependency( mavenDependency, typeRegistry ) );
+            }
+
+            request.setManagedDependencies( aetherManagerDependencies );
+        }
+
+        return collectDependencies( request );
+    }
+
+    private CollectorResult collectDependencies( CollectRequest request ) throws DependencyCollectorException
+    {
+        request.setRepositories( aetherRepositories );
+
+        try
+        {
+            return new Maven30CollectorResult( repositorySystem.collectDependencies( session, request ) );
+        }
+        catch ( DependencyCollectionException e )
+        {
+            throw new DependencyCollectorException( e.getMessage(), e );
+        }
+    }
+}
diff --git a/src/main/java/org/apache/maven/shared/transfer/dependencies/collect/internal/Maven30DependencyNodeAdapter.java b/maven-3.0.x/src/main/java/org/apache/maven/shared/transfer/dependencies/collect/internal/Maven30DependencyNodeAdapter.java
similarity index 100%
copy from src/main/java/org/apache/maven/shared/transfer/dependencies/collect/internal/Maven30DependencyNodeAdapter.java
copy to maven-3.0.x/src/main/java/org/apache/maven/shared/transfer/dependencies/collect/internal/Maven30DependencyNodeAdapter.java
diff --git a/src/main/java/org/apache/maven/shared/transfer/dependencies/collect/internal/Maven31ArtifactRepositoryAdapter.java b/maven-3.0.x/src/main/java/org/apache/maven/shared/transfer/dependencies/collect/internal/Maven31ArtifactRepositoryAdapter.java
similarity index 96%
copy from src/main/java/org/apache/maven/shared/transfer/dependencies/collect/internal/Maven31ArtifactRepositoryAdapter.java
copy to maven-3.0.x/src/main/java/org/apache/maven/shared/transfer/dependencies/collect/internal/Maven31ArtifactRepositoryAdapter.java
index 854cf4a..f450dfd 100644
--- a/src/main/java/org/apache/maven/shared/transfer/dependencies/collect/internal/Maven31ArtifactRepositoryAdapter.java
+++ b/maven-3.0.x/src/main/java/org/apache/maven/shared/transfer/dependencies/collect/internal/Maven31ArtifactRepositoryAdapter.java
@@ -1,266 +1,266 @@
-package org.apache.maven.shared.transfer.dependencies.collect.internal;
-
-/*
- * 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.
- */
-
-import java.util.List;
-
-import org.apache.maven.artifact.Artifact;
-import org.apache.maven.artifact.metadata.ArtifactMetadata;
-import org.apache.maven.artifact.repository.ArtifactRepository;
-import org.apache.maven.artifact.repository.ArtifactRepositoryPolicy;
-import org.apache.maven.artifact.repository.Authentication;
-import org.apache.maven.artifact.repository.layout.ArtifactRepositoryLayout;
-import org.apache.maven.repository.Proxy;
-import org.eclipse.aether.repository.RemoteRepository;
-import org.eclipse.aether.repository.RepositoryPolicy;
-
-/**
- * ArtifactRepository wrapper around {@link RemoteRepository}
- * 
- * @author Robert Scholte
- *
- */
-class Maven31ArtifactRepositoryAdapter implements ArtifactRepository
-{
-    
-    private RemoteRepository remoteRepository;
-
-    /**
-     * @param remoteRepository {@link RemoteRepository}
-     */
-    Maven31ArtifactRepositoryAdapter( RemoteRepository remoteRepository )
-    {
-        this.remoteRepository = remoteRepository;
-    }
-
-    @Override
-    public String pathOf( Artifact artifact )
-    {
-        throw new UnsupportedOperationException();
-    }
-
-    @Override
-    public String pathOfRemoteRepositoryMetadata( ArtifactMetadata artifactMetadata )
-    {
-        throw new UnsupportedOperationException();
-    }
-
-    @Override
-    public String pathOfLocalRepositoryMetadata( ArtifactMetadata metadata, ArtifactRepository repository )
-    {
-        throw new UnsupportedOperationException();
-    }
-
-    @Override
-    public String getUrl()
-    {
-        return remoteRepository.getUrl();
-    }
-
-    @Override
-    public void setUrl( String url )
-    {
-        throw new UnsupportedOperationException();
-    }
-
-    @Override
-    public String getBasedir()
-    {
-        throw new UnsupportedOperationException();
-    }
-
-    @Override
-    public String getProtocol()
-    {
-        throw new UnsupportedOperationException();
-    }
-
-    @Override
-    public String getId()
-    {
-        return remoteRepository.getId();
-    }
-
-    @Override
-    public void setId( String id )
-    {
-        throw new UnsupportedOperationException();
-    }
-
-    @Override
-    public ArtifactRepositoryPolicy getSnapshots()
-    {
-        throw new UnsupportedOperationException();
-    }
-
-    @Override
-    public void setSnapshotUpdatePolicy( ArtifactRepositoryPolicy policy )
-    {
-        throw new UnsupportedOperationException();
-    }
-
-    @Override
-    public ArtifactRepositoryPolicy getReleases()
-    {
-        throw new UnsupportedOperationException();
-    }
-
-    @Override
-    public void setReleaseUpdatePolicy( ArtifactRepositoryPolicy policy )
-    {
-        throw new UnsupportedOperationException();
-    }
-
-    @Override
-    public ArtifactRepositoryLayout getLayout()
-    {
-        throw new UnsupportedOperationException();
-    }
-
-    @Override
-    public void setLayout( ArtifactRepositoryLayout layout )
-    {
-        throw new UnsupportedOperationException();
-    }
-
-    @Override
-    public String getKey()
-    {
-        throw new UnsupportedOperationException();
-    }
-
-    @Override
-    public boolean isUniqueVersion()
-    {
-        throw new UnsupportedOperationException();
-    }
-
-    @Override
-    public boolean isBlacklisted()
-    {
-        throw new UnsupportedOperationException();
-    }
-
-    @Override
-    public void setBlacklisted( boolean blackListed )
-    {
-        throw new UnsupportedOperationException();
-    }
-
-    @Override
-    public Artifact find( Artifact artifact )
-    {
-        throw new UnsupportedOperationException();
-    }
-
-    @Override
-    public List<String> findVersions( Artifact artifact )
-    {
-        throw new UnsupportedOperationException();
-    }
-
-    @Override
-    public boolean isProjectAware()
-    {
-        throw new UnsupportedOperationException();
-    }
-
-    @Override
-    public void setAuthentication( Authentication authentication )
-    {
-        throw new UnsupportedOperationException();
-    }
-
-    @Override
-    public Authentication getAuthentication()
-    {
-        throw new UnsupportedOperationException();
-    }
-
-    @Override
-    public void setProxy( Proxy proxy )
-    {
-        throw new UnsupportedOperationException();
-    }
-
-    @Override
-    public Proxy getProxy()
-    {
-        throw new UnsupportedOperationException();
-    }
-
-    @Override
-    public String toString()
-    {
-        StringBuilder sb = new StringBuilder();
-
-        sb.append( "       id: " ).append( getId() ).append( "\n" );
-        sb.append( "      url: " ).append( getUrl() ).append( "\n" );
-        sb.append( "   layout: " ).append( "default" ).append( "\n" );
-
-        RepositoryPolicy snapshotPolicy = remoteRepository.getPolicy( true ); 
-        sb.append( "snapshots: [enabled => " ).append( snapshotPolicy.isEnabled() );
-        sb.append( ", update => " ).append( snapshotPolicy.getUpdatePolicy() ).append( "]\n" );
-
-        RepositoryPolicy releasePolicy = remoteRepository.getPolicy( false ); 
-        sb.append( " releases: [enabled => " ).append( releasePolicy.isEnabled() );
-        sb.append( ", update => " ).append( releasePolicy.getUpdatePolicy() ).append( "]\n" );
-
-        return sb.toString();
-    }
-    
-    
-    @Override
-    public int hashCode()
-    {
-        return remoteRepository.hashCode();
-    }
-
-    @Override
-    public boolean equals( Object obj )
-    {
-        if ( this == obj )
-        {
-            return true;
-        }
-        if ( obj == null )
-        {
-            return false;
-        }
-        if ( getClass() != obj.getClass() )
-        {
-            return false;
-        }
-        
-        Maven31ArtifactRepositoryAdapter other = (Maven31ArtifactRepositoryAdapter) obj;
-        if ( remoteRepository == null )
-        {
-            if ( other.remoteRepository != null )
-            {
-                return false;
-            }
-        }
-        else if ( !remoteRepository.equals( other.remoteRepository ) )
-        {
-            return false;
-        }
-        return true;
-    }
-}
+package org.apache.maven.shared.transfer.dependencies.collect.internal;
+
+/*
+ * 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.
+ */
+
+import java.util.List;
+
+import org.apache.maven.artifact.Artifact;
+import org.apache.maven.artifact.metadata.ArtifactMetadata;
+import org.apache.maven.artifact.repository.ArtifactRepository;
+import org.apache.maven.artifact.repository.ArtifactRepositoryPolicy;
+import org.apache.maven.artifact.repository.Authentication;
+import org.apache.maven.artifact.repository.layout.ArtifactRepositoryLayout;
+import org.apache.maven.repository.Proxy;
+import org.eclipse.aether.repository.RemoteRepository;
+import org.eclipse.aether.repository.RepositoryPolicy;
+
+/**
+ * ArtifactRepository wrapper around {@link RemoteRepository}
+ * 
+ * @author Robert Scholte
+ *
+ */
+class Maven31ArtifactRepositoryAdapter implements ArtifactRepository
+{
+    
+    private RemoteRepository remoteRepository;
+
+    /**
+     * @param remoteRepository {@link RemoteRepository}
+     */
+    Maven31ArtifactRepositoryAdapter( RemoteRepository remoteRepository )
+    {
+        this.remoteRepository = remoteRepository;
+    }
+
+    @Override
+    public String pathOf( Artifact artifact )
+    {
+        throw new UnsupportedOperationException();
+    }
+
+    @Override
+    public String pathOfRemoteRepositoryMetadata( ArtifactMetadata artifactMetadata )
+    {
+        throw new UnsupportedOperationException();
+    }
+
+    @Override
+    public String pathOfLocalRepositoryMetadata( ArtifactMetadata metadata, ArtifactRepository repository )
+    {
+        throw new UnsupportedOperationException();
+    }
+
+    @Override
+    public String getUrl()
+    {
+        return remoteRepository.getUrl();
+    }
+
+    @Override
+    public void setUrl( String url )
+    {
+        throw new UnsupportedOperationException();
+    }
+
+    @Override
+    public String getBasedir()
+    {
+        throw new UnsupportedOperationException();
+    }
+
+    @Override
+    public String getProtocol()
+    {
+        throw new UnsupportedOperationException();
+    }
+
+    @Override
+    public String getId()
+    {
+        return remoteRepository.getId();
+    }
+
+    @Override
+    public void setId( String id )
+    {
+        throw new UnsupportedOperationException();
+    }
+
+    @Override
+    public ArtifactRepositoryPolicy getSnapshots()
+    {
+        throw new UnsupportedOperationException();
+    }
+
+    @Override
+    public void setSnapshotUpdatePolicy( ArtifactRepositoryPolicy policy )
+    {
+        throw new UnsupportedOperationException();
+    }
+
+    @Override
+    public ArtifactRepositoryPolicy getReleases()
+    {
+        throw new UnsupportedOperationException();
+    }
+
+    @Override
+    public void setReleaseUpdatePolicy( ArtifactRepositoryPolicy policy )
+    {
+        throw new UnsupportedOperationException();
+    }
+
+    @Override
+    public ArtifactRepositoryLayout getLayout()
+    {
+        throw new UnsupportedOperationException();
+    }
+
+    @Override
+    public void setLayout( ArtifactRepositoryLayout layout )
+    {
+        throw new UnsupportedOperationException();
+    }
+
+    @Override
+    public String getKey()
+    {
+        throw new UnsupportedOperationException();
+    }
+
+    @Override
+    public boolean isUniqueVersion()
+    {
+        throw new UnsupportedOperationException();
+    }
+
+    @Override
+    public boolean isBlacklisted()
+    {
+        throw new UnsupportedOperationException();
+    }
+
+    @Override
+    public void setBlacklisted( boolean blackListed )
+    {
+        throw new UnsupportedOperationException();
+    }
+
+    @Override
+    public Artifact find( Artifact artifact )
+    {
+        throw new UnsupportedOperationException();
+    }
+
+    @Override
+    public List<String> findVersions( Artifact artifact )
+    {
+        throw new UnsupportedOperationException();
+    }
+
+    @Override
+    public boolean isProjectAware()
+    {
+        throw new UnsupportedOperationException();
+    }
+
+    @Override
+    public void setAuthentication( Authentication authentication )
+    {
+        throw new UnsupportedOperationException();
+    }
+
+    @Override
+    public Authentication getAuthentication()
+    {
+        throw new UnsupportedOperationException();
+    }
+
+    @Override
+    public void setProxy( Proxy proxy )
+    {
+        throw new UnsupportedOperationException();
+    }
+
+    @Override
+    public Proxy getProxy()
+    {
+        throw new UnsupportedOperationException();
+    }
+
+    @Override
+    public String toString()
+    {
+        StringBuilder sb = new StringBuilder();
+
+        sb.append( "       id: " ).append( getId() ).append( "\n" );
+        sb.append( "      url: " ).append( getUrl() ).append( "\n" );
+        sb.append( "   layout: " ).append( "default" ).append( "\n" );
+
+        RepositoryPolicy snapshotPolicy = remoteRepository.getPolicy( true ); 
+        sb.append( "snapshots: [enabled => " ).append( snapshotPolicy.isEnabled() );
+        sb.append( ", update => " ).append( snapshotPolicy.getUpdatePolicy() ).append( "]\n" );
+
+        RepositoryPolicy releasePolicy = remoteRepository.getPolicy( false ); 
+        sb.append( " releases: [enabled => " ).append( releasePolicy.isEnabled() );
+        sb.append( ", update => " ).append( releasePolicy.getUpdatePolicy() ).append( "]\n" );
+
+        return sb.toString();
+    }
+    
+    
+    @Override
+    public int hashCode()
+    {
+        return remoteRepository.hashCode();
+    }
+
+    @Override
+    public boolean equals( Object obj )
+    {
+        if ( this == obj )
+        {
+            return true;
+        }
+        if ( obj == null )
+        {
+            return false;
+        }
+        if ( getClass() != obj.getClass() )
+        {
+            return false;
+        }
+        
+        Maven31ArtifactRepositoryAdapter other = (Maven31ArtifactRepositoryAdapter) obj;
+        if ( remoteRepository == null )
+        {
+            if ( other.remoteRepository != null )
+            {
+                return false;
+            }
+        }
+        else if ( !remoteRepository.equals( other.remoteRepository ) )
+        {
+            return false;
+        }
+        return true;
+    }
+}
diff --git a/src/main/java/org/apache/maven/shared/transfer/dependencies/collect/internal/Maven31CollectorResult.java b/maven-3.0.x/src/main/java/org/apache/maven/shared/transfer/dependencies/collect/internal/Maven31CollectorResult.java
similarity index 96%
copy from src/main/java/org/apache/maven/shared/transfer/dependencies/collect/internal/Maven31CollectorResult.java
copy to maven-3.0.x/src/main/java/org/apache/maven/shared/transfer/dependencies/collect/internal/Maven31CollectorResult.java
index dbf8717..c1a4e6f 100644
--- a/src/main/java/org/apache/maven/shared/transfer/dependencies/collect/internal/Maven31CollectorResult.java
+++ b/maven-3.0.x/src/main/java/org/apache/maven/shared/transfer/dependencies/collect/internal/Maven31CollectorResult.java
@@ -1,85 +1,85 @@
-package org.apache.maven.shared.transfer.dependencies.collect.internal;
-
-/*
- * 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.
- */
-
-import java.util.ArrayList;
-import java.util.HashSet;
-import java.util.List;
-import java.util.Set;
-
-import org.apache.maven.artifact.repository.ArtifactRepository;
-import org.apache.maven.shared.transfer.dependencies.collect.CollectorResult;
-import org.eclipse.aether.collection.CollectResult;
-import org.eclipse.aether.graph.DependencyNode;
-import org.eclipse.aether.graph.DependencyVisitor;
-import org.eclipse.aether.repository.RemoteRepository;
-
-/**
- * CollectorResult wrapper around {@link CollectResult}
- * 
- * @author Robert Scholte
- *
- */
-class Maven31CollectorResult implements CollectorResult
-{
-    private final CollectResult collectResult;
-    
-    /**
-     * @param collectResult {@link CollectorResult}
-     */
-    Maven31CollectorResult( CollectResult collectResult )
-    {
-        this.collectResult = collectResult;
-    }
-
-    @Override
-    public List<ArtifactRepository> getRemoteRepositories()
-    {
-        final Set<RemoteRepository> aetherRepositories = new HashSet<>();
-        
-        DependencyVisitor visitor = new DependencyVisitor()
-        {
-            @Override
-            public boolean visitEnter( DependencyNode node )
-            {
-                aetherRepositories.addAll( node.getRepositories() );
-                return true;
-            }
-            
-            @Override
-            public boolean visitLeave( DependencyNode node )
-            {
-                return true;
-            }
-        };
-        
-        collectResult.getRoot().accept( visitor );
-        
-        List<ArtifactRepository> mavenRepositories = new ArrayList<>( aetherRepositories.size() );
-        
-        for ( RemoteRepository aetherRepository : aetherRepositories )
-        {
-            mavenRepositories.add( new Maven31ArtifactRepositoryAdapter( aetherRepository ) );
-        }
-        
-        return mavenRepositories;
-    }
-
-}
+package org.apache.maven.shared.transfer.dependencies.collect.internal;
+
+/*
+ * 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.
+ */
+
+import java.util.ArrayList;
+import java.util.HashSet;
+import java.util.List;
+import java.util.Set;
+
+import org.apache.maven.artifact.repository.ArtifactRepository;
+import org.apache.maven.shared.transfer.dependencies.collect.CollectorResult;
+import org.eclipse.aether.collection.CollectResult;
+import org.eclipse.aether.graph.DependencyNode;
+import org.eclipse.aether.graph.DependencyVisitor;
+import org.eclipse.aether.repository.RemoteRepository;
+
+/**
+ * CollectorResult wrapper around {@link CollectResult}
+ * 
+ * @author Robert Scholte
+ *
+ */
+class Maven31CollectorResult implements CollectorResult
+{
+    private final CollectResult collectResult;
+    
+    /**
+     * @param collectResult {@link CollectorResult}
+     */
+    Maven31CollectorResult( CollectResult collectResult )
+    {
+        this.collectResult = collectResult;
+    }
+
+    @Override
+    public List<ArtifactRepository> getRemoteRepositories()
+    {
+        final Set<RemoteRepository> aetherRepositories = new HashSet<>();
+        
+        DependencyVisitor visitor = new DependencyVisitor()
+        {
+            @Override
+            public boolean visitEnter( DependencyNode node )
+            {
+                aetherRepositories.addAll( node.getRepositories() );
+                return true;
+            }
+            
+            @Override
+            public boolean visitLeave( DependencyNode node )
+            {
+                return true;
+            }
+        };
+        
+        collectResult.getRoot().accept( visitor );
+        
+        List<ArtifactRepository> mavenRepositories = new ArrayList<>( aetherRepositories.size() );
+        
+        for ( RemoteRepository aetherRepository : aetherRepositories )
+        {
+            mavenRepositories.add( new Maven31ArtifactRepositoryAdapter( aetherRepository ) );
+        }
+        
+        return mavenRepositories;
+    }
+
+}
diff --git a/src/main/java/org/apache/maven/shared/transfer/dependencies/collect/internal/Maven31DependencyCollector.java b/maven-3.0.x/src/main/java/org/apache/maven/shared/transfer/dependencies/collect/internal/Maven31DependencyCollector.java
similarity index 97%
copy from src/main/java/org/apache/maven/shared/transfer/dependencies/collect/internal/Maven31DependencyCollector.java
copy to maven-3.0.x/src/main/java/org/apache/maven/shared/transfer/dependencies/collect/internal/Maven31DependencyCollector.java
index 50f3700..1ca1920 100644
--- a/src/main/java/org/apache/maven/shared/transfer/dependencies/collect/internal/Maven31DependencyCollector.java
+++ b/maven-3.0.x/src/main/java/org/apache/maven/shared/transfer/dependencies/collect/internal/Maven31DependencyCollector.java
@@ -1,160 +1,160 @@
-package org.apache.maven.shared.transfer.dependencies.collect.internal;
-
-/*
- * 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.
- */
-
-import java.util.ArrayList;
-import java.util.List;
-
-import org.apache.maven.RepositoryUtils;
-import org.apache.maven.artifact.handler.ArtifactHandler;
-import org.apache.maven.artifact.handler.manager.ArtifactHandlerManager;
-import org.apache.maven.model.Model;
-import org.apache.maven.shared.transfer.dependencies.DependableCoordinate;
-import org.apache.maven.shared.transfer.dependencies.collect.CollectorResult;
-import org.apache.maven.shared.transfer.dependencies.collect.DependencyCollector;
-import org.apache.maven.shared.transfer.dependencies.collect.DependencyCollectorException;
-import org.eclipse.aether.RepositorySystem;
-import org.eclipse.aether.RepositorySystemSession;
-import org.eclipse.aether.artifact.Artifact;
-import org.eclipse.aether.artifact.ArtifactTypeRegistry;
-import org.eclipse.aether.artifact.DefaultArtifact;
-import org.eclipse.aether.collection.CollectRequest;
-import org.eclipse.aether.collection.DependencyCollectionException;
-import org.eclipse.aether.graph.Dependency;
-import org.eclipse.aether.repository.RemoteRepository;
-
-/**
- * Maven 3.1+ implementation of the {@link DependencyCollector}
- *
- * @author Robert Scholte
- */
-class Maven31DependencyCollector implements MavenDependencyCollector
-{
-    private final RepositorySystem repositorySystem;
-
-    private final ArtifactHandlerManager artifactHandlerManager;
-
-    private final RepositorySystemSession session;
-
-    private final List<RemoteRepository> aetherRepositories;
-
-    Maven31DependencyCollector( RepositorySystem repositorySystem, ArtifactHandlerManager artifactHandlerManager,
-            RepositorySystemSession session, List<RemoteRepository> aetherRepositories )
-    {
-        super();
-        this.repositorySystem = repositorySystem;
-        this.artifactHandlerManager = artifactHandlerManager;
-        this.session = session;
-        this.aetherRepositories = aetherRepositories;
-    }
-
-    private static Dependency toDependency( org.apache.maven.model.Dependency mavenDependency,
-            ArtifactTypeRegistry typeRegistry ) throws DependencyCollectorException
-    {
-        Class<?>[] argClasses = new Class<?>[] {org.apache.maven.model.Dependency.class, ArtifactTypeRegistry.class};
-
-        Object[] args = new Object[] {mavenDependency, typeRegistry};
-
-        return Invoker.invoke( RepositoryUtils.class, "toDependency", argClasses, args );
-    }
-
-    @Override
-    public CollectorResult collectDependencies( org.apache.maven.model.Dependency root )
-            throws DependencyCollectorException
-    {
-        ArtifactTypeRegistry typeRegistry = Invoker.invoke( RepositoryUtils.class, "newArtifactTypeRegistry",
-                ArtifactHandlerManager.class, artifactHandlerManager );
-
-        CollectRequest request = new CollectRequest();
-        request.setRoot( toDependency( root, typeRegistry ) );
-
-        return collectDependencies( request );
-    }
-
-    @Override
-    public CollectorResult collectDependencies( DependableCoordinate root ) throws DependencyCollectorException
-    {
-        ArtifactHandler artifactHandler = artifactHandlerManager.getArtifactHandler( root.getType() );
-
-        String extension = artifactHandler != null ? artifactHandler.getExtension() : null;
-
-        Artifact aetherArtifact = new DefaultArtifact( root.getGroupId(), root.getArtifactId(), root.getClassifier(),
-                extension, root.getVersion() );
-
-        CollectRequest request = new CollectRequest();
-        request.setRoot( new Dependency( aetherArtifact, null ) );
-
-        return collectDependencies( request );
-    }
-
-    @Override
-    public CollectorResult collectDependencies( Model root ) throws DependencyCollectorException
-    {
-        // Are there examples where packaging and type are NOT in sync
-        ArtifactHandler artifactHandler = artifactHandlerManager.getArtifactHandler( root.getPackaging() );
-
-        String extension = artifactHandler != null ? artifactHandler.getExtension() : null;
-
-        Artifact aetherArtifact = new DefaultArtifact( root.getGroupId(), root.getArtifactId(), extension,
-                root.getVersion() );
-
-        CollectRequest request = new CollectRequest();
-        request.setRoot( new Dependency( aetherArtifact, null ) );
-
-        ArtifactTypeRegistry typeRegistry = Invoker.invoke( RepositoryUtils.class, "newArtifactTypeRegistry",
-                ArtifactHandlerManager.class, artifactHandlerManager );
-
-        List<Dependency> aetherDependencies = new ArrayList<>( root.getDependencies().size() );
-        for ( org.apache.maven.model.Dependency mavenDependency : root.getDependencies() )
-        {
-            aetherDependencies.add( toDependency( mavenDependency, typeRegistry ) );
-        }
-        request.setDependencies( aetherDependencies );
-
-        if ( root.getDependencyManagement() != null )
-        {
-            List<Dependency> aetherManagerDependencies = new ArrayList<>(
-                    root.getDependencyManagement().getDependencies().size() );
-
-            for ( org.apache.maven.model.Dependency mavenDependency : root.getDependencyManagement().getDependencies() )
-            {
-                aetherManagerDependencies.add( toDependency( mavenDependency, typeRegistry ) );
-            }
-
-            request.setManagedDependencies( aetherManagerDependencies );
-        }
-
-        return collectDependencies( request );
-    }
-
-    private CollectorResult collectDependencies( CollectRequest request ) throws DependencyCollectorException
-    {
-        request.setRepositories( aetherRepositories );
-
-        try
-        {
-            return new Maven31CollectorResult( repositorySystem.collectDependencies( session, request ) );
-        }
-        catch ( DependencyCollectionException e )
-        {
-            throw new DependencyCollectorException( e.getMessage(), e );
-        }
-    }
-}
+package org.apache.maven.shared.transfer.dependencies.collect.internal;
+
+/*
+ * 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.
+ */
+
+import java.util.ArrayList;
+import java.util.List;
+
+import org.apache.maven.RepositoryUtils;
+import org.apache.maven.artifact.handler.ArtifactHandler;
+import org.apache.maven.artifact.handler.manager.ArtifactHandlerManager;
+import org.apache.maven.model.Model;
+import org.apache.maven.shared.transfer.dependencies.DependableCoordinate;
+import org.apache.maven.shared.transfer.dependencies.collect.CollectorResult;
+import org.apache.maven.shared.transfer.dependencies.collect.DependencyCollector;
+import org.apache.maven.shared.transfer.dependencies.collect.DependencyCollectorException;
+import org.eclipse.aether.RepositorySystem;
+import org.eclipse.aether.RepositorySystemSession;
+import org.eclipse.aether.artifact.Artifact;
+import org.eclipse.aether.artifact.ArtifactTypeRegistry;
+import org.eclipse.aether.artifact.DefaultArtifact;
+import org.eclipse.aether.collection.CollectRequest;
+import org.eclipse.aether.collection.DependencyCollectionException;
+import org.eclipse.aether.graph.Dependency;
+import org.eclipse.aether.repository.RemoteRepository;
+
+/**
+ * Maven 3.1+ implementation of the {@link DependencyCollector}
+ *
+ * @author Robert Scholte
+ */
+class Maven31DependencyCollector implements MavenDependencyCollector
+{
+    private final RepositorySystem repositorySystem;
+
+    private final ArtifactHandlerManager artifactHandlerManager;
+
+    private final RepositorySystemSession session;
+
+    private final List<RemoteRepository> aetherRepositories;
+
+    Maven31DependencyCollector( RepositorySystem repositorySystem, ArtifactHandlerManager artifactHandlerManager,
+            RepositorySystemSession session, List<RemoteRepository> aetherRepositories )
+    {
+        super();
+        this.repositorySystem = repositorySystem;
+        this.artifactHandlerManager = artifactHandlerManager;
+        this.session = session;
+        this.aetherRepositories = aetherRepositories;
+    }
+
+    private static Dependency toDependency( org.apache.maven.model.Dependency mavenDependency,
+            ArtifactTypeRegistry typeRegistry ) throws DependencyCollectorException
+    {
+        Class<?>[] argClasses = new Class<?>[] {org.apache.maven.model.Dependency.class, ArtifactTypeRegistry.class};
+
+        Object[] args = new Object[] {mavenDependency, typeRegistry};
+
+        return Invoker.invoke( RepositoryUtils.class, "toDependency", argClasses, args );
+    }
+
+    @Override
+    public CollectorResult collectDependencies( org.apache.maven.model.Dependency root )
+            throws DependencyCollectorException
+    {
+        ArtifactTypeRegistry typeRegistry = Invoker.invoke( RepositoryUtils.class, "newArtifactTypeRegistry",
+                ArtifactHandlerManager.class, artifactHandlerManager );
+
+        CollectRequest request = new CollectRequest();
+        request.setRoot( toDependency( root, typeRegistry ) );
+
+        return collectDependencies( request );
+    }
+
+    @Override
+    public CollectorResult collectDependencies( DependableCoordinate root ) throws DependencyCollectorException
+    {
+        ArtifactHandler artifactHandler = artifactHandlerManager.getArtifactHandler( root.getType() );
+
+        String extension = artifactHandler != null ? artifactHandler.getExtension() : null;
+
+        Artifact aetherArtifact = new DefaultArtifact( root.getGroupId(), root.getArtifactId(), root.getClassifier(),
+                extension, root.getVersion() );
+
+        CollectRequest request = new CollectRequest();
+        request.setRoot( new Dependency( aetherArtifact, null ) );
+
+        return collectDependencies( request );
+    }
+
+    @Override
+    public CollectorResult collectDependencies( Model root ) throws DependencyCollectorException
+    {
+        // Are there examples where packaging and type are NOT in sync
+        ArtifactHandler artifactHandler = artifactHandlerManager.getArtifactHandler( root.getPackaging() );
+
+        String extension = artifactHandler != null ? artifactHandler.getExtension() : null;
+
+        Artifact aetherArtifact = new DefaultArtifact( root.getGroupId(), root.getArtifactId(), extension,
+                root.getVersion() );
+
+        CollectRequest request = new CollectRequest();
+        request.setRoot( new Dependency( aetherArtifact, null ) );
+
+        ArtifactTypeRegistry typeRegistry = Invoker.invoke( RepositoryUtils.class, "newArtifactTypeRegistry",
+                ArtifactHandlerManager.class, artifactHandlerManager );
+
+        List<Dependency> aetherDependencies = new ArrayList<>( root.getDependencies().size() );
+        for ( org.apache.maven.model.Dependency mavenDependency : root.getDependencies() )
+        {
+            aetherDependencies.add( toDependency( mavenDependency, typeRegistry ) );
+        }
+        request.setDependencies( aetherDependencies );
+
+        if ( root.getDependencyManagement() != null )
+        {
+            List<Dependency> aetherManagerDependencies = new ArrayList<>(
+                    root.getDependencyManagement().getDependencies().size() );
+
+            for ( org.apache.maven.model.Dependency mavenDependency : root.getDependencyManagement().getDependencies() )
+            {
+                aetherManagerDependencies.add( toDependency( mavenDependency, typeRegistry ) );
+            }
+
+            request.setManagedDependencies( aetherManagerDependencies );
+        }
+
+        return collectDependencies( request );
+    }
+
+    private CollectorResult collectDependencies( CollectRequest request ) throws DependencyCollectorException
+    {
+        request.setRepositories( aetherRepositories );
+
+        try
+        {
+            return new Maven31CollectorResult( repositorySystem.collectDependencies( session, request ) );
+        }
+        catch ( DependencyCollectionException e )
+        {
+            throw new DependencyCollectorException( e.getMessage(), e );
+        }
+    }
+}
diff --git a/src/main/java/org/apache/maven/shared/transfer/dependencies/collect/internal/Maven31DependencyNodeAdapter.java b/maven-3.0.x/src/main/java/org/apache/maven/shared/transfer/dependencies/collect/internal/Maven31DependencyNodeAdapter.java
similarity index 100%
copy from src/main/java/org/apache/maven/shared/transfer/dependencies/collect/internal/Maven31DependencyNodeAdapter.java
copy to maven-3.0.x/src/main/java/org/apache/maven/shared/transfer/dependencies/collect/internal/Maven31DependencyNodeAdapter.java
diff --git a/src/main/java/org/apache/maven/shared/transfer/dependencies/collect/internal/MavenDependencyCollector.java b/maven-3.0.x/src/main/java/org/apache/maven/shared/transfer/dependencies/collect/internal/MavenDependencyCollector.java
similarity index 100%
copy from src/main/java/org/apache/maven/shared/transfer/dependencies/collect/internal/MavenDependencyCollector.java
copy to maven-3.0.x/src/main/java/org/apache/maven/shared/transfer/dependencies/collect/internal/MavenDependencyCollector.java
diff --git a/src/main/java/org/apache/maven/shared/transfer/dependencies/resolve/DependencyResolver.java b/maven-3.0.x/src/main/java/org/apache/maven/shared/transfer/dependencies/resolve/DependencyResolver.java
similarity index 97%
copy from src/main/java/org/apache/maven/shared/transfer/dependencies/resolve/DependencyResolver.java
copy to maven-3.0.x/src/main/java/org/apache/maven/shared/transfer/dependencies/resolve/DependencyResolver.java
index 23baf51..041a613 100644
--- a/src/main/java/org/apache/maven/shared/transfer/dependencies/resolve/DependencyResolver.java
+++ b/maven-3.0.x/src/main/java/org/apache/maven/shared/transfer/dependencies/resolve/DependencyResolver.java
@@ -1,81 +1,81 @@
-package org.apache.maven.shared.transfer.dependencies.resolve;
-
-/*
- * 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.
- */
-
-import java.util.Collection;
-
-import org.apache.maven.model.Dependency;
-import org.apache.maven.model.Model;
-import org.apache.maven.project.ProjectBuildingRequest;
-import org.apache.maven.shared.artifact.filter.resolve.TransformableFilter;
-import org.apache.maven.shared.transfer.artifact.resolve.ArtifactResult;
-import org.apache.maven.shared.transfer.dependencies.DependableCoordinate;
-
-/**
- * @author Robert Scholte
- */
-public interface DependencyResolver
-{
-    /**
-     * This will resolve the dependencies of the coordinate, not resolving the the artifact of the coordinate itself. If
-     * the coordinate needs to be resolved too, use
-     * {@link #resolveDependencies(ProjectBuildingRequest, Collection, Collection, TransformableFilter)} passing
-     * {@code Collections.singletonList(coordinate)}
-     * 
-     * @param buildingRequest {@link ProjectBuildingRequest}
-     * @param coordinate {@link DependableCoordinate}
-     * @param filter {@link TransformableFilter} (can be {@code null}).
-     * @return the resolved dependencies.
-     * @throws DependencyResolverException in case of an error.
-     */
-    Iterable<ArtifactResult> resolveDependencies( ProjectBuildingRequest buildingRequest,
-                                                  DependableCoordinate coordinate, TransformableFilter filter )
-        throws DependencyResolverException;
-
-    /**
-     * This will resolve the dependencies of the coordinate, not resolving the the artifact of the coordinate itself. If
-     * the coordinate needs to be resolved too, use
-     * {@link #resolveDependencies(ProjectBuildingRequest, Collection, Collection, TransformableFilter)} passing
-     * {@code Collections.singletonList(coordinate)}
-     * 
-     * @param buildingRequest {@link ProjectBuildingRequest}
-     * @param model {@link Model}
-     * @param filter {@link TransformableFilter} (can be {@code null}).
-     * @return the resolved dependencies.
-     * @throws DependencyResolverException in case of an error.
-     */
-    Iterable<ArtifactResult> resolveDependencies( ProjectBuildingRequest buildingRequest, Model model,
-                                                  TransformableFilter filter )
-        throws DependencyResolverException;
-
-    /**
-     * @param buildingRequest the project building request, never {@code null}
-     * @param dependencies the dependencies to resolve, can be {@code null}
-     * @param managedDependencies managed dependencies, can be {@code null}
-     * @param filter a filter, can be {@code null}
-     * @return the resolved dependencies.
-     * @throws DependencyResolverException in case of an error.
-     */
-    Iterable<ArtifactResult> resolveDependencies( ProjectBuildingRequest buildingRequest,
-                                                  Collection<Dependency> dependencies,
-                                                  Collection<Dependency> managedDependencies,
-                                                  TransformableFilter filter )
-        throws DependencyResolverException;
-}
+package org.apache.maven.shared.transfer.dependencies.resolve;
+
+/*
+ * 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.
+ */
+
+import java.util.Collection;
+
+import org.apache.maven.model.Dependency;
+import org.apache.maven.model.Model;
+import org.apache.maven.project.ProjectBuildingRequest;
+import org.apache.maven.shared.artifact.filter.resolve.TransformableFilter;
+import org.apache.maven.shared.transfer.artifact.resolve.ArtifactResult;
+import org.apache.maven.shared.transfer.dependencies.DependableCoordinate;
+
+/**
+ * @author Robert Scholte
+ */
+public interface DependencyResolver
+{
+    /**
+     * This will resolve the dependencies of the coordinate, not resolving the the artifact of the coordinate itself. If
+     * the coordinate needs to be resolved too, use
+     * {@link #resolveDependencies(ProjectBuildingRequest, Collection, Collection, TransformableFilter)} passing
+     * {@code Collections.singletonList(coordinate)}
+     * 
+     * @param buildingRequest {@link ProjectBuildingRequest}
+     * @param coordinate {@link DependableCoordinate}
+     * @param filter {@link TransformableFilter} (can be {@code null}).
+     * @return the resolved dependencies.
+     * @throws DependencyResolverException in case of an error.
+     */
+    Iterable<ArtifactResult> resolveDependencies( ProjectBuildingRequest buildingRequest,
+                                                  DependableCoordinate coordinate, TransformableFilter filter )
+        throws DependencyResolverException;
+
+    /**
+     * This will resolve the dependencies of the coordinate, not resolving the the artifact of the coordinate itself. If
+     * the coordinate needs to be resolved too, use
+     * {@link #resolveDependencies(ProjectBuildingRequest, Collection, Collection, TransformableFilter)} passing
+     * {@code Collections.singletonList(coordinate)}
+     * 
+     * @param buildingRequest {@link ProjectBuildingRequest}
+     * @param model {@link Model}
+     * @param filter {@link TransformableFilter} (can be {@code null}).
+     * @return the resolved dependencies.
+     * @throws DependencyResolverException in case of an error.
+     */
+    Iterable<ArtifactResult> resolveDependencies( ProjectBuildingRequest buildingRequest, Model model,
+                                                  TransformableFilter filter )
+        throws DependencyResolverException;
+
+    /**
+     * @param buildingRequest the project building request, never {@code null}
+     * @param dependencies the dependencies to resolve, can be {@code null}
+     * @param managedDependencies managed dependencies, can be {@code null}
+     * @param filter a filter, can be {@code null}
+     * @return the resolved dependencies.
+     * @throws DependencyResolverException in case of an error.
+     */
+    Iterable<ArtifactResult> resolveDependencies( ProjectBuildingRequest buildingRequest,
+                                                  Collection<Dependency> dependencies,
+                                                  Collection<Dependency> managedDependencies,
+                                                  TransformableFilter filter )
+        throws DependencyResolverException;
+}
diff --git a/src/main/java/org/apache/maven/shared/transfer/dependencies/resolve/DependencyResolverException.java b/maven-3.0.x/src/main/java/org/apache/maven/shared/transfer/dependencies/resolve/DependencyResolverException.java
similarity index 96%
copy from src/main/java/org/apache/maven/shared/transfer/dependencies/resolve/DependencyResolverException.java
copy to maven-3.0.x/src/main/java/org/apache/maven/shared/transfer/dependencies/resolve/DependencyResolverException.java
index 0235cdf..d6ca1ac 100644
--- a/src/main/java/org/apache/maven/shared/transfer/dependencies/resolve/DependencyResolverException.java
+++ b/maven-3.0.x/src/main/java/org/apache/maven/shared/transfer/dependencies/resolve/DependencyResolverException.java
@@ -1,54 +1,54 @@
-package org.apache.maven.shared.transfer.dependencies.resolve;
-
-/*
- * 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.
- */
-
-/**
- * The Exception class in case a resolving does not work.
- */
-public class DependencyResolverException
-    extends Exception
-{
-    private static final long serialVersionUID = 5320065249974323888L;
-
-    /**
-     * @param cause The {@link Exception cause} of the problem.
-     */
-    protected DependencyResolverException( Exception cause )
-    {
-        super( cause );
-    }
-
-    /**
-     * @param message The message to give.
-     * @param e The {@link Exception}.
-     */
-    public DependencyResolverException( String message, Exception e )
-    {
-        super( message, e );
-    }
-
-    /**
-     * @return {@link DependencyResult}
-     */
-    public DependencyResult getResult()
-    {
-        return null;
-    }
-}
+package org.apache.maven.shared.transfer.dependencies.resolve;
+
+/*
+ * 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.
+ */
+
+/**
+ * The Exception class in case a resolving does not work.
+ */
+public class DependencyResolverException
+    extends Exception
+{
+    private static final long serialVersionUID = 5320065249974323888L;
+
+    /**
+     * @param cause The {@link Exception cause} of the problem.
+     */
+    protected DependencyResolverException( Exception cause )
+    {
+        super( cause );
+    }
+
+    /**
+     * @param message The message to give.
+     * @param e The {@link Exception}.
+     */
+    public DependencyResolverException( String message, Exception e )
+    {
+        super( message, e );
+    }
+
+    /**
+     * @return {@link DependencyResult}
+     */
+    public DependencyResult getResult()
+    {
+        return null;
+    }
+}
diff --git a/src/main/java/org/apache/maven/shared/transfer/dependencies/resolve/DependencyResult.java b/maven-3.0.x/src/main/java/org/apache/maven/shared/transfer/dependencies/resolve/DependencyResult.java
similarity index 96%
copy from src/main/java/org/apache/maven/shared/transfer/dependencies/resolve/DependencyResult.java
copy to maven-3.0.x/src/main/java/org/apache/maven/shared/transfer/dependencies/resolve/DependencyResult.java
index f839b05..7d76d2f 100644
--- a/src/main/java/org/apache/maven/shared/transfer/dependencies/resolve/DependencyResult.java
+++ b/maven-3.0.x/src/main/java/org/apache/maven/shared/transfer/dependencies/resolve/DependencyResult.java
@@ -1,37 +1,37 @@
-package org.apache.maven.shared.transfer.dependencies.resolve;
-
-/*
- * 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.
- */
-
-import java.util.List;
-
-/**
- * 
- * @author Robert Scholte
- *
- */
-public interface DependencyResult
-{
-    /**
-     * Gets the exceptions that occurred while building the dependency graph.
-     * 
-     * @return The list of exceptions {@link Exception}.
-     */
-    List<Exception> getCollectorExceptions();
-}
+package org.apache.maven.shared.transfer.dependencies.resolve;
+
+/*
+ * 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.
+ */
+
+import java.util.List;
+
+/**
+ * 
+ * @author Robert Scholte
+ *
+ */
+public interface DependencyResult
+{
+    /**
+     * Gets the exceptions that occurred while building the dependency graph.
+     * 
+     * @return The list of exceptions {@link Exception}.
+     */
+    List<Exception> getCollectorExceptions();
+}
diff --git a/src/main/java/org/apache/maven/shared/transfer/dependencies/resolve/internal/DefaultDependencyResolver.java b/maven-3.0.x/src/main/java/org/apache/maven/shared/transfer/dependencies/resolve/internal/DefaultDependencyResolver.java
similarity index 97%
copy from src/main/java/org/apache/maven/shared/transfer/dependencies/resolve/internal/DefaultDependencyResolver.java
copy to maven-3.0.x/src/main/java/org/apache/maven/shared/transfer/dependencies/resolve/internal/DefaultDependencyResolver.java
index 7718c19..28289a8 100644
--- a/src/main/java/org/apache/maven/shared/transfer/dependencies/resolve/internal/DefaultDependencyResolver.java
+++ b/maven-3.0.x/src/main/java/org/apache/maven/shared/transfer/dependencies/resolve/internal/DefaultDependencyResolver.java
@@ -1,190 +1,190 @@
-package org.apache.maven.shared.transfer.dependencies.resolve.internal;
-
-/*
- * 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.
- */
-
-import java.util.Collection;
-import java.util.List;
-
-import org.apache.maven.RepositoryUtils;
-import org.apache.maven.artifact.handler.manager.ArtifactHandlerManager;
-import org.apache.maven.model.Dependency;
-import org.apache.maven.model.Model;
-import org.apache.maven.project.ProjectBuildingRequest;
-import org.apache.maven.shared.artifact.filter.resolve.TransformableFilter;
-import org.apache.maven.shared.transfer.artifact.resolve.ArtifactResult;
-import org.apache.maven.shared.transfer.dependencies.DependableCoordinate;
-import org.apache.maven.shared.transfer.dependencies.resolve.DependencyResolver;
-import org.apache.maven.shared.transfer.dependencies.resolve.DependencyResolverException;
-import org.codehaus.plexus.PlexusConstants;
-import org.codehaus.plexus.PlexusContainer;
-import org.codehaus.plexus.component.annotations.Component;
-import org.codehaus.plexus.component.repository.exception.ComponentLookupException;
-import org.codehaus.plexus.context.Context;
-import org.codehaus.plexus.context.ContextException;
-import org.codehaus.plexus.personality.plexus.lifecycle.phase.Contextualizable;
-
-/**
- *
- */
-@Component( role = DependencyResolver.class, hint = "default" )
-class DefaultDependencyResolver implements DependencyResolver, Contextualizable
-{
-    private PlexusContainer container;
-
-    @Override
-    public Iterable<ArtifactResult> resolveDependencies( ProjectBuildingRequest buildingRequest,
-            Collection<Dependency> coordinates, Collection<Dependency> managedDependencies, TransformableFilter filter )
-            throws DependencyResolverException
-    {
-        validateBuildingRequest( buildingRequest );
-
-        try
-        {
-            return getMavenDependencyResolver( buildingRequest ).resolveDependencies( coordinates, managedDependencies,
-                    filter );
-        }
-        catch ( ComponentLookupException e )
-        {
-            throw new DependencyResolverException( e.getMessage(), e );
-        }
-    }
-
-    @Override
-    public Iterable<ArtifactResult> resolveDependencies( ProjectBuildingRequest buildingRequest,
-            DependableCoordinate coordinate, TransformableFilter filter ) throws DependencyResolverException
-    {
-        validateParameters( buildingRequest, coordinate );
-        try
-        {
-            return getMavenDependencyResolver( buildingRequest ).resolveDependencies( coordinate, filter );
-        }
-        catch ( ComponentLookupException e )
-        {
-            throw new DependencyResolverException( e.getMessage(), e );
-        }
-    }
-
-    @Override
-    public Iterable<ArtifactResult> resolveDependencies( ProjectBuildingRequest buildingRequest, Model model,
-            TransformableFilter filter ) throws DependencyResolverException
-    {
-        validateParameters( buildingRequest, model );
-        try
-        {
-            return getMavenDependencyResolver( buildingRequest ).resolveDependencies( model, filter );
-        }
-        catch ( ComponentLookupException e )
-        {
-            throw new DependencyResolverException( e.getMessage(), e );
-        }
-    }
-
-    /**
-     * @return true if the current Maven version is Maven 3.1.
-     */
-    private boolean isMaven31()
-    {
-        try
-        {
-            // Maven 3.1 specific
-            Thread.currentThread().getContextClassLoader().loadClass( "org.eclipse.aether.artifact.Artifact" );
-            return true;
-        }
-        catch ( ClassNotFoundException e )
-        {
-            return false;
-        }
-    }
-
-    /**
-     * Injects the Plexus content.
-     *
-     * @param context Plexus context to inject.
-     * @throws ContextException if the PlexusContainer could not be located.
-     */
-    public void contextualize( Context context ) throws ContextException
-    {
-        container = (PlexusContainer) context.get( PlexusConstants.PLEXUS_KEY );
-    }
-
-    private void validateParameters( ProjectBuildingRequest buildingRequest, DependableCoordinate coordinate )
-    {
-        validateBuildingRequest( buildingRequest );
-        if ( coordinate == null )
-        {
-            throw new IllegalArgumentException( "The parameter coordinate is not allowed to be null." );
-        }
-    }
-
-    private void validateParameters( ProjectBuildingRequest buildingRequest, Model model )
-    {
-        validateBuildingRequest( buildingRequest );
-        if ( model == null )
-        {
-            throw new IllegalArgumentException( "The parameter model is not allowed to be null." );
-        }
-
-    }
-
-    private MavenDependencyResolver getMavenDependencyResolver( ProjectBuildingRequest buildingRequest )
-            throws ComponentLookupException, DependencyResolverException
-    {
-        ArtifactHandlerManager artifactHandlerManager = container.lookup( ArtifactHandlerManager.class );
-
-        if ( isMaven31() )
-        {
-            org.eclipse.aether.RepositorySystem m31RepositorySystem = container.lookup(
-                    org.eclipse.aether.RepositorySystem.class );
-
-            org.eclipse.aether.RepositorySystemSession session = Invoker.invoke( buildingRequest,
-                    "getRepositorySession" );
-
-            List<org.eclipse.aether.repository.RemoteRepository> aetherRepositories = Invoker.invoke(
-                    RepositoryUtils.class, "toRepos", List.class, buildingRequest.getRemoteRepositories() );
-
-            return new Maven31DependencyResolver( m31RepositorySystem, artifactHandlerManager, session,
-                    aetherRepositories );
-        }
-        else
-        {
-            org.sonatype.aether.RepositorySystem m30RepositorySystem = container.lookup(
-                    org.sonatype.aether.RepositorySystem.class );
-
-            org.sonatype.aether.RepositorySystemSession session = Invoker.invoke( buildingRequest,
-                    "getRepositorySession" );
-
-            List<org.sonatype.aether.repository.RemoteRepository> aetherRepositories = Invoker.invoke(
-                    RepositoryUtils.class, "toRepos", List.class, buildingRequest.getRemoteRepositories() );
-
-            return new Maven30DependencyResolver( m30RepositorySystem, artifactHandlerManager, session,
-                    aetherRepositories );
-
-        }
-    }
-
-    private void validateBuildingRequest( ProjectBuildingRequest buildingRequest )
-    {
-        if ( buildingRequest == null )
-        {
-            throw new IllegalArgumentException( "The parameter buildingRequest is not allowed to be null." );
-        }
-    }
-
-}
+package org.apache.maven.shared.transfer.dependencies.resolve.internal;
+
+/*
+ * 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.
+ */
+
+import java.util.Collection;
+import java.util.List;
+
+import org.apache.maven.RepositoryUtils;
+import org.apache.maven.artifact.handler.manager.ArtifactHandlerManager;
+import org.apache.maven.model.Dependency;
+import org.apache.maven.model.Model;
+import org.apache.maven.project.ProjectBuildingRequest;
+import org.apache.maven.shared.artifact.filter.resolve.TransformableFilter;
+import org.apache.maven.shared.transfer.artifact.resolve.ArtifactResult;
+import org.apache.maven.shared.transfer.dependencies.DependableCoordinate;
+import org.apache.maven.shared.transfer.dependencies.resolve.DependencyResolver;
+import org.apache.maven.shared.transfer.dependencies.resolve.DependencyResolverException;
+import org.codehaus.plexus.PlexusConstants;
+import org.codehaus.plexus.PlexusContainer;
+import org.codehaus.plexus.component.annotations.Component;
+import org.codehaus.plexus.component.repository.exception.ComponentLookupException;
+import org.codehaus.plexus.context.Context;
+import org.codehaus.plexus.context.ContextException;
+import org.codehaus.plexus.personality.plexus.lifecycle.phase.Contextualizable;
+
+/**
+ *
+ */
+@Component( role = DependencyResolver.class, hint = "default" )
+class DefaultDependencyResolver implements DependencyResolver, Contextualizable
+{
+    private PlexusContainer container;
+
+    @Override
+    public Iterable<ArtifactResult> resolveDependencies( ProjectBuildingRequest buildingRequest,
+            Collection<Dependency> coordinates, Collection<Dependency> managedDependencies, TransformableFilter filter )
+            throws DependencyResolverException
+    {
+        validateBuildingRequest( buildingRequest );
+
+        try
+        {
+            return getMavenDependencyResolver( buildingRequest ).resolveDependencies( coordinates, managedDependencies,
+                    filter );
+        }
+        catch ( ComponentLookupException e )
+        {
+            throw new DependencyResolverException( e.getMessage(), e );
+        }
+    }
+
+    @Override
+    public Iterable<ArtifactResult> resolveDependencies( ProjectBuildingRequest buildingRequest,
+            DependableCoordinate coordinate, TransformableFilter filter ) throws DependencyResolverException
+    {
+        validateParameters( buildingRequest, coordinate );
+        try
+        {
+            return getMavenDependencyResolver( buildingRequest ).resolveDependencies( coordinate, filter );
+        }
+        catch ( ComponentLookupException e )
+        {
+            throw new DependencyResolverException( e.getMessage(), e );
+        }
+    }
+
+    @Override
+    public Iterable<ArtifactResult> resolveDependencies( ProjectBuildingRequest buildingRequest, Model model,
+            TransformableFilter filter ) throws DependencyResolverException
+    {
+        validateParameters( buildingRequest, model );
+        try
+        {
+            return getMavenDependencyResolver( buildingRequest ).resolveDependencies( model, filter );
+        }
+        catch ( ComponentLookupException e )
+        {
+            throw new DependencyResolverException( e.getMessage(), e );
+        }
+    }
+
+    /**
+     * @return true if the current Maven version is Maven 3.1.
+     */
+    private boolean isMaven31()
+    {
+        try
+        {
+            // Maven 3.1 specific
+            Thread.currentThread().getContextClassLoader().loadClass( "org.eclipse.aether.artifact.Artifact" );
+            return true;
+        }
+        catch ( ClassNotFoundException e )
+        {
+            return false;
+        }
+    }
+
+    /**
+     * Injects the Plexus content.
+     *
+     * @param context Plexus context to inject.
+     * @throws ContextException if the PlexusContainer could not be located.
+     */
+    public void contextualize( Context context ) throws ContextException
+    {
+        container = (PlexusContainer) context.get( PlexusConstants.PLEXUS_KEY );
+    }
+
+    private void validateParameters( ProjectBuildingRequest buildingRequest, DependableCoordinate coordinate )
+    {
+        validateBuildingRequest( buildingRequest );
+        if ( coordinate == null )
+        {
+            throw new IllegalArgumentException( "The parameter coordinate is not allowed to be null." );
+        }
+    }
+
+    private void validateParameters( ProjectBuildingRequest buildingRequest, Model model )
+    {
+        validateBuildingRequest( buildingRequest );
+        if ( model == null )
+        {
+            throw new IllegalArgumentException( "The parameter model is not allowed to be null." );
+        }
+
+    }
+
+    private MavenDependencyResolver getMavenDependencyResolver( ProjectBuildingRequest buildingRequest )
+            throws ComponentLookupException, DependencyResolverException
+    {
+        ArtifactHandlerManager artifactHandlerManager = container.lookup( ArtifactHandlerManager.class );
+
+        if ( isMaven31() )
+        {
+            org.eclipse.aether.RepositorySystem m31RepositorySystem = container.lookup(
+                    org.eclipse.aether.RepositorySystem.class );
+
+            org.eclipse.aether.RepositorySystemSession session = Invoker.invoke( buildingRequest,
+                    "getRepositorySession" );
+
+            List<org.eclipse.aether.repository.RemoteRepository> aetherRepositories = Invoker.invoke(
+                    RepositoryUtils.class, "toRepos", List.class, buildingRequest.getRemoteRepositories() );
+
+            return new Maven31DependencyResolver( m31RepositorySystem, artifactHandlerManager, session,
+                    aetherRepositories );
+        }
+        else
+        {
+            org.sonatype.aether.RepositorySystem m30RepositorySystem = container.lookup(
+                    org.sonatype.aether.RepositorySystem.class );
+
+            org.sonatype.aether.RepositorySystemSession session = Invoker.invoke( buildingRequest,
+                    "getRepositorySession" );
+
+            List<org.sonatype.aether.repository.RemoteRepository> aetherRepositories = Invoker.invoke(
+                    RepositoryUtils.class, "toRepos", List.class, buildingRequest.getRemoteRepositories() );
+
+            return new Maven30DependencyResolver( m30RepositorySystem, artifactHandlerManager, session,
+                    aetherRepositories );
+
+        }
+    }
+
+    private void validateBuildingRequest( ProjectBuildingRequest buildingRequest )
+    {
+        if ( buildingRequest == null )
+        {
+            throw new IllegalArgumentException( "The parameter buildingRequest is not allowed to be null." );
+        }
+    }
+
+}
diff --git a/src/main/java/org/apache/maven/shared/transfer/dependencies/resolve/internal/Invoker.java b/maven-3.0.x/src/main/java/org/apache/maven/shared/transfer/dependencies/resolve/internal/Invoker.java
similarity index 97%
copy from src/main/java/org/apache/maven/shared/transfer/dependencies/resolve/internal/Invoker.java
copy to maven-3.0.x/src/main/java/org/apache/maven/shared/transfer/dependencies/resolve/internal/Invoker.java
index dc7ad4c..e4dfb82 100644
--- a/src/main/java/org/apache/maven/shared/transfer/dependencies/resolve/internal/Invoker.java
+++ b/maven-3.0.x/src/main/java/org/apache/maven/shared/transfer/dependencies/resolve/internal/Invoker.java
@@ -1,95 +1,95 @@
-package org.apache.maven.shared.transfer.dependencies.resolve.internal;
-
-/*
- * 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.
- */
-
-import java.lang.reflect.InvocationTargetException;
-
-import org.apache.maven.shared.transfer.dependencies.resolve.DependencyResolverException;
-
-/**
- * Invokes method on objects using reflection.
- */
-final class Invoker
-{
-    private Invoker()
-    {
-        // do not instantiate
-    }
-
-    public static <T> T invoke( Object object, String method )
-        throws DependencyResolverException
-    {
-        try
-        {
-            @SuppressWarnings( "unchecked" )
-            T invoke = (T) object.getClass().getMethod( method ).invoke( object );
-            return invoke;
-        }
-        catch ( IllegalAccessException | InvocationTargetException | NoSuchMethodException e )
-        {
-            throw new DependencyResolverException( e.getMessage(), e );
-        }
-    }
-
-    public static <T> T invoke( Class<?> objectClazz, String staticMethod, Class<?> argClazz, Object arg )
-        throws DependencyResolverException
-    {
-        try
-        {
-            @SuppressWarnings( "unchecked" )
-            T invoke = (T) objectClazz.getMethod( staticMethod, argClazz ).invoke( null, arg );
-            return invoke;
-        }
-        catch ( IllegalAccessException | InvocationTargetException | NoSuchMethodException e )
-        {
-            throw new DependencyResolverException( e.getMessage(), e );
-        }
-    }
-
-    /**
-     * <strong>Note:</strong> Ensure that argClasses and args have the same number of elements
-     * 
-     * @param objectClazz the class of the static method
-     * @param staticMethod the static method to call
-     * @param argClasses the classes of the argument, used to select the right static method
-     * @param args the actual arguments to be passed
-     * @return the result of the method invocation
-     * @throws DependencyResolverException if any checked exception occurs
-     */
-    public static <T> T invoke( Class<?> objectClazz, String staticMethod, Class<?>[] argClasses, Object[] args )
-        throws DependencyResolverException
-    {
-        if ( args.length != argClasses.length )
-        {
-            throw new IllegalArgumentException( "The number of elements in argClasses and args are not the same." );
-        }
-
-        try
-        {
-            @SuppressWarnings( "unchecked" )
-            T invoke = (T) objectClazz.getMethod( staticMethod, argClasses ).invoke( null, args );
-            return invoke;
-        }
-        catch ( IllegalAccessException | InvocationTargetException | NoSuchMethodException e )
-        {
-            throw new DependencyResolverException( e.getMessage(), e );
-        }
-    }
-}
+package org.apache.maven.shared.transfer.dependencies.resolve.internal;
+
+/*
+ * 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.
+ */
+
+import java.lang.reflect.InvocationTargetException;
+
+import org.apache.maven.shared.transfer.dependencies.resolve.DependencyResolverException;
+
+/**
+ * Invokes method on objects using reflection.
+ */
+final class Invoker
+{
+    private Invoker()
+    {
+        // do not instantiate
+    }
+
+    public static <T> T invoke( Object object, String method )
+        throws DependencyResolverException
+    {
+        try
+        {
+            @SuppressWarnings( "unchecked" )
+            T invoke = (T) object.getClass().getMethod( method ).invoke( object );
+            return invoke;
+        }
+        catch ( IllegalAccessException | InvocationTargetException | NoSuchMethodException e )
+        {
+            throw new DependencyResolverException( e.getMessage(), e );
+        }
+    }
+
+    public static <T> T invoke( Class<?> objectClazz, String staticMethod, Class<?> argClazz, Object arg )
+        throws DependencyResolverException
+    {
+        try
+        {
+            @SuppressWarnings( "unchecked" )
+            T invoke = (T) objectClazz.getMethod( staticMethod, argClazz ).invoke( null, arg );
+            return invoke;
+        }
+        catch ( IllegalAccessException | InvocationTargetException | NoSuchMethodException e )
+        {
+            throw new DependencyResolverException( e.getMessage(), e );
+        }
+    }
+
+    /**
+     * <strong>Note:</strong> Ensure that argClasses and args have the same number of elements
+     * 
+     * @param objectClazz the class of the static method
+     * @param staticMethod the static method to call
+     * @param argClasses the classes of the argument, used to select the right static method
+     * @param args the actual arguments to be passed
+     * @return the result of the method invocation
+     * @throws DependencyResolverException if any checked exception occurs
+     */
+    public static <T> T invoke( Class<?> objectClazz, String staticMethod, Class<?>[] argClasses, Object[] args )
+        throws DependencyResolverException
+    {
+        if ( args.length != argClasses.length )
+        {
+            throw new IllegalArgumentException( "The number of elements in argClasses and args are not the same." );
+        }
+
+        try
+        {
+            @SuppressWarnings( "unchecked" )
+            T invoke = (T) objectClazz.getMethod( staticMethod, argClasses ).invoke( null, args );
+            return invoke;
+        }
+        catch ( IllegalAccessException | InvocationTargetException | NoSuchMethodException e )
+        {
+            throw new DependencyResolverException( e.getMessage(), e );
+        }
+    }
+}
diff --git a/src/main/java/org/apache/maven/shared/transfer/dependencies/resolve/internal/Maven30ArtifactResult.java b/maven-3.0.x/src/main/java/org/apache/maven/shared/transfer/dependencies/resolve/internal/Maven30ArtifactResult.java
similarity index 97%
copy from src/main/java/org/apache/maven/shared/transfer/dependencies/resolve/internal/Maven30ArtifactResult.java
copy to maven-3.0.x/src/main/java/org/apache/maven/shared/transfer/dependencies/resolve/internal/Maven30ArtifactResult.java
index b9f37d9..b0aafdf 100644
--- a/src/main/java/org/apache/maven/shared/transfer/dependencies/resolve/internal/Maven30ArtifactResult.java
+++ b/maven-3.0.x/src/main/java/org/apache/maven/shared/transfer/dependencies/resolve/internal/Maven30ArtifactResult.java
@@ -1,57 +1,57 @@
-package org.apache.maven.shared.transfer.dependencies.resolve.internal;
-
-/*
- * 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.
- */
-
-import org.apache.maven.RepositoryUtils;
-import org.apache.maven.shared.transfer.dependencies.resolve.DependencyResolverException;
-import org.sonatype.aether.artifact.Artifact;
-import org.sonatype.aether.resolution.ArtifactResult;
-
-/**
- * {@link org.apache.maven.shared.transfer.artifact.resolve.ArtifactResult} wrapper for {@link ArtifactResult}
- *
- * @author Robert Scholte
- * @since 3.0
- */
-class Maven30ArtifactResult implements org.apache.maven.shared.transfer.artifact.resolve.ArtifactResult
-{
-    private final ArtifactResult artifactResult;
-
-    /**
-     * @param artifactResult {@link ArtifactResult}
-     */
-    Maven30ArtifactResult( ArtifactResult artifactResult )
-    {
-        this.artifactResult = artifactResult;
-    }
-
-    @Override
-    public org.apache.maven.artifact.Artifact getArtifact()
-    {
-        try
-        {
-            return Invoker.invoke( RepositoryUtils.class, "toArtifact", Artifact.class, artifactResult.getArtifact() );
-        }
-        catch ( DependencyResolverException e )
-        {
-            throw new RuntimeException( e );
-        }
-    }
-}
+package org.apache.maven.shared.transfer.dependencies.resolve.internal;
+
+/*
+ * 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.
+ */
+
+import org.apache.maven.RepositoryUtils;
+import org.apache.maven.shared.transfer.dependencies.resolve.DependencyResolverException;
+import org.sonatype.aether.artifact.Artifact;
+import org.sonatype.aether.resolution.ArtifactResult;
+
+/**
+ * {@link org.apache.maven.shared.transfer.artifact.resolve.ArtifactResult} wrapper for {@link ArtifactResult}
+ *
+ * @author Robert Scholte
+ * @since 3.0
+ */
+class Maven30ArtifactResult implements org.apache.maven.shared.transfer.artifact.resolve.ArtifactResult
+{
+    private final ArtifactResult artifactResult;
+
+    /**
+     * @param artifactResult {@link ArtifactResult}
+     */
+    Maven30ArtifactResult( ArtifactResult artifactResult )
+    {
+        this.artifactResult = artifactResult;
+    }
+
+    @Override
+    public org.apache.maven.artifact.Artifact getArtifact()
+    {
+        try
+        {
+            return Invoker.invoke( RepositoryUtils.class, "toArtifact", Artifact.class, artifactResult.getArtifact() );
+        }
+        catch ( DependencyResolverException e )
+        {
+            throw new RuntimeException( e );
+        }
+    }
+}
diff --git a/src/main/java/org/apache/maven/shared/transfer/dependencies/resolve/internal/Maven30DependencyResolver.java b/maven-3.0.x/src/main/java/org/apache/maven/shared/transfer/dependencies/resolve/internal/Maven30DependencyResolver.java
similarity index 97%
copy from src/main/java/org/apache/maven/shared/transfer/dependencies/resolve/internal/Maven30DependencyResolver.java
copy to maven-3.0.x/src/main/java/org/apache/maven/shared/transfer/dependencies/resolve/internal/Maven30DependencyResolver.java
index 031d604..f6730ae 100644
--- a/src/main/java/org/apache/maven/shared/transfer/dependencies/resolve/internal/Maven30DependencyResolver.java
+++ b/maven-3.0.x/src/main/java/org/apache/maven/shared/transfer/dependencies/resolve/internal/Maven30DependencyResolver.java
@@ -1,247 +1,247 @@
-package org.apache.maven.shared.transfer.dependencies.resolve.internal;
-
-/*
- * 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.
- */
-
-import java.util.ArrayList;
-import java.util.Collection;
-import java.util.Collections;
-import java.util.Iterator;
-import java.util.List;
-
-import org.apache.maven.RepositoryUtils;
-import org.apache.maven.artifact.handler.ArtifactHandler;
-import org.apache.maven.artifact.handler.manager.ArtifactHandlerManager;
-import org.apache.maven.model.DependencyManagement;
-import org.apache.maven.model.Model;
-import org.apache.maven.shared.artifact.filter.resolve.TransformableFilter;
-import org.apache.maven.shared.artifact.filter.resolve.transform.SonatypeAetherFilterTransformer;
-import org.apache.maven.shared.transfer.dependencies.DependableCoordinate;
-import org.apache.maven.shared.transfer.dependencies.resolve.DependencyResolverException;
-import org.sonatype.aether.RepositorySystem;
-import org.sonatype.aether.RepositorySystemSession;
-import org.sonatype.aether.artifact.Artifact;
-import org.sonatype.aether.artifact.ArtifactType;
-import org.sonatype.aether.artifact.ArtifactTypeRegistry;
-import org.sonatype.aether.collection.CollectRequest;
-import org.sonatype.aether.collection.DependencyCollectionException;
-import org.sonatype.aether.graph.Dependency;
-import org.sonatype.aether.graph.DependencyFilter;
-import org.sonatype.aether.repository.RemoteRepository;
-import org.sonatype.aether.resolution.ArtifactResolutionException;
-import org.sonatype.aether.resolution.ArtifactResult;
-import org.sonatype.aether.util.artifact.DefaultArtifact;
-import org.sonatype.aether.util.artifact.DefaultArtifactType;
-
-/**
- *
- */
-class Maven30DependencyResolver implements MavenDependencyResolver
-{
-    private static final Class<?>[] ARG_CLASSES = new Class<?>[] {org.apache.maven.model.Dependency.class,
-            ArtifactTypeRegistry.class};
-    private final RepositorySystem repositorySystem;
-    private final ArtifactHandlerManager artifactHandlerManager;
-    private final RepositorySystemSession session;
-    private final List<RemoteRepository> aetherRepositories;
-
-    Maven30DependencyResolver( RepositorySystem repositorySystem, ArtifactHandlerManager artifactHandlerManager,
-            RepositorySystemSession session, List<RemoteRepository> aetherRepositories )
-    {
-        super();
-        this.repositorySystem = repositorySystem;
-        this.artifactHandlerManager = artifactHandlerManager;
-        this.session = session;
-        this.aetherRepositories = aetherRepositories;
-    }
-
-    /**
-     * Based on RepositoryUtils#toDependency(org.apache.maven.model.Dependency, ArtifactTypeRegistry)
-     *
-     * @param coordinate  {@link DependableCoordinate}
-     * @param stereotypes {@link org.eclipse.aether.artifact.ArtifactTypeRegistry
-     * @return as Aether Dependency
-     */
-    private static Dependency toDependency( DependableCoordinate coordinate, ArtifactTypeRegistry stereotypes )
-    {
-        ArtifactType stereotype = stereotypes.get( coordinate.getType() );
-        if ( stereotype == null )
-        {
-            stereotype = new DefaultArtifactType( coordinate.getType() );
-        }
-
-        Artifact artifact = new DefaultArtifact( coordinate.getGroupId(), coordinate.getArtifactId(),
-                coordinate.getClassifier(), null, coordinate.getVersion(), null, stereotype );
-
-        return new Dependency( artifact, null );
-    }
-
-    private static Dependency toDependency( org.apache.maven.model.Dependency mavenDependency,
-            ArtifactTypeRegistry typeRegistry ) throws DependencyResolverException
-    {
-        Object[] args = new Object[] {mavenDependency, typeRegistry};
-
-        return Invoker.invoke( RepositoryUtils.class, "toDependency", ARG_CLASSES, args );
-    }
-
-    @Override
-    // CHECKSTYLE_OFF: LineLength
-    public Iterable<org.apache.maven.shared.transfer.artifact.resolve.ArtifactResult> resolveDependencies(
-            DependableCoordinate coordinate, TransformableFilter dependencyFilter )
-        // CHECKSTYLE_ON: LineLength
-            throws DependencyResolverException
-    {
-        ArtifactTypeRegistry typeRegistry = createTypeRegistry();
-
-        Dependency aetherRoot = toDependency( coordinate, typeRegistry );
-
-        CollectRequest request = new CollectRequest( aetherRoot, aetherRepositories );
-
-        return resolveDependencies( dependencyFilter, request );
-    }
-
-    private ArtifactTypeRegistry createTypeRegistry() throws DependencyResolverException
-    {
-        return Invoker.invoke( RepositoryUtils.class, "newArtifactTypeRegistry", ArtifactHandlerManager.class,
-                artifactHandlerManager );
-    }
-
-    @Override
-    // CHECKSTYLE_OFF: LineLength
-    public Iterable<org.apache.maven.shared.transfer.artifact.resolve.ArtifactResult> resolveDependencies( Model model,
-            TransformableFilter dependencyFilter )
-        // CHECKSTYLE_ON: LineLength
-            throws DependencyResolverException
-    {
-        // Are there examples where packaging and type are NOT in sync
-        ArtifactHandler artifactHandler = artifactHandlerManager.getArtifactHandler( model.getPackaging() );
-
-        String extension = artifactHandler != null ? artifactHandler.getExtension() : null;
-
-        Artifact aetherArtifact = new DefaultArtifact( model.getGroupId(), model.getArtifactId(), extension,
-                model.getVersion() );
-
-        Dependency aetherRoot = new Dependency( aetherArtifact, null );
-
-        CollectRequest request = new CollectRequest( aetherRoot, aetherRepositories );
-
-        request.setDependencies( resolveDependencies( model.getDependencies() ) );
-
-        DependencyManagement mavenDependencyManagement = model.getDependencyManagement();
-        if ( mavenDependencyManagement != null )
-        {
-            request.setManagedDependencies( resolveDependencies( mavenDependencyManagement.getDependencies() ) );
-        }
-
-        return resolveDependencies( dependencyFilter, request );
-    }
-
-    /**
-     * @param mavenDependencies {@link org.apache.maven.model.Dependency} can be {@code null}.
-     * @return List of resolved dependencies.
-     * @throws DependencyResolverException in case of a failure of the typeRegistry error.
-     */
-    // CHECKSTYLE_OFF: LineLength
-    private List<Dependency> resolveDependencies( Collection<org.apache.maven.model.Dependency> mavenDependencies )
-            throws DependencyResolverException
-    // CHECKSTYLE_ON: LineLength
-    {
-        if ( mavenDependencies == null )
-        {
-            return Collections.emptyList();
-        }
-
-        ArtifactTypeRegistry typeRegistry = createTypeRegistry();
-
-        List<Dependency> aetherDependencies = new ArrayList<>( mavenDependencies.size() );
-
-        for ( org.apache.maven.model.Dependency mavenDependency : mavenDependencies )
-        {
-            aetherDependencies.add( toDependency( mavenDependency, typeRegistry ) );
-        }
-
-        return aetherDependencies;
-    }
-
-    @Override
-    // CHECKSTYLE_OFF: LineLength
-    public Iterable<org.apache.maven.shared.transfer.artifact.resolve.ArtifactResult> resolveDependencies(
-            Collection<org.apache.maven.model.Dependency> mavenDependencies,
-            Collection<org.apache.maven.model.Dependency> managedMavenDependencies, TransformableFilter filter )
-        // CHECKSTYLE_ON: LineLength
-            throws DependencyResolverException
-    {
-
-        List<Dependency> aetherDependencies = resolveDependencies( mavenDependencies );
-
-        List<Dependency> aetherManagedDependencies = resolveDependencies( managedMavenDependencies );
-
-        CollectRequest request = new CollectRequest( aetherDependencies, aetherManagedDependencies,
-                aetherRepositories );
-
-        return resolveDependencies( filter, request );
-    }
-
-    // CHECKSTYLE_OFF: LineLength
-    private Iterable<org.apache.maven.shared.transfer.artifact.resolve.ArtifactResult> resolveDependencies(
-            TransformableFilter dependencyFilter, CollectRequest request ) throws DependencyResolverException
-    // CHECKSTYLE_ON :LineLength
-    {
-        try
-        {
-            DependencyFilter depFilter = null;
-            if ( dependencyFilter != null )
-            {
-                depFilter = dependencyFilter.transform( new SonatypeAetherFilterTransformer() );
-            }
-
-            final List<ArtifactResult> dependencyResults = repositorySystem.resolveDependencies( session, request,
-                    depFilter );
-
-            // Keep it lazy! Often artifactsResults aren't used, so transforming up front is too expensive
-            return new Iterable<org.apache.maven.shared.transfer.artifact.resolve.ArtifactResult>()
-            {
-                @Override
-                public Iterator<org.apache.maven.shared.transfer.artifact.resolve.ArtifactResult> iterator()
-                {
-                    // CHECKSTYLE_OFF: LineLength
-                    Collection<org.apache.maven.shared.transfer.artifact.resolve.ArtifactResult> artResults =
-                            new ArrayList<>(
-                            dependencyResults.size() );
-                    // CHECKSTYLE_ON: LineLength
-
-                    for ( ArtifactResult artifactResult : dependencyResults )
-                    {
-                        artResults.add( new Maven30ArtifactResult( artifactResult ) );
-                    }
-
-                    return artResults.iterator();
-                }
-            };
-        }
-        catch ( ArtifactResolutionException e )
-        {
-            throw new Maven30DependencyResolverException( e );
-        }
-        catch ( DependencyCollectionException e )
-        {
-            throw new Maven30DependencyResolverException( e );
-        }
-    }
-}
+package org.apache.maven.shared.transfer.dependencies.resolve.internal;
+
+/*
+ * 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.
+ */
+
+import java.util.ArrayList;
+import java.util.Collection;
+import java.util.Collections;
+import java.util.Iterator;
+import java.util.List;
+
+import org.apache.maven.RepositoryUtils;
+import org.apache.maven.artifact.handler.ArtifactHandler;
+import org.apache.maven.artifact.handler.manager.ArtifactHandlerManager;
+import org.apache.maven.model.DependencyManagement;
+import org.apache.maven.model.Model;
+import org.apache.maven.shared.artifact.filter.resolve.TransformableFilter;
+import org.apache.maven.shared.artifact.filter.resolve.transform.SonatypeAetherFilterTransformer;
+import org.apache.maven.shared.transfer.dependencies.DependableCoordinate;
+import org.apache.maven.shared.transfer.dependencies.resolve.DependencyResolverException;
+import org.sonatype.aether.RepositorySystem;
+import org.sonatype.aether.RepositorySystemSession;
+import org.sonatype.aether.artifact.Artifact;
+import org.sonatype.aether.artifact.ArtifactType;
+import org.sonatype.aether.artifact.ArtifactTypeRegistry;
+import org.sonatype.aether.collection.CollectRequest;
+import org.sonatype.aether.collection.DependencyCollectionException;
+import org.sonatype.aether.graph.Dependency;
+import org.sonatype.aether.graph.DependencyFilter;
+import org.sonatype.aether.repository.RemoteRepository;
+import org.sonatype.aether.resolution.ArtifactResolutionException;
+import org.sonatype.aether.resolution.ArtifactResult;
+import org.sonatype.aether.util.artifact.DefaultArtifact;
+import org.sonatype.aether.util.artifact.DefaultArtifactType;
+
+/**
+ *
+ */
+class Maven30DependencyResolver implements MavenDependencyResolver
+{
+    private static final Class<?>[] ARG_CLASSES = new Class<?>[] {org.apache.maven.model.Dependency.class,
+            ArtifactTypeRegistry.class};
+    private final RepositorySystem repositorySystem;
+    private final ArtifactHandlerManager artifactHandlerManager;
+    private final RepositorySystemSession session;
+    private final List<RemoteRepository> aetherRepositories;
+
+    Maven30DependencyResolver( RepositorySystem repositorySystem, ArtifactHandlerManager artifactHandlerManager,
+            RepositorySystemSession session, List<RemoteRepository> aetherRepositories )
+    {
+        super();
+        this.repositorySystem = repositorySystem;
+        this.artifactHandlerManager = artifactHandlerManager;
+        this.session = session;
+        this.aetherRepositories = aetherRepositories;
+    }
+
+    /**
+     * Based on RepositoryUtils#toDependency(org.apache.maven.model.Dependency, ArtifactTypeRegistry)
+     *
+     * @param coordinate  {@link DependableCoordinate}
+     * @param stereotypes {@link org.eclipse.aether.artifact.ArtifactTypeRegistry
+     * @return as Aether Dependency
+     */
+    private static Dependency toDependency( DependableCoordinate coordinate, ArtifactTypeRegistry stereotypes )
+    {
+        ArtifactType stereotype = stereotypes.get( coordinate.getType() );
+        if ( stereotype == null )
+        {
+            stereotype = new DefaultArtifactType( coordinate.getType() );
+        }
+
+        Artifact artifact = new DefaultArtifact( coordinate.getGroupId(), coordinate.getArtifactId(),
+                coordinate.getClassifier(), null, coordinate.getVersion(), null, stereotype );
+
+        return new Dependency( artifact, null );
+    }
+
+    private static Dependency toDependency( org.apache.maven.model.Dependency mavenDependency,
+            ArtifactTypeRegistry typeRegistry ) throws DependencyResolverException
+    {
+        Object[] args = new Object[] {mavenDependency, typeRegistry};
+
+        return Invoker.invoke( RepositoryUtils.class, "toDependency", ARG_CLASSES, args );
+    }
+
+    @Override
+    // CHECKSTYLE_OFF: LineLength
+    public Iterable<org.apache.maven.shared.transfer.artifact.resolve.ArtifactResult> resolveDependencies(
+            DependableCoordinate coordinate, TransformableFilter dependencyFilter )
+        // CHECKSTYLE_ON: LineLength
+            throws DependencyResolverException
+    {
+        ArtifactTypeRegistry typeRegistry = createTypeRegistry();
+
+        Dependency aetherRoot = toDependency( coordinate, typeRegistry );
+
+        CollectRequest request = new CollectRequest( aetherRoot, aetherRepositories );
+
+        return resolveDependencies( dependencyFilter, request );
+    }
+
+    private ArtifactTypeRegistry createTypeRegistry() throws DependencyResolverException
+    {
+        return Invoker.invoke( RepositoryUtils.class, "newArtifactTypeRegistry", ArtifactHandlerManager.class,
+                artifactHandlerManager );
+    }
+
+    @Override
+    // CHECKSTYLE_OFF: LineLength
+    public Iterable<org.apache.maven.shared.transfer.artifact.resolve.ArtifactResult> resolveDependencies( Model model,
+            TransformableFilter dependencyFilter )
+        // CHECKSTYLE_ON: LineLength
+            throws DependencyResolverException
+    {
+        // Are there examples where packaging and type are NOT in sync
+        ArtifactHandler artifactHandler = artifactHandlerManager.getArtifactHandler( model.getPackaging() );
+
+        String extension = artifactHandler != null ? artifactHandler.getExtension() : null;
+
+        Artifact aetherArtifact = new DefaultArtifact( model.getGroupId(), model.getArtifactId(), extension,
+                model.getVersion() );
+
+        Dependency aetherRoot = new Dependency( aetherArtifact, null );
+
+        CollectRequest request = new CollectRequest( aetherRoot, aetherRepositories );
+
+        request.setDependencies( resolveDependencies( model.getDependencies() ) );
+
+        DependencyManagement mavenDependencyManagement = model.getDependencyManagement();
+        if ( mavenDependencyManagement != null )
+        {
+            request.setManagedDependencies( resolveDependencies( mavenDependencyManagement.getDependencies() ) );
+        }
+
+        return resolveDependencies( dependencyFilter, request );
+    }
+
+    /**
+     * @param mavenDependencies {@link org.apache.maven.model.Dependency} can be {@code null}.
+     * @return List of resolved dependencies.
+     * @throws DependencyResolverException in case of a failure of the typeRegistry error.
+     */
+    // CHECKSTYLE_OFF: LineLength
+    private List<Dependency> resolveDependencies( Collection<org.apache.maven.model.Dependency> mavenDependencies )
+            throws DependencyResolverException
+    // CHECKSTYLE_ON: LineLength
+    {
+        if ( mavenDependencies == null )
+        {
+            return Collections.emptyList();
+        }
+
+        ArtifactTypeRegistry typeRegistry = createTypeRegistry();
+
+        List<Dependency> aetherDependencies = new ArrayList<>( mavenDependencies.size() );
+
+        for ( org.apache.maven.model.Dependency mavenDependency : mavenDependencies )
+        {
+            aetherDependencies.add( toDependency( mavenDependency, typeRegistry ) );
+        }
+
+        return aetherDependencies;
+    }
+
+    @Override
+    // CHECKSTYLE_OFF: LineLength
+    public Iterable<org.apache.maven.shared.transfer.artifact.resolve.ArtifactResult> resolveDependencies(
+            Collection<org.apache.maven.model.Dependency> mavenDependencies,
+            Collection<org.apache.maven.model.Dependency> managedMavenDependencies, TransformableFilter filter )
+        // CHECKSTYLE_ON: LineLength
+            throws DependencyResolverException
+    {
+
+        List<Dependency> aetherDependencies = resolveDependencies( mavenDependencies );
+
+        List<Dependency> aetherManagedDependencies = resolveDependencies( managedMavenDependencies );
+
+        CollectRequest request = new CollectRequest( aetherDependencies, aetherManagedDependencies,
+                aetherRepositories );
+
+        return resolveDependencies( filter, request );
+    }
+
+    // CHECKSTYLE_OFF: LineLength
+    private Iterable<org.apache.maven.shared.transfer.artifact.resolve.ArtifactResult> resolveDependencies(
+            TransformableFilter dependencyFilter, CollectRequest request ) throws DependencyResolverException
+    // CHECKSTYLE_ON :LineLength
+    {
+        try
+        {
+            DependencyFilter depFilter = null;
+            if ( dependencyFilter != null )
+            {
+                depFilter = dependencyFilter.transform( new SonatypeAetherFilterTransformer() );
+            }
+
+            final List<ArtifactResult> dependencyResults = repositorySystem.resolveDependencies( session, request,
+                    depFilter );
+
+            // Keep it lazy! Often artifactsResults aren't used, so transforming up front is too expensive
+            return new Iterable<org.apache.maven.shared.transfer.artifact.resolve.ArtifactResult>()
+            {
+                @Override
+                public Iterator<org.apache.maven.shared.transfer.artifact.resolve.ArtifactResult> iterator()
+                {
+                    // CHECKSTYLE_OFF: LineLength
+                    Collection<org.apache.maven.shared.transfer.artifact.resolve.ArtifactResult> artResults =
+                            new ArrayList<>(
+                            dependencyResults.size() );
+                    // CHECKSTYLE_ON: LineLength
+
+                    for ( ArtifactResult artifactResult : dependencyResults )
+                    {
+                        artResults.add( new Maven30ArtifactResult( artifactResult ) );
+                    }
+
+                    return artResults.iterator();
+                }
+            };
+        }
+        catch ( ArtifactResolutionException e )
+        {
+            throw new Maven30DependencyResolverException( e );
+        }
+        catch ( DependencyCollectionException e )
+        {
+            throw new Maven30DependencyResolverException( e );
+        }
+    }
+}
diff --git a/src/main/java/org/apache/maven/shared/transfer/dependencies/resolve/internal/Maven30DependencyResolverException.java b/maven-3.0.x/src/main/java/org/apache/maven/shared/transfer/dependencies/resolve/internal/Maven30DependencyResolverException.java
similarity index 96%
copy from src/main/java/org/apache/maven/shared/transfer/dependencies/resolve/internal/Maven30DependencyResolverException.java
copy to maven-3.0.x/src/main/java/org/apache/maven/shared/transfer/dependencies/resolve/internal/Maven30DependencyResolverException.java
index 699903b..9b5f6fd 100644
--- a/src/main/java/org/apache/maven/shared/transfer/dependencies/resolve/internal/Maven30DependencyResolverException.java
+++ b/maven-3.0.x/src/main/java/org/apache/maven/shared/transfer/dependencies/resolve/internal/Maven30DependencyResolverException.java
@@ -1,61 +1,61 @@
-package org.apache.maven.shared.transfer.dependencies.resolve.internal;
-
-/*
- * 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.
- */
-
-import java.util.List;
-
-import org.apache.maven.shared.transfer.dependencies.resolve.DependencyResolverException;
-import org.apache.maven.shared.transfer.dependencies.resolve.DependencyResult;
-import org.sonatype.aether.collection.DependencyCollectionException;
-import org.sonatype.aether.resolution.ArtifactResolutionException;
-
-/**
- * 
- * @author Robert Scholte
- *
- */
-class Maven30DependencyResolverException extends DependencyResolverException
-{
-    private DependencyCollectionException dce;
-    
-    protected Maven30DependencyResolverException( DependencyCollectionException e )
-    {
-        super( e );
-        this.dce = e;
-    }
-    
-    Maven30DependencyResolverException( ArtifactResolutionException e )
-    {
-        super( e );
-    }
-    
-    @Override
-    public DependencyResult getResult()
-    {
-        return new DependencyResult()
-        {
-            @Override
-            public List<Exception> getCollectorExceptions()
-            {
-                return dce.getResult().getExceptions();
-            }
-        };
-    }
-}
+package org.apache.maven.shared.transfer.dependencies.resolve.internal;
+
+/*
+ * 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.
+ */
+
+import java.util.List;
+
+import org.apache.maven.shared.transfer.dependencies.resolve.DependencyResolverException;
+import org.apache.maven.shared.transfer.dependencies.resolve.DependencyResult;
+import org.sonatype.aether.collection.DependencyCollectionException;
+import org.sonatype.aether.resolution.ArtifactResolutionException;
+
+/**
+ * 
+ * @author Robert Scholte
+ *
+ */
+class Maven30DependencyResolverException extends DependencyResolverException
+{
+    private DependencyCollectionException dce;
+    
+    protected Maven30DependencyResolverException( DependencyCollectionException e )
+    {
+        super( e );
+        this.dce = e;
+    }
+    
+    Maven30DependencyResolverException( ArtifactResolutionException e )
+    {
+        super( e );
+    }
+    
+    @Override
+    public DependencyResult getResult()
+    {
+        return new DependencyResult()
+        {
+            @Override
+            public List<Exception> getCollectorExceptions()
+            {
+                return dce.getResult().getExceptions();
+            }
+        };
+    }
+}
diff --git a/src/main/java/org/apache/maven/shared/transfer/dependencies/resolve/internal/Maven31ArtifactResult.java b/maven-3.0.x/src/main/java/org/apache/maven/shared/transfer/dependencies/resolve/internal/Maven31ArtifactResult.java
similarity index 97%
copy from src/main/java/org/apache/maven/shared/transfer/dependencies/resolve/internal/Maven31ArtifactResult.java
copy to maven-3.0.x/src/main/java/org/apache/maven/shared/transfer/dependencies/resolve/internal/Maven31ArtifactResult.java
index fe26ce4..48ba799 100644
--- a/src/main/java/org/apache/maven/shared/transfer/dependencies/resolve/internal/Maven31ArtifactResult.java
+++ b/maven-3.0.x/src/main/java/org/apache/maven/shared/transfer/dependencies/resolve/internal/Maven31ArtifactResult.java
@@ -1,59 +1,59 @@
-package org.apache.maven.shared.transfer.dependencies.resolve.internal;
-
-/*
- * 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.
- */
-
-import org.apache.maven.RepositoryUtils;
-import org.apache.maven.shared.transfer.dependencies.resolve.DependencyResolverException;
-import org.eclipse.aether.resolution.ArtifactResult;
-import org.eclipse.aether.artifact.Artifact;
-
-/**
- * {@link org.apache.maven.shared.transfer.artifact.resolve.ArtifactResult} wrapper for {@link ArtifactResult}
- * 
- * @author Robert Scholte
- * @since 3.0
- */
-class Maven31ArtifactResult
-    implements org.apache.maven.shared.transfer.artifact.resolve.ArtifactResult
-{
-    private final ArtifactResult artifactResult;
-
-    /**
-     * @param artifactResult {@link ArtifactResult}
-     */
-    Maven31ArtifactResult( ArtifactResult artifactResult )
-    {
-        this.artifactResult = artifactResult;
-    }
-
-    @Override
-    public org.apache.maven.artifact.Artifact getArtifact()
-    {
-        try
-        {
-            return Invoker.invoke( RepositoryUtils.class, "toArtifact",
-                                                                        Artifact.class, artifactResult.getArtifact() );
-        }
-        catch ( DependencyResolverException e )
-        {
-            throw new RuntimeException( e );
-        }
-    }
-}
+package org.apache.maven.shared.transfer.dependencies.resolve.internal;
+
+/*
+ * 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.
+ */
+
+import org.apache.maven.RepositoryUtils;
+import org.apache.maven.shared.transfer.dependencies.resolve.DependencyResolverException;
+import org.eclipse.aether.resolution.ArtifactResult;
+import org.eclipse.aether.artifact.Artifact;
+
+/**
+ * {@link org.apache.maven.shared.transfer.artifact.resolve.ArtifactResult} wrapper for {@link ArtifactResult}
+ * 
+ * @author Robert Scholte
+ * @since 3.0
+ */
+class Maven31ArtifactResult
+    implements org.apache.maven.shared.transfer.artifact.resolve.ArtifactResult
+{
+    private final ArtifactResult artifactResult;
+
+    /**
+     * @param artifactResult {@link ArtifactResult}
+     */
+    Maven31ArtifactResult( ArtifactResult artifactResult )
+    {
+        this.artifactResult = artifactResult;
+    }
+
+    @Override
+    public org.apache.maven.artifact.Artifact getArtifact()
+    {
+        try
+        {
+            return Invoker.invoke( RepositoryUtils.class, "toArtifact",
+                                                                        Artifact.class, artifactResult.getArtifact() );
+        }
+        catch ( DependencyResolverException e )
+        {
+            throw new RuntimeException( e );
+        }
+    }
+}
diff --git a/src/main/java/org/apache/maven/shared/transfer/dependencies/resolve/internal/Maven31DependencyResolver.java b/maven-3.0.x/src/main/java/org/apache/maven/shared/transfer/dependencies/resolve/internal/Maven31DependencyResolver.java
similarity index 97%
copy from src/main/java/org/apache/maven/shared/transfer/dependencies/resolve/internal/Maven31DependencyResolver.java
copy to maven-3.0.x/src/main/java/org/apache/maven/shared/transfer/dependencies/resolve/internal/Maven31DependencyResolver.java
index ea35bc5..d735e85 100644
--- a/src/main/java/org/apache/maven/shared/transfer/dependencies/resolve/internal/Maven31DependencyResolver.java
+++ b/maven-3.0.x/src/main/java/org/apache/maven/shared/transfer/dependencies/resolve/internal/Maven31DependencyResolver.java
@@ -1,243 +1,243 @@
-package org.apache.maven.shared.transfer.dependencies.resolve.internal;
-
-/*
- * 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.
- */
-
-import java.util.ArrayList;
-import java.util.Collection;
-import java.util.Collections;
-import java.util.Iterator;
-import java.util.List;
-
-import org.apache.maven.RepositoryUtils;
-import org.apache.maven.artifact.handler.ArtifactHandler;
-import org.apache.maven.artifact.handler.manager.ArtifactHandlerManager;
-import org.apache.maven.model.DependencyManagement;
-import org.apache.maven.model.Model;
-import org.apache.maven.shared.artifact.filter.resolve.TransformableFilter;
-import org.apache.maven.shared.artifact.filter.resolve.transform.EclipseAetherFilterTransformer;
-import org.apache.maven.shared.transfer.dependencies.DependableCoordinate;
-import org.apache.maven.shared.transfer.dependencies.resolve.DependencyResolverException;
-import org.eclipse.aether.RepositorySystem;
-import org.eclipse.aether.RepositorySystemSession;
-import org.eclipse.aether.artifact.Artifact;
-import org.eclipse.aether.artifact.ArtifactType;
-import org.eclipse.aether.artifact.ArtifactTypeRegistry;
-import org.eclipse.aether.artifact.DefaultArtifact;
-import org.eclipse.aether.artifact.DefaultArtifactType;
-import org.eclipse.aether.collection.CollectRequest;
-import org.eclipse.aether.graph.Dependency;
-import org.eclipse.aether.graph.DependencyFilter;
-import org.eclipse.aether.repository.RemoteRepository;
-import org.eclipse.aether.resolution.ArtifactResult;
-import org.eclipse.aether.resolution.DependencyRequest;
-import org.eclipse.aether.resolution.DependencyResolutionException;
-import org.eclipse.aether.resolution.DependencyResult;
-
-/**
- *
- */
-class Maven31DependencyResolver implements MavenDependencyResolver
-{
-    private static final Class<?>[] ARG_CLASSES = new Class<?>[] {org.apache.maven.model.Dependency.class,
-            ArtifactTypeRegistry.class};
-    private final RepositorySystem repositorySystem;
-    private final ArtifactHandlerManager artifactHandlerManager;
-    private final RepositorySystemSession session;
-    private final List<RemoteRepository> aetherRepositories;
-
-    Maven31DependencyResolver( RepositorySystem repositorySystem, ArtifactHandlerManager artifactHandlerManager,
-            RepositorySystemSession session, List<RemoteRepository> aetherRepositories )
-    {
-        super();
-        this.repositorySystem = repositorySystem;
-        this.artifactHandlerManager = artifactHandlerManager;
-        this.session = session;
-        this.aetherRepositories = aetherRepositories;
-    }
-
-    /**
-     * Based on RepositoryUtils#toDependency(org.apache.maven.model.Dependency, ArtifactTypeRegistry)
-     *
-     * @param coordinate  {@link DependableCoordinate}
-     * @param stereotypes {@link ArtifactTypeRegistry
-     * @return as Aether Dependency
-     */
-    private static Dependency toDependency( DependableCoordinate coordinate, ArtifactTypeRegistry stereotypes )
-    {
-        ArtifactType stereotype = stereotypes.get( coordinate.getType() );
-        if ( stereotype == null )
-        {
-            stereotype = new DefaultArtifactType( coordinate.getType() );
-        }
-
-        Artifact artifact = new DefaultArtifact( coordinate.getGroupId(), coordinate.getArtifactId(),
-                coordinate.getClassifier(), null, coordinate.getVersion(), null, stereotype );
-
-        return new Dependency( artifact, null );
-    }
-
-    private static Dependency toDependency( org.apache.maven.model.Dependency root, ArtifactTypeRegistry typeRegistry )
-            throws DependencyResolverException
-    {
-        Object[] args = new Object[] {root, typeRegistry};
-
-        return Invoker.invoke( RepositoryUtils.class, "toDependency", ARG_CLASSES, args );
-    }
-
-    @Override
-    // CHECKSTYLE_OFF: LineLength
-    public Iterable<org.apache.maven.shared.transfer.artifact.resolve.ArtifactResult> resolveDependencies(
-            DependableCoordinate coordinate, TransformableFilter dependencyFilter )
-        // CHECKSTYLE_ON: LineLength
-            throws DependencyResolverException
-    {
-        ArtifactTypeRegistry typeRegistry = createTypeRegistry();
-
-        Dependency aetherRoot = toDependency( coordinate, typeRegistry );
-
-        CollectRequest request = new CollectRequest( aetherRoot, aetherRepositories );
-
-        return resolveDependencies( dependencyFilter, request );
-    }
-
-    private ArtifactTypeRegistry createTypeRegistry() throws DependencyResolverException
-    {
-        return Invoker.invoke( RepositoryUtils.class, "newArtifactTypeRegistry", ArtifactHandlerManager.class,
-                artifactHandlerManager );
-    }
-
-    @Override
-    // CHECKSTYLE_OFF: LineLength
-    public Iterable<org.apache.maven.shared.transfer.artifact.resolve.ArtifactResult> resolveDependencies( Model model,
-            TransformableFilter dependencyFilter )
-        // CHECKSTYLE_ON: LineLength
-            throws DependencyResolverException
-    {
-        // Are there examples where packaging and type are NOT in sync
-        ArtifactHandler artifactHandler = artifactHandlerManager.getArtifactHandler( model.getPackaging() );
-
-        String extension = artifactHandler != null ? artifactHandler.getExtension() : null;
-
-        Artifact aetherArtifact = new DefaultArtifact( model.getGroupId(), model.getArtifactId(), extension,
-                model.getVersion() );
-
-        Dependency aetherRoot = new Dependency( aetherArtifact, null );
-
-        CollectRequest request = new CollectRequest( aetherRoot, aetherRepositories );
-
-        request.setDependencies( resolveDependencies( model.getDependencies() ) );
-
-        DependencyManagement mavenDependencyManagement = model.getDependencyManagement();
-        if ( mavenDependencyManagement != null )
-        {
-            request.setManagedDependencies( resolveDependencies( model.getDependencyManagement().getDependencies() ) );
-        }
-
-        return resolveDependencies( dependencyFilter, request );
-    }
-
-    /**
-     * @param mavenDependencies {@link org.apache.maven.model.Dependency} can be {@code null}.
-     * @return List of resolved dependencies.
-     * @throws DependencyResolverException in case of a failure of the typeRegistry error.
-     */
-    // CHECKSTYLE_OFF: LineLength
-    private List<Dependency> resolveDependencies( Collection<org.apache.maven.model.Dependency> mavenDependencies )
-            throws DependencyResolverException
-    // CHECKSTYLE_ON: LineLength
-    {
-        if ( mavenDependencies == null )
-        {
-            return Collections.emptyList();
-        }
-
-        ArtifactTypeRegistry typeRegistry = createTypeRegistry();
-
-        List<Dependency> aetherDependencies = new ArrayList<>( mavenDependencies.size() );
-
-        for ( org.apache.maven.model.Dependency mavenDependency : mavenDependencies )
-        {
-            aetherDependencies.add( toDependency( mavenDependency, typeRegistry ) );
-        }
-
-        return aetherDependencies;
-    }
-
-    @Override
-    // CHECKSTYLE_OFF: LineLength
-    public Iterable<org.apache.maven.shared.transfer.artifact.resolve.ArtifactResult> resolveDependencies(
-            Collection<org.apache.maven.model.Dependency> mavenDependencies,
-            Collection<org.apache.maven.model.Dependency> managedMavenDependencies, TransformableFilter filter )
-        // CHECKSTYLE_ON: LineLength
-            throws DependencyResolverException
-    {
-
-        List<Dependency> aetherDeps = resolveDependencies( mavenDependencies );
-
-        List<Dependency> aetherManagedDependencies = resolveDependencies( managedMavenDependencies );
-
-        CollectRequest request = new CollectRequest( aetherDeps, aetherManagedDependencies, aetherRepositories );
-
-        return resolveDependencies( filter, request );
-    }
-
-    // CHECKSTYLE_OFF: LineLength
-    private Iterable<org.apache.maven.shared.transfer.artifact.resolve.ArtifactResult> resolveDependencies(
-            TransformableFilter dependencyFilter, CollectRequest request ) throws DependencyResolverException
-    // CHECKSTYLE_ON: LineLength
-    {
-        try
-        {
-            DependencyFilter depFilter = null;
-            if ( dependencyFilter != null )
-            {
-                depFilter = dependencyFilter.transform( new EclipseAetherFilterTransformer() );
-            }
-
-            DependencyRequest depRequest = new DependencyRequest( request, depFilter );
-
-            final DependencyResult dependencyResults = repositorySystem.resolveDependencies( session, depRequest );
-
-            // Keep it lazy! Often artifactsResults aren't used, so transforming up front is too expensive
-            return new Iterable<org.apache.maven.shared.transfer.artifact.resolve.ArtifactResult>()
-            {
-                @Override
-                public Iterator<org.apache.maven.shared.transfer.artifact.resolve.ArtifactResult> iterator()
-                {
-                    // CHECKSTYLE_OFF: LineLength
-                    Collection<org.apache.maven.shared.transfer.artifact.resolve.ArtifactResult> artResults = new ArrayList<>(
-                            dependencyResults.getArtifactResults().size() );
-                    // CHECKSTYLE_ON: LineLength
-
-                    for ( ArtifactResult artifactResult : dependencyResults.getArtifactResults() )
-                    {
-                        artResults.add( new Maven31ArtifactResult( artifactResult ) );
-                    }
-
-                    return artResults.iterator();
-                }
-            };
-        }
-        catch ( DependencyResolutionException e )
-        {
-            throw new Maven31DependencyResolverException( e );
-        }
-    }
-}
+package org.apache.maven.shared.transfer.dependencies.resolve.internal;
+
+/*
+ * 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.
+ */
+
+import java.util.ArrayList;
+import java.util.Collection;
+import java.util.Collections;
+import java.util.Iterator;
+import java.util.List;
+
+import org.apache.maven.RepositoryUtils;
+import org.apache.maven.artifact.handler.ArtifactHandler;
+import org.apache.maven.artifact.handler.manager.ArtifactHandlerManager;
+import org.apache.maven.model.DependencyManagement;
+import org.apache.maven.model.Model;
+import org.apache.maven.shared.artifact.filter.resolve.TransformableFilter;
+import org.apache.maven.shared.artifact.filter.resolve.transform.EclipseAetherFilterTransformer;
+import org.apache.maven.shared.transfer.dependencies.DependableCoordinate;
+import org.apache.maven.shared.transfer.dependencies.resolve.DependencyResolverException;
+import org.eclipse.aether.RepositorySystem;
+import org.eclipse.aether.RepositorySystemSession;
+import org.eclipse.aether.artifact.Artifact;
+import org.eclipse.aether.artifact.ArtifactType;
+import org.eclipse.aether.artifact.ArtifactTypeRegistry;
+import org.eclipse.aether.artifact.DefaultArtifact;
+import org.eclipse.aether.artifact.DefaultArtifactType;
+import org.eclipse.aether.collection.CollectRequest;
+import org.eclipse.aether.graph.Dependency;
+import org.eclipse.aether.graph.DependencyFilter;
+import org.eclipse.aether.repository.RemoteRepository;
+import org.eclipse.aether.resolution.ArtifactResult;
+import org.eclipse.aether.resolution.DependencyRequest;
+import org.eclipse.aether.resolution.DependencyResolutionException;
+import org.eclipse.aether.resolution.DependencyResult;
+
+/**
+ *
+ */
+class Maven31DependencyResolver implements MavenDependencyResolver
+{
+    private static final Class<?>[] ARG_CLASSES = new Class<?>[] {org.apache.maven.model.Dependency.class,
+            ArtifactTypeRegistry.class};
+    private final RepositorySystem repositorySystem;
+    private final ArtifactHandlerManager artifactHandlerManager;
+    private final RepositorySystemSession session;
+    private final List<RemoteRepository> aetherRepositories;
+
+    Maven31DependencyResolver( RepositorySystem repositorySystem, ArtifactHandlerManager artifactHandlerManager,
+            RepositorySystemSession session, List<RemoteRepository> aetherRepositories )
+    {
+        super();
+        this.repositorySystem = repositorySystem;
+        this.artifactHandlerManager = artifactHandlerManager;
+        this.session = session;
+        this.aetherRepositories = aetherRepositories;
+    }
+
+    /**
+     * Based on RepositoryUtils#toDependency(org.apache.maven.model.Dependency, ArtifactTypeRegistry)
+     *
+     * @param coordinate  {@link DependableCoordinate}
+     * @param stereotypes {@link ArtifactTypeRegistry
+     * @return as Aether Dependency
+     */
+    private static Dependency toDependency( DependableCoordinate coordinate, ArtifactTypeRegistry stereotypes )
+    {
+        ArtifactType stereotype = stereotypes.get( coordinate.getType() );
+        if ( stereotype == null )
+        {
+            stereotype = new DefaultArtifactType( coordinate.getType() );
+        }
+
+        Artifact artifact = new DefaultArtifact( coordinate.getGroupId(), coordinate.getArtifactId(),
+                coordinate.getClassifier(), null, coordinate.getVersion(), null, stereotype );
+
+        return new Dependency( artifact, null );
+    }
+
+    private static Dependency toDependency( org.apache.maven.model.Dependency root, ArtifactTypeRegistry typeRegistry )
+            throws DependencyResolverException
+    {
+        Object[] args = new Object[] {root, typeRegistry};
+
+        return Invoker.invoke( RepositoryUtils.class, "toDependency", ARG_CLASSES, args );
+    }
+
+    @Override
+    // CHECKSTYLE_OFF: LineLength
+    public Iterable<org.apache.maven.shared.transfer.artifact.resolve.ArtifactResult> resolveDependencies(
+            DependableCoordinate coordinate, TransformableFilter dependencyFilter )
+        // CHECKSTYLE_ON: LineLength
+            throws DependencyResolverException
+    {
+        ArtifactTypeRegistry typeRegistry = createTypeRegistry();
+
+        Dependency aetherRoot = toDependency( coordinate, typeRegistry );
+
+        CollectRequest request = new CollectRequest( aetherRoot, aetherRepositories );
+
+        return resolveDependencies( dependencyFilter, request );
+    }
+
+    private ArtifactTypeRegistry createTypeRegistry() throws DependencyResolverException
+    {
+        return Invoker.invoke( RepositoryUtils.class, "newArtifactTypeRegistry", ArtifactHandlerManager.class,
+                artifactHandlerManager );
+    }
+
+    @Override
+    // CHECKSTYLE_OFF: LineLength
+    public Iterable<org.apache.maven.shared.transfer.artifact.resolve.ArtifactResult> resolveDependencies( Model model,
+            TransformableFilter dependencyFilter )
+        // CHECKSTYLE_ON: LineLength
+            throws DependencyResolverException
+    {
+        // Are there examples where packaging and type are NOT in sync
+        ArtifactHandler artifactHandler = artifactHandlerManager.getArtifactHandler( model.getPackaging() );
+
+        String extension = artifactHandler != null ? artifactHandler.getExtension() : null;
+
+        Artifact aetherArtifact = new DefaultArtifact( model.getGroupId(), model.getArtifactId(), extension,
+                model.getVersion() );
+
+        Dependency aetherRoot = new Dependency( aetherArtifact, null );
+
+        CollectRequest request = new CollectRequest( aetherRoot, aetherRepositories );
+
+        request.setDependencies( resolveDependencies( model.getDependencies() ) );
+
+        DependencyManagement mavenDependencyManagement = model.getDependencyManagement();
+        if ( mavenDependencyManagement != null )
+        {
+            request.setManagedDependencies( resolveDependencies( model.getDependencyManagement().getDependencies() ) );
+        }
+
+        return resolveDependencies( dependencyFilter, request );
+    }
+
+    /**
+     * @param mavenDependencies {@link org.apache.maven.model.Dependency} can be {@code null}.
+     * @return List of resolved dependencies.
+     * @throws DependencyResolverException in case of a failure of the typeRegistry error.
+     */
+    // CHECKSTYLE_OFF: LineLength
+    private List<Dependency> resolveDependencies( Collection<org.apache.maven.model.Dependency> mavenDependencies )
+            throws DependencyResolverException
+    // CHECKSTYLE_ON: LineLength
+    {
+        if ( mavenDependencies == null )
+        {
+            return Collections.emptyList();
+        }
+
+        ArtifactTypeRegistry typeRegistry = createTypeRegistry();
+
+        List<Dependency> aetherDependencies = new ArrayList<>( mavenDependencies.size() );
+
+        for ( org.apache.maven.model.Dependency mavenDependency : mavenDependencies )
+        {
+            aetherDependencies.add( toDependency( mavenDependency, typeRegistry ) );
+        }
+
+        return aetherDependencies;
+    }
+
+    @Override
+    // CHECKSTYLE_OFF: LineLength
+    public Iterable<org.apache.maven.shared.transfer.artifact.resolve.ArtifactResult> resolveDependencies(
+            Collection<org.apache.maven.model.Dependency> mavenDependencies,
+            Collection<org.apache.maven.model.Dependency> managedMavenDependencies, TransformableFilter filter )
+        // CHECKSTYLE_ON: LineLength
+            throws DependencyResolverException
+    {
+
+        List<Dependency> aetherDeps = resolveDependencies( mavenDependencies );
+
+        List<Dependency> aetherManagedDependencies = resolveDependencies( managedMavenDependencies );
+
+        CollectRequest request = new CollectRequest( aetherDeps, aetherManagedDependencies, aetherRepositories );
+
+        return resolveDependencies( filter, request );
+    }
+
+    // CHECKSTYLE_OFF: LineLength
+    private Iterable<org.apache.maven.shared.transfer.artifact.resolve.ArtifactResult> resolveDependencies(
+            TransformableFilter dependencyFilter, CollectRequest request ) throws DependencyResolverException
+    // CHECKSTYLE_ON: LineLength
+    {
+        try
+        {
+            DependencyFilter depFilter = null;
+            if ( dependencyFilter != null )
+            {
+                depFilter = dependencyFilter.transform( new EclipseAetherFilterTransformer() );
+            }
+
+            DependencyRequest depRequest = new DependencyRequest( request, depFilter );
+
+            final DependencyResult dependencyResults = repositorySystem.resolveDependencies( session, depRequest );
+
+            // Keep it lazy! Often artifactsResults aren't used, so transforming up front is too expensive
+            return new Iterable<org.apache.maven.shared.transfer.artifact.resolve.ArtifactResult>()
+            {
+                @Override
+                public Iterator<org.apache.maven.shared.transfer.artifact.resolve.ArtifactResult> iterator()
+                {
+                    // CHECKSTYLE_OFF: LineLength
+                    Collection<org.apache.maven.shared.transfer.artifact.resolve.ArtifactResult> artResults = new ArrayList<>(
+                            dependencyResults.getArtifactResults().size() );
+                    // CHECKSTYLE_ON: LineLength
+
+                    for ( ArtifactResult artifactResult : dependencyResults.getArtifactResults() )
+                    {
+                        artResults.add( new Maven31ArtifactResult( artifactResult ) );
+                    }
+
+                    return artResults.iterator();
+                }
+            };
+        }
+        catch ( DependencyResolutionException e )
+        {
+            throw new Maven31DependencyResolverException( e );
+        }
+    }
+}
diff --git a/src/main/java/org/apache/maven/shared/transfer/dependencies/resolve/internal/Maven31DependencyResolverException.java b/maven-3.0.x/src/main/java/org/apache/maven/shared/transfer/dependencies/resolve/internal/Maven31DependencyResolverException.java
similarity index 96%
copy from src/main/java/org/apache/maven/shared/transfer/dependencies/resolve/internal/Maven31DependencyResolverException.java
copy to maven-3.0.x/src/main/java/org/apache/maven/shared/transfer/dependencies/resolve/internal/Maven31DependencyResolverException.java
index c892033..ef6185d 100644
--- a/src/main/java/org/apache/maven/shared/transfer/dependencies/resolve/internal/Maven31DependencyResolverException.java
+++ b/maven-3.0.x/src/main/java/org/apache/maven/shared/transfer/dependencies/resolve/internal/Maven31DependencyResolverException.java
@@ -1,55 +1,55 @@
-package org.apache.maven.shared.transfer.dependencies.resolve.internal;
-
-/*
- * 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.
- */
-
-import java.util.List;
-
-import org.apache.maven.shared.transfer.dependencies.resolve.DependencyResolverException;
-import org.apache.maven.shared.transfer.dependencies.resolve.DependencyResult;
-import org.eclipse.aether.resolution.DependencyResolutionException;
-
-/**
- * 
- * @author Robert Scholte
- *
- */
-class Maven31DependencyResolverException extends DependencyResolverException
-{
-    private DependencyResolutionException e;
-
-    Maven31DependencyResolverException( DependencyResolutionException e )
-    {
-        super( e );
-        this.e = e;
-    }
-    
-    @Override
-    public DependencyResult getResult()
-    {
-        return new DependencyResult()
-        {
-            @Override
-            public List<Exception> getCollectorExceptions()
-            {
-                return e.getResult().getCollectExceptions();
-            }
-        };
-    }
-}
+package org.apache.maven.shared.transfer.dependencies.resolve.internal;
+
+/*
+ * 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.
+ */
+
+import java.util.List;
+
+import org.apache.maven.shared.transfer.dependencies.resolve.DependencyResolverException;
+import org.apache.maven.shared.transfer.dependencies.resolve.DependencyResult;
+import org.eclipse.aether.resolution.DependencyResolutionException;
+
+/**
+ * 
+ * @author Robert Scholte
+ *
+ */
+class Maven31DependencyResolverException extends DependencyResolverException
+{
+    private DependencyResolutionException e;
+
+    Maven31DependencyResolverException( DependencyResolutionException e )
+    {
+        super( e );
+        this.e = e;
+    }
+    
+    @Override
+    public DependencyResult getResult()
+    {
+        return new DependencyResult()
+        {
+            @Override
+            public List<Exception> getCollectorExceptions()
+            {
+                return e.getResult().getCollectExceptions();
+            }
+        };
+    }
+}
diff --git a/src/main/java/org/apache/maven/shared/transfer/dependencies/resolve/internal/MavenDependencyResolver.java b/maven-3.0.x/src/main/java/org/apache/maven/shared/transfer/dependencies/resolve/internal/MavenDependencyResolver.java
similarity index 100%
copy from src/main/java/org/apache/maven/shared/transfer/dependencies/resolve/internal/MavenDependencyResolver.java
copy to maven-3.0.x/src/main/java/org/apache/maven/shared/transfer/dependencies/resolve/internal/MavenDependencyResolver.java
diff --git a/src/main/java/org/apache/maven/shared/transfer/graph/DependencyNode.java b/maven-3.0.x/src/main/java/org/apache/maven/shared/transfer/graph/DependencyNode.java
similarity index 100%
copy from src/main/java/org/apache/maven/shared/transfer/graph/DependencyNode.java
copy to maven-3.0.x/src/main/java/org/apache/maven/shared/transfer/graph/DependencyNode.java
diff --git a/src/main/java/org/apache/maven/shared/transfer/graph/DependencyVisitor.java b/maven-3.0.x/src/main/java/org/apache/maven/shared/transfer/graph/DependencyVisitor.java
similarity index 100%
copy from src/main/java/org/apache/maven/shared/transfer/graph/DependencyVisitor.java
copy to maven-3.0.x/src/main/java/org/apache/maven/shared/transfer/graph/DependencyVisitor.java
diff --git a/src/main/java/org/apache/maven/shared/transfer/metadata/ArtifactMetadata.java b/maven-3.0.x/src/main/java/org/apache/maven/shared/transfer/metadata/ArtifactMetadata.java
similarity index 100%
copy from src/main/java/org/apache/maven/shared/transfer/metadata/ArtifactMetadata.java
copy to maven-3.0.x/src/main/java/org/apache/maven/shared/transfer/metadata/ArtifactMetadata.java
diff --git a/src/main/java/org/apache/maven/shared/transfer/metadata/internal/Maven30MetadataBridge.java b/maven-3.0.x/src/main/java/org/apache/maven/shared/transfer/metadata/internal/Maven30MetadataBridge.java
similarity index 100%
copy from src/main/java/org/apache/maven/shared/transfer/metadata/internal/Maven30MetadataBridge.java
copy to maven-3.0.x/src/main/java/org/apache/maven/shared/transfer/metadata/internal/Maven30MetadataBridge.java
diff --git a/src/main/java/org/apache/maven/shared/transfer/metadata/internal/Maven31MetadataBridge.java b/maven-3.0.x/src/main/java/org/apache/maven/shared/transfer/metadata/internal/Maven31MetadataBridge.java
similarity index 100%
copy from src/main/java/org/apache/maven/shared/transfer/metadata/internal/Maven31MetadataBridge.java
copy to maven-3.0.x/src/main/java/org/apache/maven/shared/transfer/metadata/internal/Maven31MetadataBridge.java
diff --git a/src/main/java/org/apache/maven/shared/transfer/project/MavenAetherUtils.java b/maven-3.0.x/src/main/java/org/apache/maven/shared/transfer/project/MavenAetherUtils.java
similarity index 100%
copy from src/main/java/org/apache/maven/shared/transfer/project/MavenAetherUtils.java
copy to maven-3.0.x/src/main/java/org/apache/maven/shared/transfer/project/MavenAetherUtils.java
diff --git a/src/main/java/org/apache/maven/shared/transfer/project/NoFileAssignedException.java b/maven-3.0.x/src/main/java/org/apache/maven/shared/transfer/project/NoFileAssignedException.java
similarity index 100%
copy from src/main/java/org/apache/maven/shared/transfer/project/NoFileAssignedException.java
copy to maven-3.0.x/src/main/java/org/apache/maven/shared/transfer/project/NoFileAssignedException.java
diff --git a/src/main/java/org/apache/maven/shared/transfer/project/deploy/ProjectDeployer.java b/maven-3.0.x/src/main/java/org/apache/maven/shared/transfer/project/deploy/ProjectDeployer.java
similarity index 100%
copy from src/main/java/org/apache/maven/shared/transfer/project/deploy/ProjectDeployer.java
copy to maven-3.0.x/src/main/java/org/apache/maven/shared/transfer/project/deploy/ProjectDeployer.java
diff --git a/src/main/java/org/apache/maven/shared/transfer/project/deploy/ProjectDeployerRequest.java b/maven-3.0.x/src/main/java/org/apache/maven/shared/transfer/project/deploy/ProjectDeployerRequest.java
similarity index 96%
copy from src/main/java/org/apache/maven/shared/transfer/project/deploy/ProjectDeployerRequest.java
copy to maven-3.0.x/src/main/java/org/apache/maven/shared/transfer/project/deploy/ProjectDeployerRequest.java
index 206606a..aea581a 100644
--- a/src/main/java/org/apache/maven/shared/transfer/project/deploy/ProjectDeployerRequest.java
+++ b/maven-3.0.x/src/main/java/org/apache/maven/shared/transfer/project/deploy/ProjectDeployerRequest.java
@@ -1,132 +1,132 @@
-package org.apache.maven.shared.transfer.project.deploy;
-
-/*
- * 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.
- */
-
-import org.apache.maven.project.MavenProject;
-
-/**
- * 
- * @author Robert Scholte
- */
-public class ProjectDeployerRequest
-{
-
-    private int retryFailedDeploymentCount;
-
-    // From DeployMojo
-
-    private MavenProject project;
-
-    private String altDeploymentRepository;
-
-    private String altSnapshotDeploymentRepository;
-
-    private String altReleaseDeploymentRepository;
-
-    /**
-     * @return the retryFailedDeploymentCount
-     */
-    public int getRetryFailedDeploymentCount()
-    {
-        return retryFailedDeploymentCount;
-    }
-
-    /**
-     * @param theRetryFailedDeploymentCountToBeSet the retryFailedDeploymentCount to set
-     * @return {@link ProjectDeployerRequest} for chaining.
-     */
-    public ProjectDeployerRequest setRetryFailedDeploymentCount( int theRetryFailedDeploymentCountToBeSet )
-    {
-        this.retryFailedDeploymentCount = theRetryFailedDeploymentCountToBeSet;
-        return this;
-    }
-
-    /**
-     * @return the project
-     */
-    public MavenProject getProject()
-    {
-        return project;
-    }
-
-    /**
-     * @param theProjectToBeSet the {link {@link MavenProject project} to set
-     * @return {@link ProjectDeployerRequest} for chaining.
-     */
-    public ProjectDeployerRequest setProject( MavenProject theProjectToBeSet )
-    {
-        this.project = theProjectToBeSet;
-        return this;
-    }
-
-    /**
-     * @return the altDeploymentRepository
-     */
-    public String getAltDeploymentRepository()
-    {
-        return altDeploymentRepository;
-    }
-
-    /**
-     * @param theAltDeploymentRepositoryToBeSet the altDeploymentRepository to set
-     * @return {@link ProjectDeployerRequest} for chaining.
-     */
-    public ProjectDeployerRequest setAltDeploymentRepository( String theAltDeploymentRepositoryToBeSet )
-    {
-        this.altDeploymentRepository = theAltDeploymentRepositoryToBeSet;
-        return this;
-    }
-
-    /**
-     * @return the altSnapshotDeploymentRepository
-     */
-    public String getAltSnapshotDeploymentRepository()
-    {
-        return altSnapshotDeploymentRepository;
-    }
-
-    /**
-     * @param theAltSnapshotDeploymentRepositoryToBeSet the altSnapshotDeploymentRepository to set
-     * @return {@link ProjectDeployerRequest} for chaining.
-     */
-    public ProjectDeployerRequest setAltSnapshotDeploymentRepository( String theAltSnapshotDeploymentRepositoryToBeSet )
-    {
-        this.altSnapshotDeploymentRepository = theAltSnapshotDeploymentRepositoryToBeSet;
-        return this;
-    }
-
-    /**
-     * @return the altReleaseDeploymentRepository
-     */
-    public String getAltReleaseDeploymentRepository()
-    {
-        return altReleaseDeploymentRepository;
-    }
-
-    /**
-     * @param theAltReleaseDeploymentRepositoryToBeSet the altReleaseDeploymentRepository to set
-     * @return {@link ProjectDeployerRequest} for chaining.
-     */
-    public ProjectDeployerRequest setAltReleaseDeploymentRepository( String theAltReleaseDeploymentRepositoryToBeSet )
-    {
-        this.altReleaseDeploymentRepository = theAltReleaseDeploymentRepositoryToBeSet;
-        return this;
-    }
-}
+package org.apache.maven.shared.transfer.project.deploy;
+
+/*
+ * 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.
+ */
+
+import org.apache.maven.project.MavenProject;
+
+/**
+ * 
+ * @author Robert Scholte
+ */
+public class ProjectDeployerRequest
+{
+
+    private int retryFailedDeploymentCount;
+
+    // From DeployMojo
+
+    private MavenProject project;
+
+    private String altDeploymentRepository;
+
+    private String altSnapshotDeploymentRepository;
+
+    private String altReleaseDeploymentRepository;
+
+    /**
+     * @return the retryFailedDeploymentCount
+     */
+    public int getRetryFailedDeploymentCount()
+    {
+        return retryFailedDeploymentCount;
+    }
+
+    /**
+     * @param theRetryFailedDeploymentCountToBeSet the retryFailedDeploymentCount to set
+     * @return {@link ProjectDeployerRequest} for chaining.
+     */
+    public ProjectDeployerRequest setRetryFailedDeploymentCount( int theRetryFailedDeploymentCountToBeSet )
+    {
+        this.retryFailedDeploymentCount = theRetryFailedDeploymentCountToBeSet;
+        return this;
+    }
+
+    /**
+     * @return the project
+     */
+    public MavenProject getProject()
+    {
+        return project;
+    }
+
+    /**
+     * @param theProjectToBeSet the {link {@link MavenProject project} to set
+     * @return {@link ProjectDeployerRequest} for chaining.
+     */
+    public ProjectDeployerRequest setProject( MavenProject theProjectToBeSet )
+    {
+        this.project = theProjectToBeSet;
+        return this;
+    }
+
+    /**
+     * @return the altDeploymentRepository
+     */
+    public String getAltDeploymentRepository()
+    {
+        return altDeploymentRepository;
+    }
+
+    /**
+     * @param theAltDeploymentRepositoryToBeSet the altDeploymentRepository to set
+     * @return {@link ProjectDeployerRequest} for chaining.
+     */
+    public ProjectDeployerRequest setAltDeploymentRepository( String theAltDeploymentRepositoryToBeSet )
+    {
+        this.altDeploymentRepository = theAltDeploymentRepositoryToBeSet;
+        return this;
+    }
+
+    /**
+     * @return the altSnapshotDeploymentRepository
+     */
+    public String getAltSnapshotDeploymentRepository()
+    {
+        return altSnapshotDeploymentRepository;
+    }
+
+    /**
+     * @param theAltSnapshotDeploymentRepositoryToBeSet the altSnapshotDeploymentRepository to set
+     * @return {@link ProjectDeployerRequest} for chaining.
+     */
+    public ProjectDeployerRequest setAltSnapshotDeploymentRepository( String theAltSnapshotDeploymentRepositoryToBeSet )
+    {
+        this.altSnapshotDeploymentRepository = theAltSnapshotDeploymentRepositoryToBeSet;
+        return this;
+    }
+
+    /**
+     * @return the altReleaseDeploymentRepository
+     */
+    public String getAltReleaseDeploymentRepository()
+    {
+        return altReleaseDeploymentRepository;
+    }
+
+    /**
+     * @param theAltReleaseDeploymentRepositoryToBeSet the altReleaseDeploymentRepository to set
+     * @return {@link ProjectDeployerRequest} for chaining.
+     */
+    public ProjectDeployerRequest setAltReleaseDeploymentRepository( String theAltReleaseDeploymentRepositoryToBeSet )
+    {
+        this.altReleaseDeploymentRepository = theAltReleaseDeploymentRepositoryToBeSet;
+        return this;
+    }
+}
diff --git a/src/main/java/org/apache/maven/shared/transfer/project/deploy/internal/DefaultProjectDeployer.java b/maven-3.0.x/src/main/java/org/apache/maven/shared/transfer/project/deploy/internal/DefaultProjectDeployer.java
similarity index 100%
copy from src/main/java/org/apache/maven/shared/transfer/project/deploy/internal/DefaultProjectDeployer.java
copy to maven-3.0.x/src/main/java/org/apache/maven/shared/transfer/project/deploy/internal/DefaultProjectDeployer.java
diff --git a/src/main/java/org/apache/maven/shared/transfer/project/install/ProjectInstaller.java b/maven-3.0.x/src/main/java/org/apache/maven/shared/transfer/project/install/ProjectInstaller.java
similarity index 100%
copy from src/main/java/org/apache/maven/shared/transfer/project/install/ProjectInstaller.java
copy to maven-3.0.x/src/main/java/org/apache/maven/shared/transfer/project/install/ProjectInstaller.java
diff --git a/src/main/java/org/apache/maven/shared/transfer/project/install/ProjectInstallerRequest.java b/maven-3.0.x/src/main/java/org/apache/maven/shared/transfer/project/install/ProjectInstallerRequest.java
similarity index 96%
copy from src/main/java/org/apache/maven/shared/transfer/project/install/ProjectInstallerRequest.java
copy to maven-3.0.x/src/main/java/org/apache/maven/shared/transfer/project/install/ProjectInstallerRequest.java
index 1cc4b9e..07cc6cd 100644
--- a/src/main/java/org/apache/maven/shared/transfer/project/install/ProjectInstallerRequest.java
+++ b/maven-3.0.x/src/main/java/org/apache/maven/shared/transfer/project/install/ProjectInstallerRequest.java
@@ -1,51 +1,51 @@
-package org.apache.maven.shared.transfer.project.install;
-
-/*
- * 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.
- */
-
-import org.apache.maven.project.MavenProject;
-
-/**
- * @author Robert Scholte
- */
-public class ProjectInstallerRequest
-{
-    // From InstallMojo
-
-    private MavenProject project;
-
-    /**
-     * @return the project
-     */
-    public MavenProject getProject()
-    {
-        return project;
-    }
-
-    /**
-     * @param theProjectToBeSet the project to set
-     * @return {@link ProjectInstallerRequest} for chaining.
-     */
-    public ProjectInstallerRequest setProject( MavenProject theProjectToBeSet )
-    {
-        this.project = theProjectToBeSet;
-        return this;
-    }
-
-}
+package org.apache.maven.shared.transfer.project.install;
+
+/*
+ * 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.
+ */
+
+import org.apache.maven.project.MavenProject;
+
+/**
+ * @author Robert Scholte
+ */
+public class ProjectInstallerRequest
+{
+    // From InstallMojo
+
+    private MavenProject project;
+
+    /**
+     * @return the project
+     */
+    public MavenProject getProject()
+    {
+        return project;
+    }
+
+    /**
+     * @param theProjectToBeSet the project to set
+     * @return {@link ProjectInstallerRequest} for chaining.
+     */
+    public ProjectInstallerRequest setProject( MavenProject theProjectToBeSet )
+    {
+        this.project = theProjectToBeSet;
+        return this;
+    }
+
+}
diff --git a/src/main/java/org/apache/maven/shared/transfer/project/install/internal/DefaultProjectInstaller.java b/maven-3.0.x/src/main/java/org/apache/maven/shared/transfer/project/install/internal/DefaultProjectInstaller.java
similarity index 100%
copy from src/main/java/org/apache/maven/shared/transfer/project/install/internal/DefaultProjectInstaller.java
copy to maven-3.0.x/src/main/java/org/apache/maven/shared/transfer/project/install/internal/DefaultProjectInstaller.java
diff --git a/src/main/java/org/apache/maven/shared/transfer/repository/RepositoryManager.java b/maven-3.0.x/src/main/java/org/apache/maven/shared/transfer/repository/RepositoryManager.java
similarity index 100%
copy from src/main/java/org/apache/maven/shared/transfer/repository/RepositoryManager.java
copy to maven-3.0.x/src/main/java/org/apache/maven/shared/transfer/repository/RepositoryManager.java
diff --git a/src/main/java/org/apache/maven/shared/transfer/repository/RepositoryManagerException.java b/maven-3.0.x/src/main/java/org/apache/maven/shared/transfer/repository/RepositoryManagerException.java
similarity index 100%
copy from src/main/java/org/apache/maven/shared/transfer/repository/RepositoryManagerException.java
copy to maven-3.0.x/src/main/java/org/apache/maven/shared/transfer/repository/RepositoryManagerException.java
diff --git a/src/main/java/org/apache/maven/shared/transfer/repository/internal/DefaultRepositoryManager.java b/maven-3.0.x/src/main/java/org/apache/maven/shared/transfer/repository/internal/DefaultRepositoryManager.java
similarity index 100%
copy from src/main/java/org/apache/maven/shared/transfer/repository/internal/DefaultRepositoryManager.java
copy to maven-3.0.x/src/main/java/org/apache/maven/shared/transfer/repository/internal/DefaultRepositoryManager.java
diff --git a/src/main/java/org/apache/maven/shared/transfer/repository/internal/Invoker.java b/maven-3.0.x/src/main/java/org/apache/maven/shared/transfer/repository/internal/Invoker.java
similarity index 100%
copy from src/main/java/org/apache/maven/shared/transfer/repository/internal/Invoker.java
copy to maven-3.0.x/src/main/java/org/apache/maven/shared/transfer/repository/internal/Invoker.java
diff --git a/src/main/java/org/apache/maven/shared/transfer/repository/internal/Maven302RepositoryManager.java b/maven-3.0.x/src/main/java/org/apache/maven/shared/transfer/repository/internal/Maven302RepositoryManager.java
similarity index 100%
copy from src/main/java/org/apache/maven/shared/transfer/repository/internal/Maven302RepositoryManager.java
copy to maven-3.0.x/src/main/java/org/apache/maven/shared/transfer/repository/internal/Maven302RepositoryManager.java
diff --git a/src/main/java/org/apache/maven/shared/transfer/repository/internal/Maven30RepositoryManager.java b/maven-3.0.x/src/main/java/org/apache/maven/shared/transfer/repository/internal/Maven30RepositoryManager.java
similarity index 100%
copy from src/main/java/org/apache/maven/shared/transfer/repository/internal/Maven30RepositoryManager.java
copy to maven-3.0.x/src/main/java/org/apache/maven/shared/transfer/repository/internal/Maven30RepositoryManager.java
diff --git a/src/main/java/org/apache/maven/shared/transfer/repository/internal/Maven31RepositoryManager.java b/maven-3.0.x/src/main/java/org/apache/maven/shared/transfer/repository/internal/Maven31RepositoryManager.java
similarity index 100%
copy from src/main/java/org/apache/maven/shared/transfer/repository/internal/Maven31RepositoryManager.java
copy to maven-3.0.x/src/main/java/org/apache/maven/shared/transfer/repository/internal/Maven31RepositoryManager.java
diff --git a/src/main/java/org/apache/maven/shared/transfer/repository/internal/MavenRepositoryManager.java b/maven-3.0.x/src/main/java/org/apache/maven/shared/transfer/repository/internal/MavenRepositoryManager.java
similarity index 100%
copy from src/main/java/org/apache/maven/shared/transfer/repository/internal/MavenRepositoryManager.java
copy to maven-3.0.x/src/main/java/org/apache/maven/shared/transfer/repository/internal/MavenRepositoryManager.java
diff --git a/src/test/java/org/apache/maven/shared/transfer/artifact/DefaultArtifactCoordinateTest.java b/maven-3.0.x/src/test/java/org/apache/maven/shared/transfer/artifact/DefaultArtifactCoordinateTest.java
similarity index 97%
copy from src/test/java/org/apache/maven/shared/transfer/artifact/DefaultArtifactCoordinateTest.java
copy to maven-3.0.x/src/test/java/org/apache/maven/shared/transfer/artifact/DefaultArtifactCoordinateTest.java
index 155cfc2..5e3923d 100644
--- a/src/test/java/org/apache/maven/shared/transfer/artifact/DefaultArtifactCoordinateTest.java
+++ b/maven-3.0.x/src/test/java/org/apache/maven/shared/transfer/artifact/DefaultArtifactCoordinateTest.java
@@ -1,50 +1,50 @@
-package org.apache.maven.shared.transfer.artifact;
-
-/*
- * 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.
- */
-
-import static org.junit.Assert.*;
-
-import org.apache.maven.shared.transfer.artifact.DefaultArtifactCoordinate;
-import org.junit.Test;
-
-public class DefaultArtifactCoordinateTest
-{
-    @Test
-    public void testToStringWithoutType()
-    {
-        DefaultArtifactCoordinate coordinate = new DefaultArtifactCoordinate();
-        coordinate.setGroupId( "GROUPID" );
-        coordinate.setArtifactId( "ARTIFACTID" );
-        coordinate.setVersion( "VERSION" );
-        assertEquals( "GROUPID:ARTIFACTID:jar:VERSION", coordinate.toString() );
-    }
-
-    @Test
-    public void testToStringWithClassifier()
-    {
-        DefaultArtifactCoordinate coordinate = new DefaultArtifactCoordinate();
-        coordinate.setGroupId( "GROUPID" );
-        coordinate.setArtifactId( "ARTIFACTID" );
-        coordinate.setVersion( "VERSION" );
-        coordinate.setClassifier( "CLASSIFIER" );
-        coordinate.setExtension( "EXTENSION" );
-        assertEquals( "GROUPID:ARTIFACTID:EXTENSION:CLASSIFIER:VERSION", coordinate.toString() );
-    }
-}
+package org.apache.maven.shared.transfer.artifact;
+
+/*
+ * 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.
+ */
+
+import static org.junit.Assert.*;
+
+import org.apache.maven.shared.transfer.artifact.DefaultArtifactCoordinate;
+import org.junit.Test;
+
+public class DefaultArtifactCoordinateTest
+{
+    @Test
+    public void testToStringWithoutType()
+    {
+        DefaultArtifactCoordinate coordinate = new DefaultArtifactCoordinate();
+        coordinate.setGroupId( "GROUPID" );
+        coordinate.setArtifactId( "ARTIFACTID" );
+        coordinate.setVersion( "VERSION" );
+        assertEquals( "GROUPID:ARTIFACTID:jar:VERSION", coordinate.toString() );
+    }
+
+    @Test
+    public void testToStringWithClassifier()
+    {
+        DefaultArtifactCoordinate coordinate = new DefaultArtifactCoordinate();
+        coordinate.setGroupId( "GROUPID" );
+        coordinate.setArtifactId( "ARTIFACTID" );
+        coordinate.setVersion( "VERSION" );
+        coordinate.setClassifier( "CLASSIFIER" );
+        coordinate.setExtension( "EXTENSION" );
+        assertEquals( "GROUPID:ARTIFACTID:EXTENSION:CLASSIFIER:VERSION", coordinate.toString() );
+    }
+}
diff --git a/src/test/java/org/apache/maven/shared/transfer/artifact/deploy/internal/DefaultArtifactDeployerTest.java b/maven-3.0.x/src/test/java/org/apache/maven/shared/transfer/artifact/deploy/internal/DefaultArtifactDeployerTest.java
similarity index 100%
copy from src/test/java/org/apache/maven/shared/transfer/artifact/deploy/internal/DefaultArtifactDeployerTest.java
copy to maven-3.0.x/src/test/java/org/apache/maven/shared/transfer/artifact/deploy/internal/DefaultArtifactDeployerTest.java
diff --git a/src/test/java/org/apache/maven/shared/transfer/artifact/install/internal/DefaultArtifactInstallerTest.java b/maven-3.0.x/src/test/java/org/apache/maven/shared/transfer/artifact/install/internal/DefaultArtifactInstallerTest.java
similarity index 100%
copy from src/test/java/org/apache/maven/shared/transfer/artifact/install/internal/DefaultArtifactInstallerTest.java
copy to maven-3.0.x/src/test/java/org/apache/maven/shared/transfer/artifact/install/internal/DefaultArtifactInstallerTest.java
diff --git a/src/test/java/org/apache/maven/shared/transfer/artifact/install/internal/Maven30ArtifactInstallerTest.java b/maven-3.0.x/src/test/java/org/apache/maven/shared/transfer/artifact/install/internal/Maven30ArtifactInstallerTest.java
similarity index 100%
copy from src/test/java/org/apache/maven/shared/transfer/artifact/install/internal/Maven30ArtifactInstallerTest.java
copy to maven-3.0.x/src/test/java/org/apache/maven/shared/transfer/artifact/install/internal/Maven30ArtifactInstallerTest.java
diff --git a/src/test/java/org/apache/maven/shared/transfer/artifact/resolve/internal/DefaultArtifactResolverTest.java b/maven-3.0.x/src/test/java/org/apache/maven/shared/transfer/artifact/resolve/internal/DefaultArtifactResolverTest.java
similarity index 100%
copy from src/test/java/org/apache/maven/shared/transfer/artifact/resolve/internal/DefaultArtifactResolverTest.java
copy to maven-3.0.x/src/test/java/org/apache/maven/shared/transfer/artifact/resolve/internal/DefaultArtifactResolverTest.java
diff --git a/src/test/java/org/apache/maven/shared/transfer/collection/internal/DefaultDependencyCollectorTest.java b/maven-3.0.x/src/test/java/org/apache/maven/shared/transfer/collection/internal/DefaultDependencyCollectorTest.java
similarity index 100%
copy from src/test/java/org/apache/maven/shared/transfer/collection/internal/DefaultDependencyCollectorTest.java
copy to maven-3.0.x/src/test/java/org/apache/maven/shared/transfer/collection/internal/DefaultDependencyCollectorTest.java
diff --git a/src/test/java/org/apache/maven/shared/transfer/dependencies/DefaultDependableCoordinateTest.java b/maven-3.0.x/src/test/java/org/apache/maven/shared/transfer/dependencies/DefaultDependableCoordinateTest.java
similarity index 97%
copy from src/test/java/org/apache/maven/shared/transfer/dependencies/DefaultDependableCoordinateTest.java
copy to maven-3.0.x/src/test/java/org/apache/maven/shared/transfer/dependencies/DefaultDependableCoordinateTest.java
index 6172247..4678b46 100644
--- a/src/test/java/org/apache/maven/shared/transfer/dependencies/DefaultDependableCoordinateTest.java
+++ b/maven-3.0.x/src/test/java/org/apache/maven/shared/transfer/dependencies/DefaultDependableCoordinateTest.java
@@ -1,52 +1,52 @@
-package org.apache.maven.shared.transfer.dependencies;
-
-/*
- * 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.
- */
-
-import static org.junit.Assert.assertEquals;
-
-import org.apache.maven.shared.transfer.dependencies.DefaultDependableCoordinate;
-import org.junit.Test;
-
-public class DefaultDependableCoordinateTest
-{
-
-    @Test
-    public void testToStringWithoutType()
-    {
-        DefaultDependableCoordinate coordinate = new DefaultDependableCoordinate();
-        coordinate.setGroupId( "GROUPID" );
-        coordinate.setArtifactId( "ARTIFACTID" );
-        coordinate.setVersion( "VERSION" );
-        assertEquals( "GROUPID:ARTIFACTID:jar:VERSION", coordinate.toString() );
-    }
-
-    @Test
-    public void testToStringWithClassifier()
-    {
-        DefaultDependableCoordinate coordinate = new DefaultDependableCoordinate();
-        coordinate.setGroupId( "GROUPID" );
-        coordinate.setArtifactId( "ARTIFACTID" );
-        coordinate.setVersion( "VERSION" );
-        coordinate.setClassifier( "CLASSIFIER" );
-        coordinate.setType( "TYPE" );
-        assertEquals( "GROUPID:ARTIFACTID:TYPE:CLASSIFIER:VERSION", coordinate.toString() );
-    }
-
-}
+package org.apache.maven.shared.transfer.dependencies;
+
+/*
+ * 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.
+ */
+
+import static org.junit.Assert.assertEquals;
+
+import org.apache.maven.shared.transfer.dependencies.DefaultDependableCoordinate;
+import org.junit.Test;
+
+public class DefaultDependableCoordinateTest
+{
+
+    @Test
+    public void testToStringWithoutType()
+    {
+        DefaultDependableCoordinate coordinate = new DefaultDependableCoordinate();
+        coordinate.setGroupId( "GROUPID" );
+        coordinate.setArtifactId( "ARTIFACTID" );
+        coordinate.setVersion( "VERSION" );
+        assertEquals( "GROUPID:ARTIFACTID:jar:VERSION", coordinate.toString() );
+    }
+
+    @Test
+    public void testToStringWithClassifier()
+    {
+        DefaultDependableCoordinate coordinate = new DefaultDependableCoordinate();
+        coordinate.setGroupId( "GROUPID" );
+        coordinate.setArtifactId( "ARTIFACTID" );
+        coordinate.setVersion( "VERSION" );
+        coordinate.setClassifier( "CLASSIFIER" );
+        coordinate.setType( "TYPE" );
+        assertEquals( "GROUPID:ARTIFACTID:TYPE:CLASSIFIER:VERSION", coordinate.toString() );
+    }
+
+}
diff --git a/src/test/java/org/apache/maven/shared/transfer/dependencies/collect/internal/DefaultDependencyCollectorTest.java b/maven-3.0.x/src/test/java/org/apache/maven/shared/transfer/dependencies/collect/internal/DefaultDependencyCollectorTest.java
similarity index 100%
copy from src/test/java/org/apache/maven/shared/transfer/dependencies/collect/internal/DefaultDependencyCollectorTest.java
copy to maven-3.0.x/src/test/java/org/apache/maven/shared/transfer/dependencies/collect/internal/DefaultDependencyCollectorTest.java
diff --git a/src/test/java/org/apache/maven/shared/transfer/dependencies/resolve/internal/DefaultDependencyResolverTest.java b/maven-3.0.x/src/test/java/org/apache/maven/shared/transfer/dependencies/resolve/internal/DefaultDependencyResolverTest.java
similarity index 100%
copy from src/test/java/org/apache/maven/shared/transfer/dependencies/resolve/internal/DefaultDependencyResolverTest.java
copy to maven-3.0.x/src/test/java/org/apache/maven/shared/transfer/dependencies/resolve/internal/DefaultDependencyResolverTest.java
diff --git a/src/test/java/org/apache/maven/shared/transfer/project/deploy/internal/DefaultProjectDeployerTest.java b/maven-3.0.x/src/test/java/org/apache/maven/shared/transfer/project/deploy/internal/DefaultProjectDeployerTest.java
similarity index 100%
copy from src/test/java/org/apache/maven/shared/transfer/project/deploy/internal/DefaultProjectDeployerTest.java
copy to maven-3.0.x/src/test/java/org/apache/maven/shared/transfer/project/deploy/internal/DefaultProjectDeployerTest.java
diff --git a/src/test/java/org/apache/maven/shared/transfer/project/install/internal/DefaultProjectInstallerTest.java b/maven-3.0.x/src/test/java/org/apache/maven/shared/transfer/project/install/internal/DefaultProjectInstallerTest.java
similarity index 100%
copy from src/test/java/org/apache/maven/shared/transfer/project/install/internal/DefaultProjectInstallerTest.java
copy to maven-3.0.x/src/test/java/org/apache/maven/shared/transfer/project/install/internal/DefaultProjectInstallerTest.java
diff --git a/src/test/java/org/apache/maven/shared/transfer/repository/internal/Maven30RepositoryManagerTest.java b/maven-3.0.x/src/test/java/org/apache/maven/shared/transfer/repository/internal/Maven30RepositoryManagerTest.java
similarity index 100%
copy from src/test/java/org/apache/maven/shared/transfer/repository/internal/Maven30RepositoryManagerTest.java
copy to maven-3.0.x/src/test/java/org/apache/maven/shared/transfer/repository/internal/Maven30RepositoryManagerTest.java
diff --git a/maven-3.1.x/pom.xml b/maven-3.1.x/pom.xml
new file mode 100644
index 0000000..b5ec080
--- /dev/null
+++ b/maven-3.1.x/pom.xml
@@ -0,0 +1,140 @@
+<?xml version='1.0' encoding='UTF-8'?>
+<!--
+  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.
+-->
+<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
+  <modelVersion>4.0.0</modelVersion>
+
+  <parent>
+    <groupId>org.apache.maven.shared</groupId>
+    <artifactId>maven-artifact-transfer-parent</artifactId>
+    <version>2.0.0-SNAPSHOT</version>
+  </parent>
+
+  <artifactId>maven-artifact-transfer-maven-3.1.x</artifactId>
+
+  <name>Apache Maven Artifact Transfer Maven 3.1.x provider</name>
+
+  <dependencies>
+    <dependency>
+      <groupId>org.apache.maven</groupId>
+      <artifactId>maven-core</artifactId>
+      <version>3.0</version>
+    </dependency>
+    <dependency>
+      <groupId>org.apache.maven</groupId>
+      <artifactId>maven-artifact</artifactId>
+      <version>3.0</version>
+    </dependency>
+
+    <dependency>
+      <groupId>org.codehaus.plexus</groupId>
+      <artifactId>plexus-component-annotations</artifactId>
+    </dependency>
+
+    <dependency>
+      <groupId>org.apache.maven.shared</groupId>
+      <artifactId>maven-common-artifact-filters</artifactId>
+      <version>3.1.0</version>
+    </dependency>
+    <dependency>
+      <groupId>org.codehaus.plexus</groupId>
+      <artifactId>plexus-utils</artifactId>
+      <version>3.3.0</version>
+    </dependency>
+
+    <!-- Maven 3.0.x -->
+    <dependency>
+      <groupId>org.sonatype.aether</groupId>
+      <artifactId>aether-api</artifactId>
+      <version>1.7</version>
+      <scope>provided</scope>
+    </dependency>
+    <dependency>
+      <groupId>org.sonatype.aether</groupId>
+      <artifactId>aether-util</artifactId>
+      <version>1.7</version>
+      <scope>provided</scope>
+    </dependency>
+    <dependency>
+      <groupId>org.sonatype.aether</groupId>
+      <artifactId>aether-impl</artifactId>
+      <version>1.7</version>
+      <scope>test</scope>
+    </dependency>
+
+    <!-- Maven 3.1.x and above -->
+    <dependency>
+      <groupId>org.eclipse.aether</groupId>
+      <artifactId>aether-api</artifactId>
+      <version>0.9.0.M2</version>
+      <scope>provided</scope>
+    </dependency>
+    <dependency>
+      <groupId>org.eclipse.aether</groupId>
+      <artifactId>aether-util</artifactId>
+      <version>0.9.0.M2</version>
+      <!-- provided scoped dependencies aren't shaded -->
+    </dependency>
+    <dependency>
+      <groupId>org.eclipse.aether</groupId>
+      <artifactId>aether-impl</artifactId>
+      <version>0.9.0.M2</version>
+      <scope>provided</scope>
+    </dependency>
+
+    <dependency>
+      <groupId>org.slf4j</groupId>
+      <artifactId>slf4j-api</artifactId>
+      <version>1.7.5</version>
+    </dependency>
+
+    <!-- TEST -->
+    <dependency>
+      <groupId>junit</groupId>
+      <artifactId>junit</artifactId>
+      <version>4.13.1</version>
+      <scope>test</scope>
+    </dependency>
+
+    <dependency>
+      <groupId>org.mockito</groupId>
+      <artifactId>mockito-core</artifactId>
+      <version>2.28.2</version>
+      <scope>test</scope>
+    </dependency>
+  </dependencies>
+
+  <build>
+    <plugins>
+      <plugin>
+        <groupId>org.eclipse.sisu</groupId>
+        <artifactId>sisu-maven-plugin</artifactId>
+      </plugin>
+      <plugin>
+        <groupId>org.apache.rat</groupId>
+        <artifactId>apache-rat-plugin</artifactId>
+      </plugin>
+      <plugin>
+        <groupId>org.codehaus.mojo</groupId>
+        <artifactId>animal-sniffer-maven-plugin</artifactId>
+      </plugin>
+    </plugins>
+  </build>
+
+</project>
diff --git a/src/main/java/org/apache/maven/shared/transfer/artifact/ArtifactCoordinate.java b/maven-3.1.x/src/main/java/org/apache/maven/shared/transfer/artifact/ArtifactCoordinate.java
similarity index 96%
copy from src/main/java/org/apache/maven/shared/transfer/artifact/ArtifactCoordinate.java
copy to maven-3.1.x/src/main/java/org/apache/maven/shared/transfer/artifact/ArtifactCoordinate.java
index eed2eca..7b0654b 100644
--- a/src/main/java/org/apache/maven/shared/transfer/artifact/ArtifactCoordinate.java
+++ b/maven-3.1.x/src/main/java/org/apache/maven/shared/transfer/artifact/ArtifactCoordinate.java
@@ -1,60 +1,60 @@
-package org.apache.maven.shared.transfer.artifact;
-
-/*
- * 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.
- */
-
-/**
- * <p>
- * Contains all required elements of a Maven Artifact to resolve and calculate its path for either a local or
- * remote Maven2 repository.
- * </p>
- * 
- * @author Robert Scholte
- */
-public interface ArtifactCoordinate
-{
-    /**
-     * @return The groupId of the artifact.
-     */
-    String getGroupId();
-
-    /**
-     * @return The artifactId of the artifact.
-     */
-    String getArtifactId();
-
-    /**
-     * A version, never a versionRange
-     * 
-     * @return The version.
-     */
-    String getVersion();
-
-    /**
-     * The file-extension of the artifact.
-     * 
-     * @return The extension.
-     */
-    String getExtension();
-
-    /**
-     * @return The classifier of the artifact.
-     */
-    String getClassifier();
+package org.apache.maven.shared.transfer.artifact;
+
+/*
+ * 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.
+ */
+
+/**
+ * <p>
+ * Contains all required elements of a Maven Artifact to resolve and calculate its path for either a local or
+ * remote Maven2 repository.
+ * </p>
+ * 
+ * @author Robert Scholte
+ */
+public interface ArtifactCoordinate
+{
+    /**
+     * @return The groupId of the artifact.
+     */
+    String getGroupId();
+
+    /**
+     * @return The artifactId of the artifact.
+     */
+    String getArtifactId();
+
+    /**
+     * A version, never a versionRange
+     * 
+     * @return The version.
+     */
+    String getVersion();
+
+    /**
+     * The file-extension of the artifact.
+     * 
+     * @return The extension.
+     */
+    String getExtension();
+
+    /**
+     * @return The classifier of the artifact.
+     */
+    String getClassifier();
 }
\ No newline at end of file
diff --git a/src/main/java/org/apache/maven/shared/transfer/artifact/DefaultArtifactCoordinate.java b/maven-3.1.x/src/main/java/org/apache/maven/shared/transfer/artifact/DefaultArtifactCoordinate.java
similarity index 95%
copy from src/main/java/org/apache/maven/shared/transfer/artifact/DefaultArtifactCoordinate.java
copy to maven-3.1.x/src/main/java/org/apache/maven/shared/transfer/artifact/DefaultArtifactCoordinate.java
index 070607d..9b86ee2 100644
--- a/src/main/java/org/apache/maven/shared/transfer/artifact/DefaultArtifactCoordinate.java
+++ b/maven-3.1.x/src/main/java/org/apache/maven/shared/transfer/artifact/DefaultArtifactCoordinate.java
@@ -1,184 +1,184 @@
-package org.apache.maven.shared.transfer.artifact;
-
-/*
- * 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.
- */
-
-/**
- * Common usage of an ArtifactCoordinate for a Mojo
- * 
- * <pre>
- * &#64;Parameter
- * private DefaultArtifactCoordinate[] artifacts;
- * </pre>
- * 
- * and
- * 
- * <pre>
- * private DefaultArtifactCoordinate artifact = new DefaultArtifactCoordinate();
- * 
- * &#64;Parameter( property = "groupId" )
- * private String groupId;
- * 
- * &#64;Parameter( property = "artifactId" )
- * private String artifactId;
- * 
- * &#64;Parameter( property = "version" )
- * private String version;
- * 
- * &#64;Parameter( property = "classifier" )
- * private String classifier;
- * 
- * &#64;Parameter( property = "type" )
- * private String type;
- * 
- * public void setGroupId( String groupId )
- * {
- *     this.artifact.setGroupId( groupId );
- * }
- * 
- * public void setArtifactId( String artifactId )
- * {
- *     this.artifact.setArtifactId( artifactId );
- * }
- * 
- * public void setVersion( String version )
- * {
- *     this.artifact.setVersion( version );
- * }
- * 
- * public void setClassifier( String classifier )
- * {
- *     this.artifact.setClassifier( classifier );
- * }
- * 
- * public void setType( String type )
- * {
- *     this.artifact.setType( type );
- * }
- * </pre>
- * 
- * <strong>Note: </strong> type is not the same as extension! {@link org.apache.maven.artifact.handler.ArtifactHandler}s
- * are used to map a type to an extension.
- * 
- * @author Robert Scholte
- * @since 3.0
- */
-public class DefaultArtifactCoordinate
-    implements ArtifactCoordinate
-{
-    private String groupId;
-
-    private String artifactId;
-
-    private String version;
-
-    private String extension;
-
-    private String classifier;
-
-    @Override
-    public final String getGroupId()
-    {
-        return groupId;
-    }
-
-    /**
-     * @param groupId The groupId to be used.
-     */
-    public final void setGroupId( String groupId )
-    {
-        this.groupId = groupId;
-    }
-
-    @Override
-    public final String getArtifactId()
-    {
-        return artifactId;
-    }
-
-    /**
-     * @param artifactId The artifactId to be used.
-     */
-    public final void setArtifactId( String artifactId )
-    {
-        this.artifactId = artifactId;
-    }
-
-    @Override
-    public final String getVersion()
-    {
-        return version;
-    }
-
-    /**
-     * @param version The version to be used.
-     */
-    public final void setVersion( String version )
-    {
-        this.version = version;
-    }
-
-    @Override
-    public final String getExtension()
-    {
-        return extension != null ? extension : "jar";
-    }
-
-    /**
-     * @param extension The extension to be used.
-     */
-    public final void setExtension( String extension )
-    {
-        this.extension = extension;
-    }
-
-    @Override
-    public final String getClassifier()
-    {
-        return classifier;
-    }
-
-    /**
-     * @param classifier The classifier to be used.
-     */
-    public final void setClassifier( String classifier )
-    {
-        this.classifier = classifier;
-    }
-
-    /**
-     * @see org.apache.maven.artifact.DefaultArtifact#toString()
-     */
-    @Override
-    public String toString()
-    {
-        StringBuilder sb = new StringBuilder().append( groupId ).append( ':' )
-                        .append( artifactId ).append( ':' ).append( getExtension() );
-
-        if ( classifier != null )
-        {
-            sb.append( ':' ).append( classifier );
-        }
-
-        sb.append( ':' ).append( version );
-
-        return sb.toString();
-    }
-
-}
+package org.apache.maven.shared.transfer.artifact;
+
+/*
+ * 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.
+ */
+
+/**
+ * Common usage of an ArtifactCoordinate for a Mojo
+ * 
+ * <pre>
+ * &#64;Parameter
+ * private DefaultArtifactCoordinate[] artifacts;
+ * </pre>
+ * 
+ * and
+ * 
+ * <pre>
+ * private DefaultArtifactCoordinate artifact = new DefaultArtifactCoordinate();
+ * 
+ * &#64;Parameter( property = "groupId" )
+ * private String groupId;
+ * 
+ * &#64;Parameter( property = "artifactId" )
+ * private String artifactId;
+ * 
+ * &#64;Parameter( property = "version" )
+ * private String version;
+ * 
+ * &#64;Parameter( property = "classifier" )
+ * private String classifier;
+ * 
+ * &#64;Parameter( property = "type" )
+ * private String type;
+ * 
+ * public void setGroupId( String groupId )
+ * {
+ *     this.artifact.setGroupId( groupId );
+ * }
+ * 
+ * public void setArtifactId( String artifactId )
+ * {
+ *     this.artifact.setArtifactId( artifactId );
+ * }
+ * 
+ * public void setVersion( String version )
+ * {
+ *     this.artifact.setVersion( version );
+ * }
+ * 
+ * public void setClassifier( String classifier )
+ * {
+ *     this.artifact.setClassifier( classifier );
+ * }
+ * 
+ * public void setType( String type )
+ * {
+ *     this.artifact.setType( type );
+ * }
+ * </pre>
+ * 
+ * <strong>Note: </strong> type is not the same as extension! {@link org.apache.maven.artifact.handler.ArtifactHandler}s
+ * are used to map a type to an extension.
+ * 
+ * @author Robert Scholte
+ * @since 3.0
+ */
+public class DefaultArtifactCoordinate
+    implements ArtifactCoordinate
+{
+    private String groupId;
+
+    private String artifactId;
+
+    private String version;
+
+    private String extension;
+
+    private String classifier;
+
+    @Override
+    public final String getGroupId()
+    {
+        return groupId;
+    }
+
+    /**
+     * @param groupId The groupId to be used.
+     */
+    public final void setGroupId( String groupId )
+    {
+        this.groupId = groupId;
+    }
+
+    @Override
+    public final String getArtifactId()
+    {
+        return artifactId;
+    }
+
+    /**
+     * @param artifactId The artifactId to be used.
+     */
+    public final void setArtifactId( String artifactId )
+    {
+        this.artifactId = artifactId;
+    }
+
+    @Override
+    public final String getVersion()
+    {
+        return version;
+    }
+
+    /**
+     * @param version The version to be used.
+     */
+    public final void setVersion( String version )
+    {
+        this.version = version;
+    }
+
+    @Override
+    public final String getExtension()
+    {
+        return extension != null ? extension : "jar";
+    }
+
+    /**
+     * @param extension The extension to be used.
+     */
+    public final void setExtension( String extension )
+    {
+        this.extension = extension;
+    }
+
+    @Override
+    public final String getClassifier()
+    {
+        return classifier;
+    }
+
+    /**
+     * @param classifier The classifier to be used.
+     */
+    public final void setClassifier( String classifier )
+    {
+        this.classifier = classifier;
+    }
+
+    /**
+     * @see org.apache.maven.artifact.DefaultArtifact#toString()
+     */
+    @Override
+    public String toString()
+    {
+        StringBuilder sb = new StringBuilder().append( groupId ).append( ':' )
+                        .append( artifactId ).append( ':' ).append( getExtension() );
+
+        if ( classifier != null )
+        {
+            sb.append( ':' ).append( classifier );
+        }
+
+        sb.append( ':' ).append( version );
+
+        return sb.toString();
+    }
+
+}
diff --git a/src/main/java/org/apache/maven/shared/transfer/artifact/TransferUtils.java b/maven-3.1.x/src/main/java/org/apache/maven/shared/transfer/artifact/TransferUtils.java
similarity index 97%
copy from src/main/java/org/apache/maven/shared/transfer/artifact/TransferUtils.java
copy to maven-3.1.x/src/main/java/org/apache/maven/shared/transfer/artifact/TransferUtils.java
index 83fa7e1..d4506c3 100644
--- a/src/main/java/org/apache/maven/shared/transfer/artifact/TransferUtils.java
+++ b/maven-3.1.x/src/main/java/org/apache/maven/shared/transfer/artifact/TransferUtils.java
@@ -1,125 +1,125 @@
-package org.apache.maven.shared.transfer.artifact;
-
-/*
- * 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.
- */
-
-import org.apache.maven.artifact.Artifact;
-import org.apache.maven.model.Extension;
-import org.apache.maven.model.Parent;
-import org.apache.maven.model.Plugin;
-import org.apache.maven.model.ReportPlugin;
-
-/**
- * Utility class
- * 
- * @author Robert Scholte
- */
-public final class TransferUtils
-{
-    private TransferUtils()
-    {
-    }
-
-    /**
-     * @param artifact {@link Artifact}
-     * @return {@link ArtifactCoordinate}
-     */
-    public static ArtifactCoordinate toArtifactCoordinate( Artifact artifact )
-    {
-        DefaultArtifactCoordinate coordinate = new DefaultArtifactCoordinate();
-
-        coordinate.setGroupId( artifact.getGroupId() );
-        coordinate.setArtifactId( artifact.getArtifactId() );
-        coordinate.setVersion( artifact.getVersion() );
-        coordinate.setExtension( artifact.getArtifactHandler().getExtension() );
-        coordinate.setClassifier( artifact.getClassifier() );
-
-        return coordinate;
-    }
-
-    /**
-     * Special case: an extension is always of type {@code jar}, so can be transformed to an ArtifactCoordinate.
-     * 
-     * @param extension {@link Extension}
-     * @return {@link ArtifactCoordinate}
-     */
-    public static ArtifactCoordinate toArtifactCoordinate( Extension extension )
-    {
-        DefaultArtifactCoordinate coordinate = new DefaultArtifactCoordinate();
-
-        coordinate.setGroupId( extension.getGroupId() );
-        coordinate.setArtifactId( extension.getArtifactId() );
-        coordinate.setVersion( extension.getVersion() );
-
-        return coordinate;
-    }
-
-    /**
-     * Special case: a parent is always of type {@code pom}, so can be transformed to an ArtifactCoordinate.
-     * 
-     * @param parent {@link Parent}
-     * @return {@link ArtifactCoordinate}
-     */
-    public static ArtifactCoordinate toArtifactCoordinate( Parent parent )
-    {
-        DefaultArtifactCoordinate coordinate = new DefaultArtifactCoordinate();
-
-        coordinate.setGroupId( parent.getGroupId() );
-        coordinate.setArtifactId( parent.getArtifactId() );
-        coordinate.setVersion( parent.getVersion() );
-        coordinate.setExtension( "pom" );
-
-        return coordinate;
-    }
-
-    /**
-     * Special case: a plugin is always of type {@code jar}, so can be transformed to an ArtifactCoordinate.
-     * 
-     * @param plugin {@link Plugin}
-     * @return {@link ArtifactCoordinate}
-     */
-    public static ArtifactCoordinate toArtifactCoordinate( Plugin plugin )
-    {
-        DefaultArtifactCoordinate coordinate = new DefaultArtifactCoordinate();
-
-        coordinate.setGroupId( plugin.getGroupId() );
-        coordinate.setArtifactId( plugin.getArtifactId() );
-        coordinate.setVersion( plugin.getVersion() );
-
-        return coordinate;
-    }
-    
-    /**
-     * Special case: a reportPlugin is always of type {@code jar}, so can be transformed to an ArtifactCoordinate.
-     * 
-     * @param plugin {@link ReportPlugin}
-     * @return {@link ArtifactCoordinate}
-     */
-    public static ArtifactCoordinate toArtifactCoordinate( ReportPlugin plugin )
-    {
-        DefaultArtifactCoordinate coordinate = new DefaultArtifactCoordinate();
-
-        coordinate.setGroupId( plugin.getGroupId() );
-        coordinate.setArtifactId( plugin.getArtifactId() );
-        coordinate.setVersion( plugin.getVersion() );
-
-        return coordinate;
-    }
-
-}
+package org.apache.maven.shared.transfer.artifact;
+
+/*
+ * 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.
+ */
+
+import org.apache.maven.artifact.Artifact;
+import org.apache.maven.model.Extension;
+import org.apache.maven.model.Parent;
+import org.apache.maven.model.Plugin;
+import org.apache.maven.model.ReportPlugin;
+
+/**
+ * Utility class
+ * 
+ * @author Robert Scholte
+ */
+public final class TransferUtils
+{
+    private TransferUtils()
+    {
+    }
+
+    /**
+     * @param artifact {@link Artifact}
+     * @return {@link ArtifactCoordinate}
+     */
+    public static ArtifactCoordinate toArtifactCoordinate( Artifact artifact )
+    {
+        DefaultArtifactCoordinate coordinate = new DefaultArtifactCoordinate();
+
+        coordinate.setGroupId( artifact.getGroupId() );
+        coordinate.setArtifactId( artifact.getArtifactId() );
+        coordinate.setVersion( artifact.getVersion() );
+        coordinate.setExtension( artifact.getArtifactHandler().getExtension() );
+        coordinate.setClassifier( artifact.getClassifier() );
+
+        return coordinate;
+    }
+
+    /**
+     * Special case: an extension is always of type {@code jar}, so can be transformed to an ArtifactCoordinate.
+     * 
+     * @param extension {@link Extension}
+     * @return {@link ArtifactCoordinate}
+     */
+    public static ArtifactCoordinate toArtifactCoordinate( Extension extension )
+    {
+        DefaultArtifactCoordinate coordinate = new DefaultArtifactCoordinate();
+
+        coordinate.setGroupId( extension.getGroupId() );
+        coordinate.setArtifactId( extension.getArtifactId() );
+        coordinate.setVersion( extension.getVersion() );
+
+        return coordinate;
+    }
+
+    /**
+     * Special case: a parent is always of type {@code pom}, so can be transformed to an ArtifactCoordinate.
+     * 
+     * @param parent {@link Parent}
+     * @return {@link ArtifactCoordinate}
+     */
+    public static ArtifactCoordinate toArtifactCoordinate( Parent parent )
+    {
+        DefaultArtifactCoordinate coordinate = new DefaultArtifactCoordinate();
+
+        coordinate.setGroupId( parent.getGroupId() );
+        coordinate.setArtifactId( parent.getArtifactId() );
+        coordinate.setVersion( parent.getVersion() );
+        coordinate.setExtension( "pom" );
+
+        return coordinate;
+    }
+
+    /**
+     * Special case: a plugin is always of type {@code jar}, so can be transformed to an ArtifactCoordinate.
+     * 
+     * @param plugin {@link Plugin}
+     * @return {@link ArtifactCoordinate}
+     */
+    public static ArtifactCoordinate toArtifactCoordinate( Plugin plugin )
+    {
+        DefaultArtifactCoordinate coordinate = new DefaultArtifactCoordinate();
+
+        coordinate.setGroupId( plugin.getGroupId() );
+        coordinate.setArtifactId( plugin.getArtifactId() );
+        coordinate.setVersion( plugin.getVersion() );
+
+        return coordinate;
+    }
+    
+    /**
+     * Special case: a reportPlugin is always of type {@code jar}, so can be transformed to an ArtifactCoordinate.
+     * 
+     * @param plugin {@link ReportPlugin}
+     * @return {@link ArtifactCoordinate}
+     */
+    public static ArtifactCoordinate toArtifactCoordinate( ReportPlugin plugin )
+    {
+        DefaultArtifactCoordinate coordinate = new DefaultArtifactCoordinate();
+
+        coordinate.setGroupId( plugin.getGroupId() );
+        coordinate.setArtifactId( plugin.getArtifactId() );
+        coordinate.setVersion( plugin.getVersion() );
+
+        return coordinate;
+    }
+
+}
diff --git a/src/main/java/org/apache/maven/shared/transfer/artifact/deploy/ArtifactDeployer.java b/maven-3.1.x/src/main/java/org/apache/maven/shared/transfer/artifact/deploy/ArtifactDeployer.java
similarity index 100%
copy from src/main/java/org/apache/maven/shared/transfer/artifact/deploy/ArtifactDeployer.java
copy to maven-3.1.x/src/main/java/org/apache/maven/shared/transfer/artifact/deploy/ArtifactDeployer.java
diff --git a/src/main/java/org/apache/maven/shared/transfer/artifact/deploy/ArtifactDeployerException.java b/maven-3.1.x/src/main/java/org/apache/maven/shared/transfer/artifact/deploy/ArtifactDeployerException.java
similarity index 100%
copy from src/main/java/org/apache/maven/shared/transfer/artifact/deploy/ArtifactDeployerException.java
copy to maven-3.1.x/src/main/java/org/apache/maven/shared/transfer/artifact/deploy/ArtifactDeployerException.java
diff --git a/src/main/java/org/apache/maven/shared/transfer/artifact/deploy/internal/DefaultArtifactDeployer.java b/maven-3.1.x/src/main/java/org/apache/maven/shared/transfer/artifact/deploy/internal/DefaultArtifactDeployer.java
similarity index 100%
copy from src/main/java/org/apache/maven/shared/transfer/artifact/deploy/internal/DefaultArtifactDeployer.java
copy to maven-3.1.x/src/main/java/org/apache/maven/shared/transfer/artifact/deploy/internal/DefaultArtifactDeployer.java
diff --git a/src/main/java/org/apache/maven/shared/transfer/artifact/deploy/internal/Invoker.java b/maven-3.1.x/src/main/java/org/apache/maven/shared/transfer/artifact/deploy/internal/Invoker.java
similarity index 100%
copy from src/main/java/org/apache/maven/shared/transfer/artifact/deploy/internal/Invoker.java
copy to maven-3.1.x/src/main/java/org/apache/maven/shared/transfer/artifact/deploy/internal/Invoker.java
diff --git a/src/main/java/org/apache/maven/shared/transfer/artifact/deploy/internal/Maven30ArtifactDeployer.java b/maven-3.1.x/src/main/java/org/apache/maven/shared/transfer/artifact/deploy/internal/Maven30ArtifactDeployer.java
similarity index 100%
copy from src/main/java/org/apache/maven/shared/transfer/artifact/deploy/internal/Maven30ArtifactDeployer.java
copy to maven-3.1.x/src/main/java/org/apache/maven/shared/transfer/artifact/deploy/internal/Maven30ArtifactDeployer.java
diff --git a/src/main/java/org/apache/maven/shared/transfer/artifact/deploy/internal/Maven31ArtifactDeployer.java b/maven-3.1.x/src/main/java/org/apache/maven/shared/transfer/artifact/deploy/internal/Maven31ArtifactDeployer.java
similarity index 100%
copy from src/main/java/org/apache/maven/shared/transfer/artifact/deploy/internal/Maven31ArtifactDeployer.java
copy to maven-3.1.x/src/main/java/org/apache/maven/shared/transfer/artifact/deploy/internal/Maven31ArtifactDeployer.java
diff --git a/src/main/java/org/apache/maven/shared/transfer/artifact/deploy/internal/MavenArtifactDeployer.java b/maven-3.1.x/src/main/java/org/apache/maven/shared/transfer/artifact/deploy/internal/MavenArtifactDeployer.java
similarity index 100%
copy from src/main/java/org/apache/maven/shared/transfer/artifact/deploy/internal/MavenArtifactDeployer.java
copy to maven-3.1.x/src/main/java/org/apache/maven/shared/transfer/artifact/deploy/internal/MavenArtifactDeployer.java
diff --git a/src/main/java/org/apache/maven/shared/transfer/artifact/install/ArtifactInstaller.java b/maven-3.1.x/src/main/java/org/apache/maven/shared/transfer/artifact/install/ArtifactInstaller.java
similarity index 100%
copy from src/main/java/org/apache/maven/shared/transfer/artifact/install/ArtifactInstaller.java
copy to maven-3.1.x/src/main/java/org/apache/maven/shared/transfer/artifact/install/ArtifactInstaller.java
diff --git a/src/main/java/org/apache/maven/shared/transfer/artifact/install/ArtifactInstallerException.java b/maven-3.1.x/src/main/java/org/apache/maven/shared/transfer/artifact/install/ArtifactInstallerException.java
similarity index 100%
copy from src/main/java/org/apache/maven/shared/transfer/artifact/install/ArtifactInstallerException.java
copy to maven-3.1.x/src/main/java/org/apache/maven/shared/transfer/artifact/install/ArtifactInstallerException.java
diff --git a/src/main/java/org/apache/maven/shared/transfer/artifact/install/internal/DefaultArtifactInstaller.java b/maven-3.1.x/src/main/java/org/apache/maven/shared/transfer/artifact/install/internal/DefaultArtifactInstaller.java
similarity index 100%
copy from src/main/java/org/apache/maven/shared/transfer/artifact/install/internal/DefaultArtifactInstaller.java
copy to maven-3.1.x/src/main/java/org/apache/maven/shared/transfer/artifact/install/internal/DefaultArtifactInstaller.java
diff --git a/src/main/java/org/apache/maven/shared/transfer/artifact/install/internal/Invoker.java b/maven-3.1.x/src/main/java/org/apache/maven/shared/transfer/artifact/install/internal/Invoker.java
similarity index 100%
copy from src/main/java/org/apache/maven/shared/transfer/artifact/install/internal/Invoker.java
copy to maven-3.1.x/src/main/java/org/apache/maven/shared/transfer/artifact/install/internal/Invoker.java
diff --git a/src/main/java/org/apache/maven/shared/transfer/artifact/install/internal/Maven30ArtifactInstaller.java b/maven-3.1.x/src/main/java/org/apache/maven/shared/transfer/artifact/install/internal/Maven30ArtifactInstaller.java
similarity index 100%
copy from src/main/java/org/apache/maven/shared/transfer/artifact/install/internal/Maven30ArtifactInstaller.java
copy to maven-3.1.x/src/main/java/org/apache/maven/shared/transfer/artifact/install/internal/Maven30ArtifactInstaller.java
diff --git a/src/main/java/org/apache/maven/shared/transfer/artifact/install/internal/Maven31ArtifactInstaller.java b/maven-3.1.x/src/main/java/org/apache/maven/shared/transfer/artifact/install/internal/Maven31ArtifactInstaller.java
similarity index 100%
copy from src/main/java/org/apache/maven/shared/transfer/artifact/install/internal/Maven31ArtifactInstaller.java
copy to maven-3.1.x/src/main/java/org/apache/maven/shared/transfer/artifact/install/internal/Maven31ArtifactInstaller.java
diff --git a/src/main/java/org/apache/maven/shared/transfer/artifact/install/internal/MavenArtifactInstaller.java b/maven-3.1.x/src/main/java/org/apache/maven/shared/transfer/artifact/install/internal/MavenArtifactInstaller.java
similarity index 100%
copy from src/main/java/org/apache/maven/shared/transfer/artifact/install/internal/MavenArtifactInstaller.java
copy to maven-3.1.x/src/main/java/org/apache/maven/shared/transfer/artifact/install/internal/MavenArtifactInstaller.java
diff --git a/src/main/java/org/apache/maven/shared/transfer/artifact/resolve/ArtifactResolver.java b/maven-3.1.x/src/main/java/org/apache/maven/shared/transfer/artifact/resolve/ArtifactResolver.java
similarity index 100%
copy from src/main/java/org/apache/maven/shared/transfer/artifact/resolve/ArtifactResolver.java
copy to maven-3.1.x/src/main/java/org/apache/maven/shared/transfer/artifact/resolve/ArtifactResolver.java
diff --git a/src/main/java/org/apache/maven/shared/transfer/artifact/resolve/ArtifactResolverException.java b/maven-3.1.x/src/main/java/org/apache/maven/shared/transfer/artifact/resolve/ArtifactResolverException.java
similarity index 100%
copy from src/main/java/org/apache/maven/shared/transfer/artifact/resolve/ArtifactResolverException.java
copy to maven-3.1.x/src/main/java/org/apache/maven/shared/transfer/artifact/resolve/ArtifactResolverException.java
diff --git a/src/main/java/org/apache/maven/shared/transfer/artifact/resolve/ArtifactResult.java b/maven-3.1.x/src/main/java/org/apache/maven/shared/transfer/artifact/resolve/ArtifactResult.java
similarity index 96%
copy from src/main/java/org/apache/maven/shared/transfer/artifact/resolve/ArtifactResult.java
copy to maven-3.1.x/src/main/java/org/apache/maven/shared/transfer/artifact/resolve/ArtifactResult.java
index bc89ff0..6941975 100644
--- a/src/main/java/org/apache/maven/shared/transfer/artifact/resolve/ArtifactResult.java
+++ b/maven-3.1.x/src/main/java/org/apache/maven/shared/transfer/artifact/resolve/ArtifactResult.java
@@ -1,36 +1,36 @@
-package org.apache.maven.shared.transfer.artifact.resolve;
-
-/*
- * 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.
- */
-
-import org.apache.maven.artifact.Artifact;
-
-/**
- * The Artifact Result
- * 
- * @author Robert Scholte
- * @since 3.0
- */
-public interface ArtifactResult
-{
-    /**
-     * @return {@link Artifact}
-     */
-    Artifact getArtifact();
-}
+package org.apache.maven.shared.transfer.artifact.resolve;
+
+/*
+ * 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.
+ */
+
+import org.apache.maven.artifact.Artifact;
+
+/**
+ * The Artifact Result
+ * 
+ * @author Robert Scholte
+ * @since 3.0
+ */
+public interface ArtifactResult
+{
+    /**
+     * @return {@link Artifact}
+     */
+    Artifact getArtifact();
+}
diff --git a/src/main/java/org/apache/maven/shared/transfer/artifact/resolve/internal/DefaultArtifactResolver.java b/maven-3.1.x/src/main/java/org/apache/maven/shared/transfer/artifact/resolve/internal/DefaultArtifactResolver.java
similarity index 100%
copy from src/main/java/org/apache/maven/shared/transfer/artifact/resolve/internal/DefaultArtifactResolver.java
copy to maven-3.1.x/src/main/java/org/apache/maven/shared/transfer/artifact/resolve/internal/DefaultArtifactResolver.java
diff --git a/src/main/java/org/apache/maven/shared/transfer/artifact/resolve/internal/Invoker.java b/maven-3.1.x/src/main/java/org/apache/maven/shared/transfer/artifact/resolve/internal/Invoker.java
similarity index 100%
copy from src/main/java/org/apache/maven/shared/transfer/artifact/resolve/internal/Invoker.java
copy to maven-3.1.x/src/main/java/org/apache/maven/shared/transfer/artifact/resolve/internal/Invoker.java
diff --git a/src/main/java/org/apache/maven/shared/transfer/artifact/resolve/internal/Maven30ArtifactResolver.java b/maven-3.1.x/src/main/java/org/apache/maven/shared/transfer/artifact/resolve/internal/Maven30ArtifactResolver.java
similarity index 100%
copy from src/main/java/org/apache/maven/shared/transfer/artifact/resolve/internal/Maven30ArtifactResolver.java
copy to maven-3.1.x/src/main/java/org/apache/maven/shared/transfer/artifact/resolve/internal/Maven30ArtifactResolver.java
diff --git a/src/main/java/org/apache/maven/shared/transfer/artifact/resolve/internal/Maven30ArtifactResult.java b/maven-3.1.x/src/main/java/org/apache/maven/shared/transfer/artifact/resolve/internal/Maven30ArtifactResult.java
similarity index 97%
copy from src/main/java/org/apache/maven/shared/transfer/artifact/resolve/internal/Maven30ArtifactResult.java
copy to maven-3.1.x/src/main/java/org/apache/maven/shared/transfer/artifact/resolve/internal/Maven30ArtifactResult.java
index 3bbea28..e65c00b 100644
--- a/src/main/java/org/apache/maven/shared/transfer/artifact/resolve/internal/Maven30ArtifactResult.java
+++ b/maven-3.1.x/src/main/java/org/apache/maven/shared/transfer/artifact/resolve/internal/Maven30ArtifactResult.java
@@ -1,57 +1,57 @@
-package org.apache.maven.shared.transfer.artifact.resolve.internal;
-
-/*
- * 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.
- */
-
-import org.apache.maven.RepositoryUtils;
-import org.apache.maven.shared.transfer.artifact.resolve.ArtifactResolverException;
-import org.sonatype.aether.artifact.Artifact;
-import org.sonatype.aether.resolution.ArtifactResult;
-
-/**
- * {@link org.apache.maven.shared.transfer.artifact.resolve.ArtifactResult} wrapper for {@link ArtifactResult}
- *
- * @author Robert Scholte
- * @since 3.0
- */
-class Maven30ArtifactResult implements org.apache.maven.shared.transfer.artifact.resolve.ArtifactResult
-{
-    private final ArtifactResult artifactResult;
-
-    /**
-     * @param artifactResult {@link ArtifactResult}
-     */
-    Maven30ArtifactResult( ArtifactResult artifactResult )
-    {
-        this.artifactResult = artifactResult;
-    }
-
-    @Override
-    public org.apache.maven.artifact.Artifact getArtifact()
-    {
-        try
-        {
-            return Invoker.invoke( RepositoryUtils.class, "toArtifact", Artifact.class, artifactResult.getArtifact() );
-        }
-        catch ( ArtifactResolverException e )
-        {
-            throw new RuntimeException( e );
-        }
-    }
-}
+package org.apache.maven.shared.transfer.artifact.resolve.internal;
+
+/*
+ * 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.
+ */
+
+import org.apache.maven.RepositoryUtils;
+import org.apache.maven.shared.transfer.artifact.resolve.ArtifactResolverException;
+import org.sonatype.aether.artifact.Artifact;
+import org.sonatype.aether.resolution.ArtifactResult;
+
+/**
+ * {@link org.apache.maven.shared.transfer.artifact.resolve.ArtifactResult} wrapper for {@link ArtifactResult}
+ *
+ * @author Robert Scholte
+ * @since 3.0
+ */
+class Maven30ArtifactResult implements org.apache.maven.shared.transfer.artifact.resolve.ArtifactResult
+{
+    private final ArtifactResult artifactResult;
+
+    /**
+     * @param artifactResult {@link ArtifactResult}
+     */
+    Maven30ArtifactResult( ArtifactResult artifactResult )
+    {
+        this.artifactResult = artifactResult;
+    }
+
+    @Override
... 24163 lines suppressed ...

[maven-artifact-transfer] 02/02: UTs pass

Posted by cs...@apache.org.
This is an automated email from the ASF dual-hosted git repository.

cstamas pushed a commit to branch MSHARED-987-providers
in repository https://gitbox.apache.org/repos/asf/maven-artifact-transfer.git

commit bf9aa0437426db663e3aeae8d8ca16e259964fc3
Author: Tamas Cservenak <ta...@cservenak.net>
AuthorDate: Thu Apr 29 15:24:00 2021 +0200

    UTs pass
---
 maven-3.0.x/pom.xml                                |  85 +++---
 .../transfer/artifact/ArtifactCoordinate.java      |  60 ----
 .../artifact/DefaultArtifactCoordinate.java        | 184 ------------
 .../shared/transfer/artifact/TransferUtils.java    | 125 ---------
 .../transfer/artifact/deploy/ArtifactDeployer.java |  59 ----
 .../artifact/deploy/ArtifactDeployerException.java |  44 ---
 .../deploy/internal/DefaultArtifactDeployer.java   | 145 ----------
 .../transfer/artifact/deploy/internal/Invoker.java |  66 -----
 .../deploy/internal/Maven30ArtifactDeployer.java   |  67 +++--
 .../deploy/internal/Maven31ArtifactDeployer.java   | 154 -----------
 .../deploy/internal/MavenArtifactDeployer.java     |  42 ---
 .../artifact/install/ArtifactInstaller.java        |  59 ----
 .../install/ArtifactInstallerException.java        |  43 ---
 .../install/internal/DefaultArtifactInstaller.java | 162 -----------
 .../artifact/install/internal/Invoker.java         |  65 -----
 .../install/internal/Maven30ArtifactInstaller.java |  73 +++--
 .../install/internal/Maven31ArtifactInstaller.java | 101 -------
 .../install/internal/MavenArtifactInstaller.java   |  36 ---
 .../artifact/resolve/ArtifactResolver.java         |  54 ----
 .../resolve/ArtifactResolverException.java         |  40 ---
 .../resolve/internal/DefaultArtifactResolver.java  | 163 -----------
 .../artifact/resolve/internal/Invoker.java         |  67 -----
 .../resolve/internal/Maven30ArtifactResolver.java  |  75 ++---
 .../resolve/internal/Maven30ArtifactResult.java    |  11 +-
 .../resolve/internal/Maven31ArtifactResolver.java  | 105 -------
 .../resolve/internal/Maven31ArtifactResult.java    |  59 ----
 .../resolve/internal/MavenArtifactResolver.java    |  38 ---
 .../shared/transfer/collection/CollectRequest.java | 307 ---------------------
 .../shared/transfer/collection/CollectResult.java  |  49 ----
 .../collection/DependencyCollectionException.java  |  42 ---
 .../transfer/collection/DependencyCollector.java   |  78 ------
 .../internal/DefaultDependencyCollector.java       | 195 -------------
 .../transfer/collection/internal/Invoker.java      |  96 -------
 .../internal/Maven30DependencyCollector.java       |  93 +++----
 .../internal/Maven30DependencyNodeAdapter.java     |  11 +-
 .../internal/Maven31ArtifactRepositoryAdapter.java | 265 ------------------
 .../collection/internal/Maven31CollectResult.java  |  62 -----
 .../internal/Maven31DependencyCollector.java       | 168 -----------
 .../internal/Maven31DependencyNodeAdapter.java     | 163 -----------
 .../internal/MavenDependencyCollector.java         |  43 ---
 .../dependencies/DefaultDependableCoordinate.java  | 183 ------------
 .../dependencies/DependableCoordinate.java         |  70 -----
 .../transfer/dependencies/TransferUtils.java       | 136 ---------
 .../dependencies/collect/CollectorResult.java      |  37 ---
 .../dependencies/collect/DependencyCollector.java  |  73 -----
 .../internal/DefaultDependencyCollector.java       | 198 -------------
 .../dependencies/collect/internal/Invoker.java     |  93 -------
 .../internal/Maven30DependencyCollector.java       |  77 +++---
 .../internal/Maven30DependencyNodeAdapter.java     |  11 +-
 .../internal/Maven31ArtifactRepositoryAdapter.java | 266 ------------------
 .../collect/internal/Maven31CollectorResult.java   |  85 ------
 .../internal/Maven31DependencyCollector.java       | 160 -----------
 .../internal/Maven31DependencyNodeAdapter.java     | 163 -----------
 .../collect/internal/MavenDependencyCollector.java |  44 ---
 .../dependencies/resolve/DependencyResolver.java   |  81 ------
 .../resolve/DependencyResolverException.java       |  54 ----
 .../dependencies/resolve/DependencyResult.java     |  37 ---
 .../internal/DefaultDependencyResolver.java        | 190 -------------
 .../dependencies/resolve/internal/Invoker.java     |  95 -------
 .../resolve/internal/Maven30ArtifactResult.java    |  11 +-
 .../internal/Maven30DependencyResolver.java        | 104 ++++---
 .../resolve/internal/Maven31ArtifactResult.java    |  59 ----
 .../internal/Maven31DependencyResolver.java        | 243 ----------------
 .../Maven31DependencyResolverException.java        |  55 ----
 .../resolve/internal/MavenDependencyResolver.java  |  51 ----
 .../shared/transfer/graph/DependencyNode.java      |  69 -----
 .../shared/transfer/graph/DependencyVisitor.java   |  48 ----
 .../metadata/internal/Maven31MetadataBridge.java   | 104 -------
 .../shared/transfer/project/MavenAetherUtils.java  | 100 -------
 .../transfer/project/NoFileAssignedException.java  |  51 ----
 .../transfer/project/deploy/ProjectDeployer.java   |  69 -----
 .../project/deploy/ProjectDeployerRequest.java     | 132 ---------
 .../deploy/internal/DefaultProjectDeployer.java    | 185 -------------
 .../transfer/project/install/ProjectInstaller.java |  80 ------
 .../project/install/ProjectInstallerRequest.java   |  51 ----
 .../install/internal/DefaultProjectInstaller.java  | 176 ------------
 .../transfer/repository/RepositoryManager.java     |  72 -----
 .../repository/RepositoryManagerException.java     |  40 ---
 .../internal/DefaultRepositoryManager.java         | 191 -------------
 .../transfer/repository/internal/Invoker.java      |  79 ------
 .../internal/Maven302RepositoryManager.java        |  18 +-
 .../internal/Maven30RepositoryManager.java         | 104 +++----
 .../internal/Maven31RepositoryManager.java         | 181 ------------
 .../internal/MavenRepositoryManager.java           |  67 -----
 .../artifact/DefaultArtifactCoordinateTest.java    |  50 ----
 .../internal/DefaultArtifactDeployerTest.java      | 117 --------
 .../internal/DefaultArtifactInstallerTest.java     | 137 ---------
 .../internal/Maven30ArtifactInstallerTest.java     |   9 +-
 .../internal/DefaultArtifactResolverTest.java      |  97 -------
 .../internal/DefaultDependencyCollectorTest.java   | 101 -------
 .../DefaultDependableCoordinateTest.java           |  52 ----
 .../internal/DefaultDependencyCollectorTest.java   | 112 --------
 .../internal/DefaultDependencyResolverTest.java    |  95 -------
 .../internal/DefaultProjectDeployerTest.java       |  83 ------
 .../internal/DefaultProjectInstallerTest.java      |  71 -----
 .../internal/Maven30RepositoryManagerTest.java     |  11 +-
 maven-3.1.x/pom.xml                                |  86 +++---
 .../transfer/artifact/ArtifactCoordinate.java      |  60 ----
 .../artifact/DefaultArtifactCoordinate.java        | 184 ------------
 .../shared/transfer/artifact/TransferUtils.java    | 125 ---------
 .../transfer/artifact/deploy/ArtifactDeployer.java |  59 ----
 .../artifact/deploy/ArtifactDeployerException.java |  44 ---
 .../deploy/internal/DefaultArtifactDeployer.java   | 145 ----------
 .../transfer/artifact/deploy/internal/Invoker.java |  66 -----
 .../deploy/internal/Maven30ArtifactDeployer.java   | 150 ----------
 .../deploy/internal/Maven31ArtifactDeployer.java   |  56 ++--
 .../deploy/internal/MavenArtifactDeployer.java     |  42 ---
 .../artifact/install/ArtifactInstaller.java        |  59 ----
 .../install/ArtifactInstallerException.java        |  43 ---
 .../install/internal/DefaultArtifactInstaller.java | 162 -----------
 .../artifact/install/internal/Invoker.java         |  65 -----
 .../install/internal/Maven30ArtifactInstaller.java | 105 -------
 .../install/internal/Maven31ArtifactInstaller.java |  71 +++--
 .../install/internal/MavenArtifactInstaller.java   |  36 ---
 .../artifact/resolve/ArtifactResolver.java         |  54 ----
 .../resolve/ArtifactResolverException.java         |  40 ---
 .../resolve/internal/DefaultArtifactResolver.java  | 163 -----------
 .../artifact/resolve/internal/Invoker.java         |  67 -----
 .../resolve/internal/Maven30ArtifactResolver.java  | 107 -------
 .../resolve/internal/Maven30ArtifactResult.java    |  57 ----
 .../resolve/internal/Maven31ArtifactResolver.java  |  75 ++---
 .../resolve/internal/Maven31ArtifactResult.java    |  12 +-
 .../resolve/internal/MavenArtifactResolver.java    |  38 ---
 .../shared/transfer/collection/CollectRequest.java | 307 ---------------------
 .../shared/transfer/collection/CollectResult.java  |  49 ----
 .../collection/DependencyCollectionException.java  |  42 ---
 .../transfer/collection/DependencyCollector.java   |  78 ------
 .../internal/DefaultDependencyCollector.java       | 195 -------------
 .../transfer/collection/internal/Invoker.java      |  96 -------
 .../internal/Maven30ArtifactRepositoryAdapter.java | 265 ------------------
 .../collection/internal/Maven30CollectResult.java  |  68 -----
 .../internal/Maven30DependencyCollector.java       | 167 -----------
 .../internal/Maven30DependencyNodeAdapter.java     | 163 -----------
 .../internal/Maven31ArtifactRepositoryAdapter.java |  12 +
 .../internal/Maven31DependencyCollector.java       | 103 ++++---
 .../internal/Maven31DependencyNodeAdapter.java     |  11 +-
 .../internal/MavenDependencyCollector.java         |  43 ---
 .../dependencies/DefaultDependableCoordinate.java  | 183 ------------
 .../dependencies/DependableCoordinate.java         |  70 -----
 .../transfer/dependencies/TransferUtils.java       | 136 ---------
 .../dependencies/collect/CollectorResult.java      |  37 ---
 .../dependencies/collect/DependencyCollector.java  |  73 -----
 .../collect/DependencyCollectorException.java      |  43 ---
 .../internal/DefaultDependencyCollector.java       | 198 -------------
 .../dependencies/collect/internal/Invoker.java     |  93 -------
 .../internal/Maven30ArtifactRepositoryAdapter.java | 266 ------------------
 .../collect/internal/Maven30CollectorResult.java   |  85 ------
 .../internal/Maven30DependencyCollector.java       | 160 -----------
 .../internal/Maven30DependencyNodeAdapter.java     | 163 -----------
 .../internal/Maven31ArtifactRepositoryAdapter.java |  12 +
 .../internal/Maven31DependencyCollector.java       |  78 +++---
 .../internal/Maven31DependencyNodeAdapter.java     |  11 +-
 .../collect/internal/MavenDependencyCollector.java |  44 ---
 .../dependencies/resolve/DependencyResolver.java   |  81 ------
 .../resolve/DependencyResolverException.java       |  54 ----
 .../dependencies/resolve/DependencyResult.java     |  37 ---
 .../internal/DefaultDependencyResolver.java        | 190 -------------
 .../dependencies/resolve/internal/Invoker.java     |  95 -------
 .../resolve/internal/Maven30ArtifactResult.java    |  57 ----
 .../internal/Maven30DependencyResolver.java        | 247 -----------------
 .../Maven30DependencyResolverException.java        |  61 ----
 .../resolve/internal/Maven31ArtifactResult.java    |  12 +-
 .../internal/Maven31DependencyResolver.java        | 104 ++++---
 .../resolve/internal/MavenDependencyResolver.java  |  51 ----
 .../shared/transfer/graph/DependencyNode.java      |  69 -----
 .../shared/transfer/graph/DependencyVisitor.java   |  48 ----
 .../metadata/internal/Maven30MetadataBridge.java   | 107 -------
 .../shared/transfer/project/MavenAetherUtils.java  | 100 -------
 .../transfer/project/NoFileAssignedException.java  |  51 ----
 .../transfer/project/deploy/ProjectDeployer.java   |  69 -----
 .../project/deploy/ProjectDeployerRequest.java     | 132 ---------
 .../deploy/internal/DefaultProjectDeployer.java    | 185 -------------
 .../transfer/project/install/ProjectInstaller.java |  80 ------
 .../project/install/ProjectInstallerRequest.java   |  51 ----
 .../install/internal/DefaultProjectInstaller.java  | 176 ------------
 .../transfer/repository/RepositoryManager.java     |  72 -----
 .../repository/RepositoryManagerException.java     |  40 ---
 .../internal/DefaultRepositoryManager.java         | 191 -------------
 .../transfer/repository/internal/Invoker.java      |  79 ------
 .../internal/Maven302RepositoryManager.java        |  55 ----
 .../internal/Maven30RepositoryManager.java         | 172 ------------
 .../internal/Maven31RepositoryManager.java         | 104 +++----
 .../internal/MavenRepositoryManager.java           |  67 -----
 .../artifact/DefaultArtifactCoordinateTest.java    |  50 ----
 .../internal/DefaultArtifactDeployerTest.java      | 117 --------
 .../internal/DefaultArtifactInstallerTest.java     | 137 ---------
 .../internal/Maven30ArtifactInstallerTest.java     |  77 ------
 .../internal/DefaultArtifactResolverTest.java      |  97 -------
 .../internal/DefaultDependencyCollectorTest.java   | 101 -------
 .../DefaultDependableCoordinateTest.java           |  52 ----
 .../internal/DefaultDependencyCollectorTest.java   | 112 --------
 .../internal/DefaultDependencyResolverTest.java    |  95 -------
 .../internal/DefaultProjectDeployerTest.java       |  83 ------
 .../internal/DefaultProjectInstallerTest.java      |  71 -----
 .../internal/Maven30RepositoryManagerTest.java     |  83 ------
 maven-artifact-transfer-api/pom.xml                |  57 ++++
 .../deploy/internal/ArtifactDeployerDelegate.java  |  12 +-
 .../deploy/internal/DefaultArtifactDeployer.java   | 113 ++------
 .../transfer/artifact/deploy/internal/Invoker.java |  66 -----
 .../deploy/internal/Maven30ArtifactDeployer.java   | 150 ----------
 .../deploy/internal/Maven31ArtifactDeployer.java   | 154 -----------
 .../deploy/internal/MavenArtifactDeployer.java     |  42 ---
 .../artifact/install/ArtifactInstaller.java        |   1 -
 ...staller.java => ArtifactInstallerDelegate.java} |  13 +-
 .../install/internal/DefaultArtifactInstaller.java | 127 ++-------
 .../artifact/install/internal/Invoker.java         |  65 -----
 .../install/internal/Maven30ArtifactInstaller.java | 105 -------
 .../install/internal/Maven31ArtifactInstaller.java | 101 -------
 .../resolve/internal/ArtifactResolverDelegate.java |  12 +-
 .../resolve/internal/DefaultArtifactResolver.java  | 116 ++------
 .../artifact/resolve/internal/Invoker.java         |  67 -----
 .../resolve/internal/Maven30ArtifactResolver.java  | 107 -------
 .../resolve/internal/Maven30ArtifactResult.java    |  57 ----
 .../resolve/internal/Maven31ArtifactResolver.java  | 105 -------
 .../resolve/internal/Maven31ArtifactResult.java    |  59 ----
 .../resolve/internal/MavenArtifactResolver.java    |  38 ---
 .../internal/DefaultDependencyCollector.java       | 183 ++++--------
 .../internal/DependencyCollectorDelegate.java      |  12 +-
 .../transfer/collection/internal/Invoker.java      |  96 -------
 .../internal/Maven30ArtifactRepositoryAdapter.java | 265 ------------------
 .../collection/internal/Maven30CollectResult.java  |  68 -----
 .../internal/Maven30DependencyCollector.java       | 167 -----------
 .../internal/Maven30DependencyNodeAdapter.java     | 163 -----------
 .../internal/Maven31ArtifactRepositoryAdapter.java | 265 ------------------
 .../collection/internal/Maven31CollectResult.java  |  62 -----
 .../internal/Maven31DependencyCollector.java       | 168 -----------
 .../internal/Maven31DependencyNodeAdapter.java     | 163 -----------
 .../internal/MavenDependencyCollector.java         |  43 ---
 .../internal/DefaultDependencyCollector.java       | 143 ++--------
 .../internal/DependencyCollectorDelegate.java      |  15 +-
 .../dependencies/collect/internal/Invoker.java     |  93 -------
 .../internal/Maven30ArtifactRepositoryAdapter.java | 266 ------------------
 .../collect/internal/Maven30CollectorResult.java   |  85 ------
 .../internal/Maven30DependencyCollector.java       | 160 -----------
 .../internal/Maven30DependencyNodeAdapter.java     | 163 -----------
 .../internal/Maven31ArtifactRepositoryAdapter.java | 266 ------------------
 .../collect/internal/Maven31CollectorResult.java   |  85 ------
 .../internal/Maven31DependencyCollector.java       | 160 -----------
 .../internal/Maven31DependencyNodeAdapter.java     | 163 -----------
 .../collect/internal/MavenDependencyCollector.java |  44 ---
 .../internal/DefaultDependencyResolver.java        | 145 +++-------
 .../internal/DependencyResolverDelegate.java       |  15 +-
 .../dependencies/resolve/internal/Invoker.java     |  95 -------
 .../resolve/internal/Maven30ArtifactResult.java    |  57 ----
 .../internal/Maven30DependencyResolver.java        | 247 -----------------
 .../Maven30DependencyResolverException.java        |  61 ----
 .../resolve/internal/Maven31ArtifactResult.java    |  59 ----
 .../internal/Maven31DependencyResolver.java        | 243 ----------------
 .../Maven31DependencyResolverException.java        |  55 ----
 .../resolve/internal/MavenDependencyResolver.java  |  51 ----
 .../metadata/internal/Maven30MetadataBridge.java   | 107 -------
 .../metadata/internal/Maven31MetadataBridge.java   | 104 -------
 .../shared/transfer/project/MavenAetherUtils.java  | 100 -------
 .../deploy/internal/DefaultProjectDeployer.java    |  51 ++--
 .../install/internal/DefaultProjectInstaller.java  |  51 ++--
 .../internal/DefaultRepositoryManager.java         | 159 ++---------
 .../transfer/repository/internal/Invoker.java      |  79 ------
 .../internal/Maven302RepositoryManager.java        |  55 ----
 .../internal/Maven30RepositoryManager.java         | 172 ------------
 .../internal/Maven31RepositoryManager.java         | 181 ------------
 .../internal/MavenRepositoryManager.java           |  67 -----
 .../internal/RepositoryManagerDelegate.java        |  15 +-
 .../shared/transfer/support/ComponentSupport.java  |  41 ++-
 .../shared/transfer/support/DelegateSupport.java   |  15 +-
 .../shared/transfer/support/DelegatorSupport.java  |  34 +--
 .../maven/shared/transfer/support/Selector.java    |  80 ++++++
 .../apache/maven/shared/transfer/support/Trap.java |  71 +++++
 maven-artifact-transfer/pom.xml                    |  79 +++++-
 .../artifact/deployer/ArtifactDeployerMojo.java    |   4 -
 .../artifact/installer/ArtifactInstallerMojo.java  |   4 -
 .../collector/DependencyCollectorMojo.java         |   2 -
 .../plugin/project/deploy/ProjectDeployerMojo.java |   2 -
 .../project/install/ProjectInstallerMojo.java      |   2 -
 .../transfer/artifact/ArtifactCoordinate.java      |  60 ----
 .../artifact/DefaultArtifactCoordinate.java        | 184 ------------
 .../shared/transfer/artifact/TransferUtils.java    | 125 ---------
 .../transfer/artifact/deploy/ArtifactDeployer.java |  59 ----
 .../artifact/deploy/ArtifactDeployerException.java |  44 ---
 .../deploy/internal/DefaultArtifactDeployer.java   | 145 ----------
 .../transfer/artifact/deploy/internal/Invoker.java |  66 -----
 .../deploy/internal/Maven30ArtifactDeployer.java   | 150 ----------
 .../deploy/internal/Maven31ArtifactDeployer.java   | 154 -----------
 .../deploy/internal/MavenArtifactDeployer.java     |  42 ---
 .../artifact/install/ArtifactInstaller.java        |  59 ----
 .../install/ArtifactInstallerException.java        |  43 ---
 .../install/internal/DefaultArtifactInstaller.java | 162 -----------
 .../artifact/install/internal/Invoker.java         |  65 -----
 .../install/internal/Maven30ArtifactInstaller.java | 105 -------
 .../install/internal/Maven31ArtifactInstaller.java | 101 -------
 .../install/internal/MavenArtifactInstaller.java   |  36 ---
 .../artifact/resolve/ArtifactResolver.java         |  54 ----
 .../resolve/ArtifactResolverException.java         |  40 ---
 .../transfer/artifact/resolve/ArtifactResult.java  |  36 ---
 .../resolve/internal/DefaultArtifactResolver.java  | 163 -----------
 .../artifact/resolve/internal/Invoker.java         |  67 -----
 .../resolve/internal/Maven30ArtifactResolver.java  | 107 -------
 .../resolve/internal/Maven30ArtifactResult.java    |  57 ----
 .../resolve/internal/Maven31ArtifactResolver.java  | 105 -------
 .../resolve/internal/Maven31ArtifactResult.java    |  59 ----
 .../resolve/internal/MavenArtifactResolver.java    |  38 ---
 .../shared/transfer/collection/CollectRequest.java | 307 ---------------------
 .../shared/transfer/collection/CollectResult.java  |  49 ----
 .../collection/DependencyCollectionException.java  |  42 ---
 .../transfer/collection/DependencyCollector.java   |  78 ------
 .../internal/DefaultDependencyCollector.java       | 195 -------------
 .../transfer/collection/internal/Invoker.java      |  96 -------
 .../internal/Maven30ArtifactRepositoryAdapter.java | 265 ------------------
 .../collection/internal/Maven30CollectResult.java  |  68 -----
 .../internal/Maven30DependencyCollector.java       | 167 -----------
 .../internal/Maven30DependencyNodeAdapter.java     | 163 -----------
 .../internal/Maven31ArtifactRepositoryAdapter.java | 265 ------------------
 .../collection/internal/Maven31CollectResult.java  |  62 -----
 .../internal/Maven31DependencyCollector.java       | 168 -----------
 .../internal/Maven31DependencyNodeAdapter.java     | 163 -----------
 .../internal/MavenDependencyCollector.java         |  43 ---
 .../dependencies/DefaultDependableCoordinate.java  | 183 ------------
 .../dependencies/DependableCoordinate.java         |  70 -----
 .../transfer/dependencies/TransferUtils.java       | 136 ---------
 .../dependencies/collect/CollectorResult.java      |  37 ---
 .../dependencies/collect/DependencyCollector.java  |  73 -----
 .../collect/DependencyCollectorException.java      |  43 ---
 .../internal/DefaultDependencyCollector.java       | 198 -------------
 .../dependencies/collect/internal/Invoker.java     |  93 -------
 .../internal/Maven30ArtifactRepositoryAdapter.java | 266 ------------------
 .../collect/internal/Maven30CollectorResult.java   |  85 ------
 .../internal/Maven30DependencyCollector.java       | 160 -----------
 .../internal/Maven30DependencyNodeAdapter.java     | 163 -----------
 .../internal/Maven31ArtifactRepositoryAdapter.java | 266 ------------------
 .../collect/internal/Maven31CollectorResult.java   |  85 ------
 .../internal/Maven31DependencyCollector.java       | 160 -----------
 .../internal/Maven31DependencyNodeAdapter.java     | 163 -----------
 .../collect/internal/MavenDependencyCollector.java |  44 ---
 .../dependencies/resolve/DependencyResolver.java   |  81 ------
 .../resolve/DependencyResolverException.java       |  54 ----
 .../dependencies/resolve/DependencyResult.java     |  37 ---
 .../internal/DefaultDependencyResolver.java        | 190 -------------
 .../dependencies/resolve/internal/Invoker.java     |  95 -------
 .../resolve/internal/Maven30ArtifactResult.java    |  57 ----
 .../internal/Maven30DependencyResolver.java        | 247 -----------------
 .../Maven30DependencyResolverException.java        |  61 ----
 .../resolve/internal/Maven31ArtifactResult.java    |  59 ----
 .../internal/Maven31DependencyResolver.java        | 243 ----------------
 .../Maven31DependencyResolverException.java        |  55 ----
 .../resolve/internal/MavenDependencyResolver.java  |  51 ----
 .../shared/transfer/graph/DependencyNode.java      |  69 -----
 .../shared/transfer/graph/DependencyVisitor.java   |  48 ----
 .../metadata/internal/Maven30MetadataBridge.java   | 107 -------
 .../metadata/internal/Maven31MetadataBridge.java   | 104 -------
 .../shared/transfer/project/MavenAetherUtils.java  | 100 -------
 .../transfer/project/NoFileAssignedException.java  |  51 ----
 .../transfer/project/deploy/ProjectDeployer.java   |  69 -----
 .../project/deploy/ProjectDeployerRequest.java     | 132 ---------
 .../deploy/internal/DefaultProjectDeployer.java    | 185 -------------
 .../transfer/project/install/ProjectInstaller.java |  80 ------
 .../install/internal/DefaultProjectInstaller.java  | 176 ------------
 .../transfer/repository/RepositoryManager.java     |  72 -----
 .../repository/RepositoryManagerException.java     |  40 ---
 .../internal/DefaultRepositoryManager.java         | 191 -------------
 .../transfer/repository/internal/Invoker.java      |  79 ------
 .../internal/Maven302RepositoryManager.java        |  55 ----
 .../internal/Maven30RepositoryManager.java         | 172 ------------
 .../internal/Maven31RepositoryManager.java         | 181 ------------
 .../internal/MavenRepositoryManager.java           |  67 -----
 .../maven/shared/transfer/PlexusTestCase.java      | 250 +++++++++++++++++
 .../artifact/DefaultArtifactCoordinateTest.java    |   1 -
 .../internal/DefaultArtifactDeployerTest.java      |  20 +-
 .../internal/DefaultArtifactInstallerTest.java     |  42 ++-
 .../internal/Maven30ArtifactInstallerTest.java     |  77 ------
 .../internal/DefaultArtifactResolverTest.java      |  15 +-
 .../internal/DefaultDependencyCollectorTest.java   |  12 +-
 .../DefaultDependableCoordinateTest.java           |   1 -
 .../internal/DefaultDependencyCollectorTest.java   |   7 +-
 .../internal/DefaultDependencyResolverTest.java    |   8 +-
 .../internal/DefaultProjectDeployerTest.java       |  19 +-
 .../internal/DefaultProjectInstallerTest.java      |  17 +-
 .../internal/Maven30RepositoryManagerTest.java     |  83 ------
 pom.xml                                            |   8 +-
 377 files changed, 1700 insertions(+), 34534 deletions(-)

diff --git a/maven-3.0.x/pom.xml b/maven-3.0.x/pom.xml
index ee140b8..4d82b7a 100644
--- a/maven-3.0.x/pom.xml
+++ b/maven-3.0.x/pom.xml
@@ -30,97 +30,100 @@
 
   <name>Apache Maven Artifact Transfer Maven 3.0.x provider</name>
 
+  <properties>
+    <maven30x.version>3.0</maven30x.version>
+    <sonatypeAether.version>1.7</sonatypeAether.version>
+  </properties>
+
   <dependencies>
     <dependency>
+      <groupId>org.apache.maven.shared</groupId>
+      <artifactId>maven-artifact-transfer-api</artifactId>
+    </dependency>
+
+    <dependency>
+      <groupId>javax.inject</groupId>
+      <artifactId>javax.inject</artifactId>
+      <scope>provided</scope>
+    </dependency>
+    <dependency>
       <groupId>org.apache.maven</groupId>
       <artifactId>maven-plugin-api</artifactId>
-      <version>3.0</version>
+      <version>${maven30x.version}</version>
+      <scope>provided</scope>
+      <exclusions>
+        <exclusion>
+          <groupId>org.sonatype.sisu</groupId>
+          <artifactId>sisu-inject-plexus</artifactId>
+        </exclusion>
+      </exclusions>
     </dependency>
     <dependency>
       <groupId>org.apache.maven</groupId>
       <artifactId>maven-core</artifactId>
-      <version>3.0</version>
+      <version>${maven30x.version}</version>
+      <scope>provided</scope>
     </dependency>
     <dependency>
       <groupId>org.apache.maven</groupId>
       <artifactId>maven-artifact</artifactId>
-      <version>3.0</version>
-    </dependency>
-
-    <dependency>
-      <groupId>org.codehaus.plexus</groupId>
-      <artifactId>plexus-component-annotations</artifactId>
-    </dependency>
-
-    <dependency>
-      <groupId>org.apache.maven.shared</groupId>
-      <artifactId>maven-common-artifact-filters</artifactId>
-      <version>3.1.0</version>
+      <version>${maven30x.version}</version>
+      <scope>provided</scope>
     </dependency>
     <dependency>
-      <groupId>org.codehaus.plexus</groupId>
-      <artifactId>plexus-utils</artifactId>
-      <version>3.3.0</version>
+      <groupId>org.eclipse.sisu</groupId>
+      <artifactId>org.eclipse.sisu.plexus</artifactId>
+      <version>${sisu.version}</version>
+      <scope>provided</scope>
     </dependency>
 
-    <!-- Maven 3.0.x -->
     <dependency>
       <groupId>org.sonatype.aether</groupId>
       <artifactId>aether-api</artifactId>
-      <version>1.7</version>
+      <version>${sonatypeAether.version}</version>
       <scope>provided</scope>
     </dependency>
     <dependency>
       <groupId>org.sonatype.aether</groupId>
       <artifactId>aether-util</artifactId>
-      <version>1.7</version>
+      <version>${sonatypeAether.version}</version>
       <scope>provided</scope>
     </dependency>
     <dependency>
       <groupId>org.sonatype.aether</groupId>
       <artifactId>aether-impl</artifactId>
-      <version>1.7</version>
-      <scope>test</scope>
-    </dependency>
-
-    <!-- Maven 3.1.x and above -->
-    <dependency>
-      <groupId>org.eclipse.aether</groupId>
-      <artifactId>aether-api</artifactId>
-      <version>0.9.0.M2</version>
+      <version>${sonatypeAether.version}</version>
       <scope>provided</scope>
     </dependency>
+
     <dependency>
-      <groupId>org.eclipse.aether</groupId>
-      <artifactId>aether-util</artifactId>
-      <version>0.9.0.M2</version>
-      <!-- provided scoped dependencies aren't shaded -->
-    </dependency>
-    <dependency>
-      <groupId>org.eclipse.aether</groupId>
-      <artifactId>aether-impl</artifactId>
-      <version>0.9.0.M2</version>
+      <groupId>org.codehaus.plexus</groupId>
+      <artifactId>plexus-utils</artifactId>
       <scope>provided</scope>
     </dependency>
 
     <dependency>
       <groupId>org.slf4j</groupId>
       <artifactId>slf4j-api</artifactId>
-      <version>1.7.5</version>
+      <scope>provided</scope>
     </dependency>
 
     <!-- TEST -->
     <dependency>
       <groupId>junit</groupId>
       <artifactId>junit</artifactId>
-      <version>4.13.1</version>
+      <scope>test</scope>
+    </dependency>
+
+    <dependency>
+      <groupId>org.slf4j</groupId>
+      <artifactId>slf4j-simple</artifactId>
       <scope>test</scope>
     </dependency>
 
     <dependency>
       <groupId>org.mockito</groupId>
       <artifactId>mockito-core</artifactId>
-      <version>2.28.2</version>
       <scope>test</scope>
     </dependency>
   </dependencies>
diff --git a/maven-3.0.x/src/main/java/org/apache/maven/shared/transfer/artifact/ArtifactCoordinate.java b/maven-3.0.x/src/main/java/org/apache/maven/shared/transfer/artifact/ArtifactCoordinate.java
deleted file mode 100644
index 7b0654b..0000000
--- a/maven-3.0.x/src/main/java/org/apache/maven/shared/transfer/artifact/ArtifactCoordinate.java
+++ /dev/null
@@ -1,60 +0,0 @@
-package org.apache.maven.shared.transfer.artifact;
-
-/*
- * 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.
- */
-
-/**
- * <p>
- * Contains all required elements of a Maven Artifact to resolve and calculate its path for either a local or
- * remote Maven2 repository.
- * </p>
- * 
- * @author Robert Scholte
- */
-public interface ArtifactCoordinate
-{
-    /**
-     * @return The groupId of the artifact.
-     */
-    String getGroupId();
-
-    /**
-     * @return The artifactId of the artifact.
-     */
-    String getArtifactId();
-
-    /**
-     * A version, never a versionRange
-     * 
-     * @return The version.
-     */
-    String getVersion();
-
-    /**
-     * The file-extension of the artifact.
-     * 
-     * @return The extension.
-     */
-    String getExtension();
-
-    /**
-     * @return The classifier of the artifact.
-     */
-    String getClassifier();
-}
\ No newline at end of file
diff --git a/maven-3.0.x/src/main/java/org/apache/maven/shared/transfer/artifact/DefaultArtifactCoordinate.java b/maven-3.0.x/src/main/java/org/apache/maven/shared/transfer/artifact/DefaultArtifactCoordinate.java
deleted file mode 100644
index 9b86ee2..0000000
--- a/maven-3.0.x/src/main/java/org/apache/maven/shared/transfer/artifact/DefaultArtifactCoordinate.java
+++ /dev/null
@@ -1,184 +0,0 @@
-package org.apache.maven.shared.transfer.artifact;
-
-/*
- * 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.
- */
-
-/**
- * Common usage of an ArtifactCoordinate for a Mojo
- * 
- * <pre>
- * &#64;Parameter
- * private DefaultArtifactCoordinate[] artifacts;
- * </pre>
- * 
- * and
- * 
- * <pre>
- * private DefaultArtifactCoordinate artifact = new DefaultArtifactCoordinate();
- * 
- * &#64;Parameter( property = "groupId" )
- * private String groupId;
- * 
- * &#64;Parameter( property = "artifactId" )
- * private String artifactId;
- * 
- * &#64;Parameter( property = "version" )
- * private String version;
- * 
- * &#64;Parameter( property = "classifier" )
- * private String classifier;
- * 
- * &#64;Parameter( property = "type" )
- * private String type;
- * 
- * public void setGroupId( String groupId )
- * {
- *     this.artifact.setGroupId( groupId );
- * }
- * 
- * public void setArtifactId( String artifactId )
- * {
- *     this.artifact.setArtifactId( artifactId );
- * }
- * 
- * public void setVersion( String version )
- * {
- *     this.artifact.setVersion( version );
- * }
- * 
- * public void setClassifier( String classifier )
- * {
- *     this.artifact.setClassifier( classifier );
- * }
- * 
- * public void setType( String type )
- * {
- *     this.artifact.setType( type );
- * }
- * </pre>
- * 
- * <strong>Note: </strong> type is not the same as extension! {@link org.apache.maven.artifact.handler.ArtifactHandler}s
- * are used to map a type to an extension.
- * 
- * @author Robert Scholte
- * @since 3.0
- */
-public class DefaultArtifactCoordinate
-    implements ArtifactCoordinate
-{
-    private String groupId;
-
-    private String artifactId;
-
-    private String version;
-
-    private String extension;
-
-    private String classifier;
-
-    @Override
-    public final String getGroupId()
-    {
-        return groupId;
-    }
-
-    /**
-     * @param groupId The groupId to be used.
-     */
-    public final void setGroupId( String groupId )
-    {
-        this.groupId = groupId;
-    }
-
-    @Override
-    public final String getArtifactId()
-    {
-        return artifactId;
-    }
-
-    /**
-     * @param artifactId The artifactId to be used.
-     */
-    public final void setArtifactId( String artifactId )
-    {
-        this.artifactId = artifactId;
-    }
-
-    @Override
-    public final String getVersion()
-    {
-        return version;
-    }
-
-    /**
-     * @param version The version to be used.
-     */
-    public final void setVersion( String version )
-    {
-        this.version = version;
-    }
-
-    @Override
-    public final String getExtension()
-    {
-        return extension != null ? extension : "jar";
-    }
-
-    /**
-     * @param extension The extension to be used.
-     */
-    public final void setExtension( String extension )
-    {
-        this.extension = extension;
-    }
-
-    @Override
-    public final String getClassifier()
-    {
-        return classifier;
-    }
-
-    /**
-     * @param classifier The classifier to be used.
-     */
-    public final void setClassifier( String classifier )
-    {
-        this.classifier = classifier;
-    }
-
-    /**
-     * @see org.apache.maven.artifact.DefaultArtifact#toString()
-     */
-    @Override
-    public String toString()
-    {
-        StringBuilder sb = new StringBuilder().append( groupId ).append( ':' )
-                        .append( artifactId ).append( ':' ).append( getExtension() );
-
-        if ( classifier != null )
-        {
-            sb.append( ':' ).append( classifier );
-        }
-
-        sb.append( ':' ).append( version );
-
-        return sb.toString();
-    }
-
-}
diff --git a/maven-3.0.x/src/main/java/org/apache/maven/shared/transfer/artifact/TransferUtils.java b/maven-3.0.x/src/main/java/org/apache/maven/shared/transfer/artifact/TransferUtils.java
deleted file mode 100644
index d4506c3..0000000
--- a/maven-3.0.x/src/main/java/org/apache/maven/shared/transfer/artifact/TransferUtils.java
+++ /dev/null
@@ -1,125 +0,0 @@
-package org.apache.maven.shared.transfer.artifact;
-
-/*
- * 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.
- */
-
-import org.apache.maven.artifact.Artifact;
-import org.apache.maven.model.Extension;
-import org.apache.maven.model.Parent;
-import org.apache.maven.model.Plugin;
-import org.apache.maven.model.ReportPlugin;
-
-/**
- * Utility class
- * 
- * @author Robert Scholte
- */
-public final class TransferUtils
-{
-    private TransferUtils()
-    {
-    }
-
-    /**
-     * @param artifact {@link Artifact}
-     * @return {@link ArtifactCoordinate}
-     */
-    public static ArtifactCoordinate toArtifactCoordinate( Artifact artifact )
-    {
-        DefaultArtifactCoordinate coordinate = new DefaultArtifactCoordinate();
-
-        coordinate.setGroupId( artifact.getGroupId() );
-        coordinate.setArtifactId( artifact.getArtifactId() );
-        coordinate.setVersion( artifact.getVersion() );
-        coordinate.setExtension( artifact.getArtifactHandler().getExtension() );
-        coordinate.setClassifier( artifact.getClassifier() );
-
-        return coordinate;
-    }
-
-    /**
-     * Special case: an extension is always of type {@code jar}, so can be transformed to an ArtifactCoordinate.
-     * 
-     * @param extension {@link Extension}
-     * @return {@link ArtifactCoordinate}
-     */
-    public static ArtifactCoordinate toArtifactCoordinate( Extension extension )
-    {
-        DefaultArtifactCoordinate coordinate = new DefaultArtifactCoordinate();
-
-        coordinate.setGroupId( extension.getGroupId() );
-        coordinate.setArtifactId( extension.getArtifactId() );
-        coordinate.setVersion( extension.getVersion() );
-
-        return coordinate;
-    }
-
-    /**
-     * Special case: a parent is always of type {@code pom}, so can be transformed to an ArtifactCoordinate.
-     * 
-     * @param parent {@link Parent}
-     * @return {@link ArtifactCoordinate}
-     */
-    public static ArtifactCoordinate toArtifactCoordinate( Parent parent )
-    {
-        DefaultArtifactCoordinate coordinate = new DefaultArtifactCoordinate();
-
-        coordinate.setGroupId( parent.getGroupId() );
-        coordinate.setArtifactId( parent.getArtifactId() );
-        coordinate.setVersion( parent.getVersion() );
-        coordinate.setExtension( "pom" );
-
-        return coordinate;
-    }
-
-    /**
-     * Special case: a plugin is always of type {@code jar}, so can be transformed to an ArtifactCoordinate.
-     * 
-     * @param plugin {@link Plugin}
-     * @return {@link ArtifactCoordinate}
-     */
-    public static ArtifactCoordinate toArtifactCoordinate( Plugin plugin )
-    {
-        DefaultArtifactCoordinate coordinate = new DefaultArtifactCoordinate();
-
-        coordinate.setGroupId( plugin.getGroupId() );
-        coordinate.setArtifactId( plugin.getArtifactId() );
-        coordinate.setVersion( plugin.getVersion() );
-
-        return coordinate;
-    }
-    
-    /**
-     * Special case: a reportPlugin is always of type {@code jar}, so can be transformed to an ArtifactCoordinate.
-     * 
-     * @param plugin {@link ReportPlugin}
-     * @return {@link ArtifactCoordinate}
-     */
-    public static ArtifactCoordinate toArtifactCoordinate( ReportPlugin plugin )
-    {
-        DefaultArtifactCoordinate coordinate = new DefaultArtifactCoordinate();
-
-        coordinate.setGroupId( plugin.getGroupId() );
-        coordinate.setArtifactId( plugin.getArtifactId() );
-        coordinate.setVersion( plugin.getVersion() );
-
-        return coordinate;
-    }
-
-}
diff --git a/maven-3.0.x/src/main/java/org/apache/maven/shared/transfer/artifact/deploy/ArtifactDeployer.java b/maven-3.0.x/src/main/java/org/apache/maven/shared/transfer/artifact/deploy/ArtifactDeployer.java
deleted file mode 100644
index 768b091..0000000
--- a/maven-3.0.x/src/main/java/org/apache/maven/shared/transfer/artifact/deploy/ArtifactDeployer.java
+++ /dev/null
@@ -1,59 +0,0 @@
-package org.apache.maven.shared.transfer.artifact.deploy;
-
-/*
- * 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.
- */
-
-import java.util.Collection;
-
-import org.apache.maven.artifact.Artifact;
-import org.apache.maven.artifact.repository.ArtifactRepository;
-import org.apache.maven.project.ProjectBuildingRequest;
-
-/**
- * 
- */
-public interface ArtifactDeployer
-{
-
-    /**
-     * @param request {@link ProjectBuildingRequest}
-     * @param mavenArtifacts {@link Artifact}
-     * @throws ArtifactDeployerException in case of an error.
-     * @throws IllegalArgumentException in case of parameter <code>request</code> is <code>null</code> or parameter
-     *             <code>mavenArtifacts</code> is <code>null</code> or <code>mavenArtifacts.isEmpty()</code> is
-     *             <code>true</code>.
-     */
-    void deploy( ProjectBuildingRequest request, Collection<Artifact> mavenArtifacts )
-        throws ArtifactDeployerException;
-
-    /**
-     * @param request the building request
-     * @param remoteRepository the repository to deploy to. If {@code null} the {@code mavenArtifact.getRepository()} is
-     *            used.
-     * @param mavenArtifacts the artifacts to deploy
-     * @throws ArtifactDeployerException in case of an error.
-     * @throws IllegalArgumentException in case of parameter <code>request</code> is <code>null</code> or parameter
-     *             <code>mavenArtifacts</code> is <code>null</code> or <code>mavenArtifacts.isEmpty()</code> is
-     *             <code>true</code>.
-     */
-    void deploy( ProjectBuildingRequest request, ArtifactRepository remoteRepository,
-                 Collection<Artifact> mavenArtifacts )
-        throws ArtifactDeployerException;
-
-}
diff --git a/maven-3.0.x/src/main/java/org/apache/maven/shared/transfer/artifact/deploy/ArtifactDeployerException.java b/maven-3.0.x/src/main/java/org/apache/maven/shared/transfer/artifact/deploy/ArtifactDeployerException.java
deleted file mode 100644
index e9095e2..0000000
--- a/maven-3.0.x/src/main/java/org/apache/maven/shared/transfer/artifact/deploy/ArtifactDeployerException.java
+++ /dev/null
@@ -1,44 +0,0 @@
-package org.apache.maven.shared.transfer.artifact.deploy;
-
-/*
- * 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.
- */
-
-/**
- * An artifact could not correctly being deployed.
- * 
- */
-public class ArtifactDeployerException
-    extends Exception
-{
-
-    /**
-     * 
-     */
-    private static final long serialVersionUID = 7421964724059077698L;
-
-    /**
-     * @param message The message of the error.
-     * @param e {@link Exception}
-     */
-    public ArtifactDeployerException( String message, Exception e )
-    {
-        super( message, e );
-    }
-
-}
diff --git a/maven-3.0.x/src/main/java/org/apache/maven/shared/transfer/artifact/deploy/internal/DefaultArtifactDeployer.java b/maven-3.0.x/src/main/java/org/apache/maven/shared/transfer/artifact/deploy/internal/DefaultArtifactDeployer.java
deleted file mode 100644
index 11a268c..0000000
--- a/maven-3.0.x/src/main/java/org/apache/maven/shared/transfer/artifact/deploy/internal/DefaultArtifactDeployer.java
+++ /dev/null
@@ -1,145 +0,0 @@
-package org.apache.maven.shared.transfer.artifact.deploy.internal;
-
-/*
- * 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.
- */
-
-import java.util.Collection;
-
-import org.apache.maven.artifact.Artifact;
-import org.apache.maven.artifact.repository.ArtifactRepository;
-import org.apache.maven.project.ProjectBuildingRequest;
-import org.apache.maven.shared.transfer.artifact.deploy.ArtifactDeployer;
-import org.apache.maven.shared.transfer.artifact.deploy.ArtifactDeployerException;
-import org.codehaus.plexus.PlexusConstants;
-import org.codehaus.plexus.PlexusContainer;
-import org.codehaus.plexus.component.annotations.Component;
-import org.codehaus.plexus.component.repository.exception.ComponentLookupException;
-import org.codehaus.plexus.context.Context;
-import org.codehaus.plexus.context.ContextException;
-import org.codehaus.plexus.personality.plexus.lifecycle.phase.Contextualizable;
-
-/**
- *
- */
-@Component( role = ArtifactDeployer.class )
-class DefaultArtifactDeployer implements ArtifactDeployer, Contextualizable
-{
-
-    private PlexusContainer container;
-
-    @Override
-    public void deploy( ProjectBuildingRequest request, Collection<Artifact> mavenArtifacts )
-            throws ArtifactDeployerException
-    {
-        validateParameters( request, mavenArtifacts );
-
-        try
-        {
-            getMavenArtifactDeployer( request ).deploy( mavenArtifacts );
-        }
-        catch ( ComponentLookupException e )
-        {
-            throw new ArtifactDeployerException( e.getMessage(), e );
-        }
-    }
-
-    @Override
-    public void deploy( ProjectBuildingRequest request, ArtifactRepository remoteRepository,
-            Collection<Artifact> mavenArtifacts ) throws ArtifactDeployerException
-    {
-        validateParameters( request, mavenArtifacts );
-        try
-        {
-            getMavenArtifactDeployer( request ).deploy( remoteRepository, mavenArtifacts );
-        }
-        catch ( ComponentLookupException e )
-        {
-            throw new ArtifactDeployerException( e.getMessage(), e );
-        }
-    }
-
-    private void validateParameters( ProjectBuildingRequest request, Collection<Artifact> mavenArtifacts )
-    {
-        if ( request == null )
-        {
-            throw new IllegalArgumentException( "The parameter request is not allowed to be null." );
-        }
-        if ( mavenArtifacts == null )
-        {
-            throw new IllegalArgumentException( "The parameter mavenArtifacts is not allowed to be null." );
-        }
-        if ( mavenArtifacts.isEmpty() )
-        {
-            throw new IllegalArgumentException( "The collection mavenArtifacts is not allowed to be empty." );
-        }
-    }
-
-    /**
-     * @return true if the current Maven version is Maven 3.1.
-     */
-    private boolean isMaven31()
-    {
-        try
-        {
-            // Maven 3.1 specific
-            Thread.currentThread().getContextClassLoader().loadClass( "org.eclipse.aether.artifact.Artifact" );
-            return true;
-        }
-        catch ( ClassNotFoundException e )
-        {
-            return false;
-        }
-    }
-
-    /**
-     * Injects the Plexus content.
-     *
-     * @param context Plexus context to inject.
-     * @throws ContextException if the PlexusContainer could not be located.
-     */
-    public void contextualize( Context context ) throws ContextException
-    {
-        container = (PlexusContainer) context.get( PlexusConstants.PLEXUS_KEY );
-    }
-
-    private MavenArtifactDeployer getMavenArtifactDeployer( ProjectBuildingRequest buildingRequest )
-            throws ComponentLookupException, ArtifactDeployerException
-    {
-        if ( isMaven31() )
-        {
-            org.eclipse.aether.RepositorySystem repositorySystem = container.lookup(
-                    org.eclipse.aether.RepositorySystem.class );
-
-            org.eclipse.aether.RepositorySystemSession session = Invoker.invoke( buildingRequest,
-                    "getRepositorySession" );
-
-            return new Maven31ArtifactDeployer( repositorySystem, session );
-        }
-        else
-        {
-            org.sonatype.aether.RepositorySystem repositorySystem = container.lookup(
-                    org.sonatype.aether.RepositorySystem.class );
-
-            org.sonatype.aether.RepositorySystemSession session = Invoker.invoke( buildingRequest,
-                    "getRepositorySession" );
-
-            return new Maven30ArtifactDeployer( repositorySystem, session );
-        }
-    }
-}
diff --git a/maven-3.0.x/src/main/java/org/apache/maven/shared/transfer/artifact/deploy/internal/Invoker.java b/maven-3.0.x/src/main/java/org/apache/maven/shared/transfer/artifact/deploy/internal/Invoker.java
deleted file mode 100644
index 485e58d..0000000
--- a/maven-3.0.x/src/main/java/org/apache/maven/shared/transfer/artifact/deploy/internal/Invoker.java
+++ /dev/null
@@ -1,66 +0,0 @@
-package org.apache.maven.shared.transfer.artifact.deploy.internal;
-
-/*
- * 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.
- */
-
-import java.lang.reflect.InvocationTargetException;
-
-import org.apache.maven.shared.transfer.artifact.deploy.ArtifactDeployerException;
-
-/**
- * Invokes method on objects using reflection.
- */
-final class Invoker
-{
-    private Invoker()
-    {
-        // do not instantiate
-    }
-
-    public static <T> T invoke( Object object, String method )
-        throws ArtifactDeployerException
-    {
-        try
-        {
-            @SuppressWarnings( "unchecked" )
-            T invoke = (T) object.getClass().getMethod( method ).invoke( object );
-            return invoke;
-        }
-        catch ( IllegalAccessException | InvocationTargetException | NoSuchMethodException e )
-        {
-            throw new ArtifactDeployerException( e.getMessage(), e );
-        }
-    }
-
-    public static <T> T invoke( Class<?> objectClazz, String staticMethod, Class<?> argClazz, Object arg )
-                    throws ArtifactDeployerException
-    {
-        try
-        {
-            @SuppressWarnings( "unchecked" )
-            T invoke = (T) objectClazz.getMethod( staticMethod, argClazz ).invoke( null, arg );
-            return invoke;
-        }
-        catch ( IllegalAccessException | InvocationTargetException | NoSuchMethodException e )
-        {
-            throw new ArtifactDeployerException( e.getMessage(), e );
-        }
-    }
-
-}
diff --git a/maven-3.0.x/src/main/java/org/apache/maven/shared/transfer/artifact/deploy/internal/Maven30ArtifactDeployer.java b/maven-3.0.x/src/main/java/org/apache/maven/shared/transfer/artifact/deploy/internal/Maven30ArtifactDeployer.java
index 611eb4c..cfe6052 100644
--- a/maven-3.0.x/src/main/java/org/apache/maven/shared/transfer/artifact/deploy/internal/Maven30ArtifactDeployer.java
+++ b/maven-3.0.x/src/main/java/org/apache/maven/shared/transfer/artifact/deploy/internal/Maven30ArtifactDeployer.java
@@ -19,15 +19,16 @@ package org.apache.maven.shared.transfer.artifact.deploy.internal;
  * under the License.
  */
 
-import java.util.Collection;
-
 import org.apache.maven.RepositoryUtils;
 import org.apache.maven.artifact.metadata.ArtifactMetadata;
 import org.apache.maven.artifact.repository.ArtifactRepository;
 import org.apache.maven.artifact.repository.metadata.ArtifactRepositoryMetadata;
+import org.apache.maven.project.ProjectBuildingRequest;
 import org.apache.maven.project.artifact.ProjectArtifactMetadata;
 import org.apache.maven.shared.transfer.artifact.deploy.ArtifactDeployerException;
 import org.apache.maven.shared.transfer.metadata.internal.Maven30MetadataBridge;
+import org.apache.maven.shared.transfer.support.DelegateSupport;
+import org.apache.maven.shared.transfer.support.Selector;
 import org.sonatype.aether.RepositorySystem;
 import org.sonatype.aether.RepositorySystemSession;
 import org.sonatype.aether.artifact.Artifact;
@@ -36,34 +37,42 @@ import org.sonatype.aether.deployment.DeploymentException;
 import org.sonatype.aether.repository.RemoteRepository;
 import org.sonatype.aether.util.artifact.SubArtifact;
 
+import javax.inject.Inject;
+import javax.inject.Named;
+import javax.inject.Singleton;
+import java.util.Collection;
+import java.util.Objects;
+
 /**
- * 
+ *
  */
-class Maven30ArtifactDeployer
-    implements MavenArtifactDeployer
+@Singleton
+@Named( Selector.MAVEN_3_0_X )
+public class Maven30ArtifactDeployer
+        extends DelegateSupport
+        implements ArtifactDeployerDelegate
 {
-
     private final RepositorySystem repositorySystem;
-    
-    private final RepositorySystemSession session;
-    
-    Maven30ArtifactDeployer( RepositorySystem repositorySystem, RepositorySystemSession session )
+
+    @Inject
+    public Maven30ArtifactDeployer( RepositorySystem repositorySystem )
     {
-        this.repositorySystem = repositorySystem;
-        this.session = session;
+        this.repositorySystem = Objects.requireNonNull( repositorySystem );
     }
 
     @Override
-    public void deploy( Collection<org.apache.maven.artifact.Artifact> mavenArtifacts )
-                            throws ArtifactDeployerException
+    public void deploy( ProjectBuildingRequest buildingRequest,
+                        Collection<org.apache.maven.artifact.Artifact> mavenArtifacts )
+            throws ArtifactDeployerException
     {
-        deploy( null, mavenArtifacts );
+        deploy( buildingRequest, null, mavenArtifacts );
     }
 
     @Override
-    public void deploy( ArtifactRepository remoteRepository,
+    public void deploy( ProjectBuildingRequest buildingRequest,
+                        ArtifactRepository remoteRepository,
                         Collection<org.apache.maven.artifact.Artifact> mavenArtifacts )
-                            throws ArtifactDeployerException
+            throws ArtifactDeployerException
     {
         // prepare request
         DeployRequest request = new DeployRequest();
@@ -72,20 +81,20 @@ class Maven30ArtifactDeployer
 
         if ( remoteRepository != null )
         {
-            defaultRepository = getRemoteRepository( session, remoteRepository );
+            defaultRepository = getRemoteRepository( buildingRequest.getRepositorySession(), remoteRepository );
         }
 
         // transform artifacts
         for ( org.apache.maven.artifact.Artifact mavenArtifact : mavenArtifacts )
         {
-            Artifact aetherArtifact = Invoker.invoke( RepositoryUtils.class, "toArtifact",
-                                       org.apache.maven.artifact.Artifact.class, mavenArtifact );
+            Artifact aetherArtifact = RepositoryUtils.toArtifact( mavenArtifact );
             request.addArtifact( aetherArtifact );
 
             RemoteRepository aetherRepository;
             if ( remoteRepository == null )
             {
-                aetherRepository = getRemoteRepository( session, mavenArtifact.getRepository() );
+                aetherRepository = getRemoteRepository( buildingRequest.getRepositorySession(),
+                        mavenArtifact.getRepository() );
             }
             else
             {
@@ -103,15 +112,15 @@ class Maven30ArtifactDeployer
                     request.addArtifact( pomArtifact );
                 }
                 else if ( // metadata instanceof SnapshotArtifactRepositoryMetadata ||
-                metadata instanceof ArtifactRepositoryMetadata )
+                        metadata instanceof ArtifactRepositoryMetadata )
                 {
                     // eaten, handled by repo system
                 }
                 else if ( metadata instanceof org.apache.maven.shared.transfer.metadata.ArtifactMetadata )
                 {
                     org.apache.maven.shared.transfer.metadata.ArtifactMetadata transferMedata =
-                                    ( org.apache.maven.shared.transfer.metadata.ArtifactMetadata ) metadata;
-                    
+                            (org.apache.maven.shared.transfer.metadata.ArtifactMetadata) metadata;
+
                     request.addMetadata( new Maven30MetadataBridge( metadata ).setFile( transferMedata.getFile() ) );
                 }
             }
@@ -120,7 +129,7 @@ class Maven30ArtifactDeployer
         // deploy
         try
         {
-            repositorySystem.deploy( session, request );
+            repositorySystem.deploy( buildingRequest.getRepositorySession(), request );
         }
         catch ( DeploymentException e )
         {
@@ -128,12 +137,10 @@ class Maven30ArtifactDeployer
         }
     }
 
-    private RemoteRepository getRemoteRepository( RepositorySystemSession session, ArtifactRepository remoteRepository )
-        throws ArtifactDeployerException
+    private RemoteRepository getRemoteRepository( RepositorySystemSession session,
+                                                  ArtifactRepository remoteRepository )
     {
-        RemoteRepository aetherRepo = Invoker.invoke( RepositoryUtils.class, "toRepo",
-                                                                         ArtifactRepository.class,
-                                                                         remoteRepository );
+        RemoteRepository aetherRepo = RepositoryUtils.toRepo( remoteRepository );
 
         if ( aetherRepo.getAuthentication() == null )
         {
diff --git a/maven-3.0.x/src/main/java/org/apache/maven/shared/transfer/artifact/deploy/internal/Maven31ArtifactDeployer.java b/maven-3.0.x/src/main/java/org/apache/maven/shared/transfer/artifact/deploy/internal/Maven31ArtifactDeployer.java
deleted file mode 100644
index ed61b12..0000000
--- a/maven-3.0.x/src/main/java/org/apache/maven/shared/transfer/artifact/deploy/internal/Maven31ArtifactDeployer.java
+++ /dev/null
@@ -1,154 +0,0 @@
-package org.apache.maven.shared.transfer.artifact.deploy.internal;
-
-/*
- * 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.
- */
-
-import java.util.Collection;
-
-import org.apache.maven.RepositoryUtils;
-import org.apache.maven.artifact.metadata.ArtifactMetadata;
-import org.apache.maven.artifact.repository.ArtifactRepository;
-import org.apache.maven.artifact.repository.metadata.ArtifactRepositoryMetadata;
-import org.apache.maven.project.artifact.ProjectArtifactMetadata;
-import org.apache.maven.shared.transfer.artifact.deploy.ArtifactDeployerException;
-import org.apache.maven.shared.transfer.metadata.internal.Maven31MetadataBridge;
-import org.eclipse.aether.RepositorySystem;
-import org.eclipse.aether.RepositorySystemSession;
-import org.eclipse.aether.artifact.Artifact;
-import org.eclipse.aether.deployment.DeployRequest;
-import org.eclipse.aether.deployment.DeploymentException;
-import org.eclipse.aether.repository.RemoteRepository;
-import org.eclipse.aether.util.artifact.SubArtifact;
-
-/**
- *
- */
-class Maven31ArtifactDeployer implements MavenArtifactDeployer
-{
-
-    private final RepositorySystem repositorySystem;
-
-    private final RepositorySystemSession session;
-
-    Maven31ArtifactDeployer( RepositorySystem repositorySystem, RepositorySystemSession session )
-    {
-        super();
-        this.repositorySystem = repositorySystem;
-        this.session = session;
-    }
-
-    @Override
-    public void deploy( Collection<org.apache.maven.artifact.Artifact> mavenArtifacts ) throws ArtifactDeployerException
-    {
-        deploy( null, mavenArtifacts );
-    }
-
-    @Override
-    public void deploy( ArtifactRepository remoteRepository,
-            Collection<org.apache.maven.artifact.Artifact> mavenArtifacts ) throws ArtifactDeployerException
-    {
-        // prepare request
-        DeployRequest request = new DeployRequest();
-
-        RemoteRepository defaultRepository = null;
-
-        if ( remoteRepository != null )
-        {
-            defaultRepository = getRemoteRepository( session, remoteRepository );
-        }
-
-        // transform artifacts
-        for ( org.apache.maven.artifact.Artifact mavenArtifact : mavenArtifacts )
-        {
-            Artifact aetherArtifact = Invoker.invoke( RepositoryUtils.class, "toArtifact",
-                    org.apache.maven.artifact.Artifact.class, mavenArtifact );
-            request.addArtifact( aetherArtifact );
-
-            RemoteRepository aetherRepository;
-            if ( remoteRepository == null )
-            {
-                aetherRepository = getRemoteRepository( session, mavenArtifact.getRepository() );
-            }
-            else
-            {
-                aetherRepository = defaultRepository;
-            }
-
-            request.setRepository( aetherRepository );
-
-            for ( ArtifactMetadata metadata : mavenArtifact.getMetadataList() )
-            {
-                if ( metadata instanceof ProjectArtifactMetadata )
-                {
-                    Artifact pomArtifact = new SubArtifact( aetherArtifact, "", "pom" );
-                    pomArtifact = pomArtifact.setFile( ( (ProjectArtifactMetadata) metadata ).getFile() );
-                    request.addArtifact( pomArtifact );
-                }
-                else if ( // metadata instanceof SnapshotArtifactRepositoryMetadata ||
-                        metadata instanceof ArtifactRepositoryMetadata )
-                {
-                    // eaten, handled by repo system
-                }
-                else if ( metadata instanceof org.apache.maven.shared.transfer.metadata.ArtifactMetadata )
-                {
-                    org.apache.maven.shared.transfer.metadata.ArtifactMetadata transferMetadata =
-                            (org.apache.maven.shared.transfer.metadata.ArtifactMetadata) metadata;
-
-                    request.addMetadata( new Maven31MetadataBridge( metadata ).setFile( transferMetadata.getFile() ) );
-                }
-            }
-        }
-
-        // deploy
-        try
-        {
-            repositorySystem.deploy( session, request );
-        }
-        catch ( DeploymentException e )
-        {
-            throw new ArtifactDeployerException( e.getMessage(), e );
-        }
-    }
-
-    private RemoteRepository getRemoteRepository( RepositorySystemSession session, ArtifactRepository remoteRepository )
-            throws ArtifactDeployerException
-    {
-        RemoteRepository aetherRepo = Invoker.invoke( RepositoryUtils.class, "toRepo", ArtifactRepository.class,
-                remoteRepository );
-
-        if ( aetherRepo.getAuthentication() == null || aetherRepo.getProxy() == null )
-        {
-            RemoteRepository.Builder builder = new RemoteRepository.Builder( aetherRepo );
-
-            if ( aetherRepo.getAuthentication() == null )
-            {
-                builder.setAuthentication( session.getAuthenticationSelector().getAuthentication( aetherRepo ) );
-            }
-
-            if ( aetherRepo.getProxy() == null )
-            {
-                builder.setProxy( session.getProxySelector().getProxy( aetherRepo ) );
-            }
-
-            aetherRepo = builder.build();
-        }
-
-        return aetherRepo;
-    }
-}
diff --git a/maven-3.0.x/src/main/java/org/apache/maven/shared/transfer/artifact/deploy/internal/MavenArtifactDeployer.java b/maven-3.0.x/src/main/java/org/apache/maven/shared/transfer/artifact/deploy/internal/MavenArtifactDeployer.java
deleted file mode 100644
index 8f9fea1..0000000
--- a/maven-3.0.x/src/main/java/org/apache/maven/shared/transfer/artifact/deploy/internal/MavenArtifactDeployer.java
+++ /dev/null
@@ -1,42 +0,0 @@
-package org.apache.maven.shared.transfer.artifact.deploy.internal;
-
-/*
- * 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.
- */
-
-import java.util.Collection;
-
-import org.apache.maven.artifact.Artifact;
-import org.apache.maven.artifact.repository.ArtifactRepository;
-import org.apache.maven.shared.transfer.artifact.deploy.ArtifactDeployerException;
-
-/**
- * 
- * @author Robert Scholte
- *
- */
-interface MavenArtifactDeployer
-{
-
-    void deploy( Collection<Artifact> mavenArtifacts )
-        throws ArtifactDeployerException;
-
-    void deploy( ArtifactRepository remoteRepository, Collection<Artifact> mavenArtifacts )
-        throws ArtifactDeployerException;
-
-}
diff --git a/maven-3.0.x/src/main/java/org/apache/maven/shared/transfer/artifact/install/ArtifactInstaller.java b/maven-3.0.x/src/main/java/org/apache/maven/shared/transfer/artifact/install/ArtifactInstaller.java
deleted file mode 100644
index 5ca2f7c..0000000
--- a/maven-3.0.x/src/main/java/org/apache/maven/shared/transfer/artifact/install/ArtifactInstaller.java
+++ /dev/null
@@ -1,59 +0,0 @@
-package org.apache.maven.shared.transfer.artifact.install;
-
-/*
- * 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.
- */
-
-import java.io.File;
-import java.util.Collection;
-
-import org.apache.maven.artifact.Artifact;
-import org.apache.maven.project.ProjectBuildingRequest;
-
-/**
- * @author Robert Scholte
- */
-public interface ArtifactInstaller
-{
-
-    /**
-     * @param request {@link ProjectBuildingRequest}
-     * @param mavenArtifacts {@link Artifact} (no null or empty collection allowed.)
-     * @throws ArtifactInstallerException in case of an error.
-     * @throws IllegalArgumentException in case <code>request</code> is <code>null</code>, <code>mavenArtifacts</code>
-     *             is <code>null</code> or <code>mavenArtifacts</code> is empty (<code>mavenArtifacts.isEmpty()</code>
-     *             == <code>true</code>).
-     */
-    void install( ProjectBuildingRequest request, Collection<Artifact> mavenArtifacts )
-        throws ArtifactInstallerException, IllegalArgumentException;
-
-    /**
-     * @param request {@link ProjectBuildingRequest}.
-     * @param localRepository The location for the local repository.
-     * @param mavenArtifacts Collection of {@link Artifact MavenArtifacts}
-     * @throws ArtifactInstallerException In case of an error which can be the a given artifact can not be found or the
-     *             installation has failed.
-     * @throws IllegalArgumentException in case of parameter <code>request</code> is <code>null</code> or parameter
-     *             <code>localRepository</code> is <code>null</code> or <code>localRepository</code> is not a directory
-     *             or parameter <code>mavenArtifacts</code> is <code>null</code> or
-     *             <code>mavenArtifacts.isEmpty()</code> is <code>true</code>.
-     */
-    void install( ProjectBuildingRequest request, File localRepository, Collection<Artifact> mavenArtifacts )
-        throws ArtifactInstallerException;
-
-}
diff --git a/maven-3.0.x/src/main/java/org/apache/maven/shared/transfer/artifact/install/ArtifactInstallerException.java b/maven-3.0.x/src/main/java/org/apache/maven/shared/transfer/artifact/install/ArtifactInstallerException.java
deleted file mode 100644
index c829443..0000000
--- a/maven-3.0.x/src/main/java/org/apache/maven/shared/transfer/artifact/install/ArtifactInstallerException.java
+++ /dev/null
@@ -1,43 +0,0 @@
-package org.apache.maven.shared.transfer.artifact.install;
-
-/*
- * 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.
- */
-
-/**
- * 
- */
-public class ArtifactInstallerException
-    extends Exception
-{
-
-    /**
-     * 
-     */
-    private static final long serialVersionUID = 3652561971360586373L;
-
-    /**
-     * @param message The message of the error.
-     * @param e {@link Exception}
-     */
-    public ArtifactInstallerException( String message, Exception e )
-    {
-        super( message, e );
-    }
-
-}
diff --git a/maven-3.0.x/src/main/java/org/apache/maven/shared/transfer/artifact/install/internal/DefaultArtifactInstaller.java b/maven-3.0.x/src/main/java/org/apache/maven/shared/transfer/artifact/install/internal/DefaultArtifactInstaller.java
deleted file mode 100644
index 238e814..0000000
--- a/maven-3.0.x/src/main/java/org/apache/maven/shared/transfer/artifact/install/internal/DefaultArtifactInstaller.java
+++ /dev/null
@@ -1,162 +0,0 @@
-package org.apache.maven.shared.transfer.artifact.install.internal;
-
-/*
- * 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.
- */
-
-import java.io.File;
-import java.util.Collection;
-
-import org.apache.maven.artifact.Artifact;
-import org.apache.maven.project.ProjectBuildingRequest;
-import org.apache.maven.shared.transfer.artifact.install.ArtifactInstaller;
-import org.apache.maven.shared.transfer.artifact.install.ArtifactInstallerException;
-import org.apache.maven.shared.transfer.repository.RepositoryManager;
-import org.codehaus.plexus.PlexusConstants;
-import org.codehaus.plexus.PlexusContainer;
-import org.codehaus.plexus.component.annotations.Component;
-import org.codehaus.plexus.component.annotations.Requirement;
-import org.codehaus.plexus.component.repository.exception.ComponentLookupException;
-import org.codehaus.plexus.context.Context;
-import org.codehaus.plexus.context.ContextException;
-import org.codehaus.plexus.personality.plexus.lifecycle.phase.Contextualizable;
-
-/**
- *
- */
-@Component( role = ArtifactInstaller.class )
-class DefaultArtifactInstaller implements ArtifactInstaller, Contextualizable
-{
-    private PlexusContainer container;
-
-    @Requirement
-    private RepositoryManager repositoryManager;
-
-    @Override
-    public void install( ProjectBuildingRequest request, Collection<Artifact> mavenArtifacts )
-            throws ArtifactInstallerException, IllegalArgumentException
-    {
-        validateParameters( request, mavenArtifacts );
-        try
-        {
-            getMavenArtifactInstaller( request ).install( mavenArtifacts );
-        }
-        catch ( ComponentLookupException e )
-        {
-            throw new ArtifactInstallerException( e.getMessage(), e );
-        }
-    }
-
-    @Override
-    public void install( ProjectBuildingRequest request, File localRepositry, Collection<Artifact> mavenArtifacts )
-            throws ArtifactInstallerException
-    {
-        validateParameters( request, mavenArtifacts );
-        if ( localRepositry == null )
-        {
-            throw new IllegalArgumentException( "The parameter localRepository is not allowed to be null." );
-        }
-        if ( !localRepositry.isDirectory() )
-        {
-            throw new IllegalArgumentException( "The parameter localRepository must be a directory." );
-        }
-
-        // TODO: Should we check for exists() ?
-
-        // update local repo in request 
-        ProjectBuildingRequest newRequest = repositoryManager.setLocalRepositoryBasedir( request, localRepositry );
-
-        try
-        {
-            getMavenArtifactInstaller( newRequest ).install( mavenArtifacts );
-        }
-        catch ( ComponentLookupException e )
-        {
-            throw new ArtifactInstallerException( e.getMessage(), e );
-        }
-    }
-
-    private void validateParameters( ProjectBuildingRequest request, Collection<Artifact> mavenArtifacts )
-    {
-        if ( request == null )
-        {
-            throw new IllegalArgumentException( "The parameter request is not allowed to be null." );
-        }
-        if ( mavenArtifacts == null )
-        {
-            throw new IllegalArgumentException( "The parameter mavenArtifacts is not allowed to be null." );
-        }
-        if ( mavenArtifacts.isEmpty() )
-        {
-            throw new IllegalArgumentException( "The collection mavenArtifacts is not allowed to be empty." );
-        }
-    }
-
-    /**
-     * @return true if the current Maven version is Maven 3.1.
-     */
-    private boolean isMaven31()
-    {
-        try
-        {
-            // Maven 3.1 specific
-            Thread.currentThread().getContextClassLoader().loadClass( "org.eclipse.aether.artifact.Artifact" );
-            return true;
-        }
-        catch ( ClassNotFoundException e )
-        {
-            return false;
-        }
-    }
-
-    /**
-     * Injects the Plexus content.
-     *
-     * @param context Plexus context to inject.
-     * @throws ContextException if the PlexusContainer could not be located.
-     */
-    public void contextualize( Context context ) throws ContextException
-    {
-        container = (PlexusContainer) context.get( PlexusConstants.PLEXUS_KEY );
-    }
-
-    private MavenArtifactInstaller getMavenArtifactInstaller( ProjectBuildingRequest buildingRequest )
-            throws ComponentLookupException, ArtifactInstallerException
-    {
-        if ( isMaven31() )
-        {
-            org.eclipse.aether.RepositorySystem repositorySystem = container.lookup(
-                    org.eclipse.aether.RepositorySystem.class );
-
-            org.eclipse.aether.RepositorySystemSession session = Invoker.invoke( buildingRequest,
-                    "getRepositorySession" );
-
-            return new Maven31ArtifactInstaller( repositorySystem, session );
-        }
-        else
-        {
-            org.sonatype.aether.RepositorySystem repositorySystem = container.lookup(
-                    org.sonatype.aether.RepositorySystem.class );
-
-            org.sonatype.aether.RepositorySystemSession session = Invoker.invoke( buildingRequest,
-                    "getRepositorySession" );
-
-            return new Maven30ArtifactInstaller( repositorySystem, session );
-        }
-    }
-}
diff --git a/maven-3.0.x/src/main/java/org/apache/maven/shared/transfer/artifact/install/internal/Invoker.java b/maven-3.0.x/src/main/java/org/apache/maven/shared/transfer/artifact/install/internal/Invoker.java
deleted file mode 100644
index eb8c69e..0000000
--- a/maven-3.0.x/src/main/java/org/apache/maven/shared/transfer/artifact/install/internal/Invoker.java
+++ /dev/null
@@ -1,65 +0,0 @@
-package org.apache.maven.shared.transfer.artifact.install.internal;
-
-/*
- * 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.
- */
-
-import java.lang.reflect.InvocationTargetException;
-
-import org.apache.maven.shared.transfer.artifact.install.ArtifactInstallerException;
-
-/**
- * Invokes method on objects using reflection.
- */
-final class Invoker
-{
-    private Invoker()
-    {
-        // do not instantiate
-    }
-
-    public static <T> T invoke( Object object, String method )
-        throws ArtifactInstallerException
-    {
-        try
-        {
-            @SuppressWarnings( "unchecked" )
-            T invoke = (T) object.getClass().getMethod( method ).invoke( object );
-            return invoke;
-        }
-        catch ( IllegalAccessException | InvocationTargetException | NoSuchMethodException e )
-        {
-            throw new ArtifactInstallerException( e.getMessage(), e );
-        }
-    }
-
-    public static <T> T invoke( Class<?> objectClazz, String staticMethod, Class<?> argClazz, Object arg )
-        throws ArtifactInstallerException
-    {
-        try
-        {
-            @SuppressWarnings( "unchecked" )
-            T invoke = (T) objectClazz.getMethod( staticMethod, argClazz ).invoke( null, arg );
-            return invoke;
-        }
-        catch ( IllegalAccessException | InvocationTargetException | NoSuchMethodException e )
-        {
-            throw new ArtifactInstallerException( e.getMessage(), e );
-        }
-    }
-}
diff --git a/maven-3.0.x/src/main/java/org/apache/maven/shared/transfer/artifact/install/internal/Maven30ArtifactInstaller.java b/maven-3.0.x/src/main/java/org/apache/maven/shared/transfer/artifact/install/internal/Maven30ArtifactInstaller.java
index fbff698..b8df8b8 100644
--- a/maven-3.0.x/src/main/java/org/apache/maven/shared/transfer/artifact/install/internal/Maven30ArtifactInstaller.java
+++ b/maven-3.0.x/src/main/java/org/apache/maven/shared/transfer/artifact/install/internal/Maven30ArtifactInstaller.java
@@ -19,49 +19,77 @@ package org.apache.maven.shared.transfer.artifact.install.internal;
  * under the License.
  */
 
-import java.util.Collection;
-
 import org.apache.maven.RepositoryUtils;
 import org.apache.maven.artifact.metadata.ArtifactMetadata;
 import org.apache.maven.artifact.repository.metadata.ArtifactRepositoryMetadata;
+import org.apache.maven.project.ProjectBuildingRequest;
 import org.apache.maven.project.artifact.ProjectArtifactMetadata;
 import org.apache.maven.shared.transfer.artifact.install.ArtifactInstallerException;
 import org.apache.maven.shared.transfer.metadata.internal.Maven30MetadataBridge;
+import org.apache.maven.shared.transfer.repository.RepositoryManager;
+import org.apache.maven.shared.transfer.support.DelegateSupport;
+import org.apache.maven.shared.transfer.support.Selector;
 import org.sonatype.aether.RepositorySystem;
-import org.sonatype.aether.RepositorySystemSession;
 import org.sonatype.aether.artifact.Artifact;
 import org.sonatype.aether.installation.InstallRequest;
 import org.sonatype.aether.installation.InstallationException;
 import org.sonatype.aether.util.artifact.SubArtifact;
 
+import javax.inject.Inject;
+import javax.inject.Named;
+import javax.inject.Singleton;
+import java.io.File;
+import java.util.Collection;
+import java.util.Objects;
+
 /**
- * 
+ *
  */
-class Maven30ArtifactInstaller
-    implements MavenArtifactInstaller
+@Singleton
+@Named( Selector.MAVEN_3_0_X )
+public class Maven30ArtifactInstaller
+        extends DelegateSupport
+        implements ArtifactInstallerDelegate
 {
     private final RepositorySystem repositorySystem;
-    
-    private final RepositorySystemSession session; 
-    
-    Maven30ArtifactInstaller( RepositorySystem repositorySystem, RepositorySystemSession session )
+
+    private final RepositoryManager repositoryManager;
+
+    @Inject
+    public Maven30ArtifactInstaller( RepositorySystem repositorySystem,
+                                     RepositoryManager repositoryManager )
     {
-        this.repositorySystem = repositorySystem;
-        this.session = session;
+        this.repositorySystem = Objects.requireNonNull( repositorySystem );
+        this.repositoryManager = Objects.requireNonNull( repositoryManager );
     }
 
     @Override
-    public void install( Collection<org.apache.maven.artifact.Artifact> mavenArtifacts )
-        throws ArtifactInstallerException
+    public void install( ProjectBuildingRequest buildingRequest,
+                         Collection<org.apache.maven.artifact.Artifact> mavenArtifacts )
+            throws ArtifactInstallerException
     {
+        install( buildingRequest, null, mavenArtifacts );
+    }
+
+    @Override
+    public void install( ProjectBuildingRequest buildingRequest,
+                         File localRepository,
+                         Collection<org.apache.maven.artifact.Artifact> mavenArtifacts )
+            throws ArtifactInstallerException
+    {
+        ProjectBuildingRequest currentBuildingRequest = buildingRequest;
+        if ( localRepository != null )
+        {
+            // update local repo in request
+            currentBuildingRequest = repositoryManager.setLocalRepositoryBasedir( buildingRequest, localRepository );
+        }
         // prepare installRequest
         InstallRequest request = new InstallRequest();
 
         // transform artifacts
         for ( org.apache.maven.artifact.Artifact mavenArtifact : mavenArtifacts )
         {
-            Artifact mainArtifact = Invoker.invoke( RepositoryUtils.class, "toArtifact",
-                                       org.apache.maven.artifact.Artifact.class, mavenArtifact );
+            Artifact mainArtifact = RepositoryUtils.toArtifact( mavenArtifact );
             request.addArtifact( mainArtifact );
 
             for ( ArtifactMetadata metadata : mavenArtifact.getMetadataList() )
@@ -73,29 +101,24 @@ class Maven30ArtifactInstaller
                     request.addArtifact( pomArtifact );
                 }
                 else if ( // metadata instanceof SnapshotArtifactRepositoryMetadata ||
-                metadata instanceof ArtifactRepositoryMetadata )
+                        metadata instanceof ArtifactRepositoryMetadata )
                 {
                     // eaten, handled by repo system
                 }
                 else if ( metadata instanceof org.apache.maven.shared.transfer.metadata.ArtifactMetadata )
                 {
                     org.apache.maven.shared.transfer.metadata.ArtifactMetadata transferMedata =
-                                    ( org.apache.maven.shared.transfer.metadata.ArtifactMetadata ) metadata;
-                    
+                            (org.apache.maven.shared.transfer.metadata.ArtifactMetadata) metadata;
+
                     request.addMetadata( new Maven30MetadataBridge( metadata ).setFile( transferMedata.getFile() ) );
                 }
             }
         }
 
-//        if ( localRepository != null )
-//        {
-//            buildingRequest = repositoryManager.setLocalRepositoryBasedir( buildingRequest, localRepository );
-//        }
-        
         // install
         try
         {
-            repositorySystem.install( session, request );
+            repositorySystem.install( currentBuildingRequest.getRepositorySession(), request );
         }
         catch ( InstallationException e )
         {
diff --git a/maven-3.0.x/src/main/java/org/apache/maven/shared/transfer/artifact/install/internal/Maven31ArtifactInstaller.java b/maven-3.0.x/src/main/java/org/apache/maven/shared/transfer/artifact/install/internal/Maven31ArtifactInstaller.java
deleted file mode 100644
index aa15504..0000000
--- a/maven-3.0.x/src/main/java/org/apache/maven/shared/transfer/artifact/install/internal/Maven31ArtifactInstaller.java
+++ /dev/null
@@ -1,101 +0,0 @@
-package org.apache.maven.shared.transfer.artifact.install.internal;
-
-/*
- * 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.
- */
-
-import java.util.Collection;
-
-import org.apache.maven.RepositoryUtils;
-import org.apache.maven.artifact.metadata.ArtifactMetadata;
-import org.apache.maven.artifact.repository.metadata.ArtifactRepositoryMetadata;
-import org.apache.maven.project.artifact.ProjectArtifactMetadata;
-import org.apache.maven.shared.transfer.artifact.install.ArtifactInstallerException;
-import org.apache.maven.shared.transfer.metadata.internal.Maven31MetadataBridge;
-import org.eclipse.aether.RepositorySystem;
-import org.eclipse.aether.RepositorySystemSession;
-import org.eclipse.aether.artifact.Artifact;
-import org.eclipse.aether.installation.InstallRequest;
-import org.eclipse.aether.installation.InstallationException;
-import org.eclipse.aether.util.artifact.SubArtifact;
-
-/**
- * 
- */
-class Maven31ArtifactInstaller
-    implements MavenArtifactInstaller
-{
-    private final RepositorySystem repositorySystem;
-
-    private final RepositorySystemSession session;
-    
-    Maven31ArtifactInstaller( RepositorySystem repositorySystem,
-                                     RepositorySystemSession session )
-    {
-        this.repositorySystem = repositorySystem;
-        this.session = session;
-    }
-
-    @Override
-    public void install( Collection<org.apache.maven.artifact.Artifact> mavenArtifacts )
-                             throws ArtifactInstallerException
-    {
-        // prepare installRequest
-        InstallRequest request = new InstallRequest();
-
-        // transform artifacts
-        for ( org.apache.maven.artifact.Artifact mavenArtifact : mavenArtifacts )
-        {
-            Artifact mainArtifact = Invoker.invoke( RepositoryUtils.class, "toArtifact",
-                                       org.apache.maven.artifact.Artifact.class, mavenArtifact );
-            request.addArtifact( mainArtifact );
-
-            for ( ArtifactMetadata metadata : mavenArtifact.getMetadataList() )
-            {
-                if ( metadata instanceof ProjectArtifactMetadata )
-                {
-                    Artifact pomArtifact = new SubArtifact( mainArtifact, "", "pom" );
-                    pomArtifact = pomArtifact.setFile( ( (ProjectArtifactMetadata) metadata ).getFile() );
-                    request.addArtifact( pomArtifact );
-                }
-                else if ( // metadata instanceof SnapshotArtifactRepositoryMetadata ||
-                metadata instanceof ArtifactRepositoryMetadata )
-                {
-                    // eaten, handled by repo system
-                }
-                else if ( metadata instanceof org.apache.maven.shared.transfer.metadata.ArtifactMetadata )
-                {
-                    org.apache.maven.shared.transfer.metadata.ArtifactMetadata transferMetadata = 
-                                    (org.apache.maven.shared.transfer.metadata.ArtifactMetadata) metadata;
-                    
-                    request.addMetadata( new Maven31MetadataBridge( metadata ).setFile( transferMetadata.getFile() ) );
-                }
-            }
-        }
-        
-        // install
-        try
-        {
-            repositorySystem.install( session, request );
-        }
-        catch ( InstallationException e )
-        {
-            throw new ArtifactInstallerException( e.getMessage(), e );
-        }
-    }
-}
diff --git a/maven-3.0.x/src/main/java/org/apache/maven/shared/transfer/artifact/install/internal/MavenArtifactInstaller.java b/maven-3.0.x/src/main/java/org/apache/maven/shared/transfer/artifact/install/internal/MavenArtifactInstaller.java
deleted file mode 100644
index 6d6509d..0000000
--- a/maven-3.0.x/src/main/java/org/apache/maven/shared/transfer/artifact/install/internal/MavenArtifactInstaller.java
+++ /dev/null
@@ -1,36 +0,0 @@
-package org.apache.maven.shared.transfer.artifact.install.internal;
-
-/*
- * 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.
- */
-
-import java.util.Collection;
-
-import org.apache.maven.artifact.Artifact;
-import org.apache.maven.shared.transfer.artifact.install.ArtifactInstallerException;
-
-/**
- * 
- * @author Robert Scholte
- *
- */
-interface MavenArtifactInstaller
-{
-    void install( Collection<Artifact> mavenArtifacts )
-        throws ArtifactInstallerException;
-}
diff --git a/maven-3.0.x/src/main/java/org/apache/maven/shared/transfer/artifact/resolve/ArtifactResolver.java b/maven-3.0.x/src/main/java/org/apache/maven/shared/transfer/artifact/resolve/ArtifactResolver.java
deleted file mode 100644
index 86b8330..0000000
--- a/maven-3.0.x/src/main/java/org/apache/maven/shared/transfer/artifact/resolve/ArtifactResolver.java
+++ /dev/null
@@ -1,54 +0,0 @@
-package org.apache.maven.shared.transfer.artifact.resolve;
-
-/*
- * 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.
- */
-
-import org.apache.maven.artifact.Artifact;
-import org.apache.maven.project.ProjectBuildingRequest;
-import org.apache.maven.shared.transfer.artifact.ArtifactCoordinate;
-
-/**
- * Resolves the artifact, i.e download the file when required and attach it to the artifact
- */
-public interface ArtifactResolver
-{
-
-    /**
-     * @param buildingRequest {@link ProjectBuildingRequest}
-     * @param mavenArtifact {@link Artifact}
-     * @return {@link ArtifactResult}
-     * @throws ArtifactResolverException in case of an error.
-     * @throws IllegalArgumentException in case of parameter <code>buildingRequest</code> is <code>null</code> or
-     *             parameter <code>mavenArtifact</code> is <code>null</code>.
-     */
-    ArtifactResult resolveArtifact( ProjectBuildingRequest buildingRequest, Artifact mavenArtifact )
-        throws ArtifactResolverException, IllegalArgumentException;
-
-    /**
-     * @param buildingRequest {@link ProjectBuildingRequest}
-     * @param coordinate {@link ArtifactCoordinate}
-     * @return {@link ArtifactResult}
-     * @throws ArtifactResolverException in case of an error.
-     * @throws IllegalArgumentException in case of parameter <code>buildingRequest</code> is <code>null</code> or
-     *             parameter <code>coordinate</code> is <code>null</code>.
-     */
-    ArtifactResult resolveArtifact( ProjectBuildingRequest buildingRequest, ArtifactCoordinate coordinate )
-        throws ArtifactResolverException, IllegalArgumentException;
-
-}
diff --git a/maven-3.0.x/src/main/java/org/apache/maven/shared/transfer/artifact/resolve/ArtifactResolverException.java b/maven-3.0.x/src/main/java/org/apache/maven/shared/transfer/artifact/resolve/ArtifactResolverException.java
deleted file mode 100644
index 68eeb14..0000000
--- a/maven-3.0.x/src/main/java/org/apache/maven/shared/transfer/artifact/resolve/ArtifactResolverException.java
+++ /dev/null
@@ -1,40 +0,0 @@
-package org.apache.maven.shared.transfer.artifact.resolve;
-
-/*
- * 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.
- */
-
-/**
- * 
- */
-public class ArtifactResolverException
-    extends Exception
-{
-
-    private static final long serialVersionUID = 7252294837746943917L;
-
-    /**
-     * @param message The message for the exception.
-     * @param e The exception itself.
-     */
-    public ArtifactResolverException( String message, Exception e )
-    {
-        super( message, e );
-    }
-
-}
diff --git a/maven-3.0.x/src/main/java/org/apache/maven/shared/transfer/artifact/resolve/internal/DefaultArtifactResolver.java b/maven-3.0.x/src/main/java/org/apache/maven/shared/transfer/artifact/resolve/internal/DefaultArtifactResolver.java
deleted file mode 100644
index 83d7517..0000000
--- a/maven-3.0.x/src/main/java/org/apache/maven/shared/transfer/artifact/resolve/internal/DefaultArtifactResolver.java
+++ /dev/null
@@ -1,163 +0,0 @@
-package org.apache.maven.shared.transfer.artifact.resolve.internal;
-
-/*
- * 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.
- */
-
-import java.util.List;
-
-import org.apache.maven.RepositoryUtils;
-import org.apache.maven.artifact.Artifact;
-import org.apache.maven.project.ProjectBuildingRequest;
-import org.apache.maven.shared.transfer.artifact.ArtifactCoordinate;
-import org.apache.maven.shared.transfer.artifact.resolve.ArtifactResolver;
-import org.apache.maven.shared.transfer.artifact.resolve.ArtifactResolverException;
-import org.apache.maven.shared.transfer.artifact.resolve.ArtifactResult;
-import org.codehaus.plexus.PlexusConstants;
-import org.codehaus.plexus.PlexusContainer;
-import org.codehaus.plexus.component.annotations.Component;
-import org.codehaus.plexus.component.repository.exception.ComponentLookupException;
-import org.codehaus.plexus.context.Context;
-import org.codehaus.plexus.context.ContextException;
-import org.codehaus.plexus.personality.plexus.lifecycle.phase.Contextualizable;
-
-
-/**
- *
- */
-@Component( role = ArtifactResolver.class, hint = "default" )
-class DefaultArtifactResolver implements ArtifactResolver, Contextualizable
-{
-    private PlexusContainer container;
-
-    @Override
-    public ArtifactResult resolveArtifact( ProjectBuildingRequest buildingRequest, Artifact mavenArtifact )
-            throws ArtifactResolverException, IllegalArgumentException
-    {
-        validateParameters( buildingRequest, mavenArtifact );
-        try
-        {
-            return getMavenArtifactResolver( buildingRequest ).resolveArtifact( mavenArtifact );
-        }
-        catch ( ComponentLookupException e )
-        {
-            throw new ArtifactResolverException( e.getMessage(), e );
-        }
-    }
-
-    @Override
-    public ArtifactResult resolveArtifact( ProjectBuildingRequest buildingRequest, ArtifactCoordinate coordinate )
-            throws ArtifactResolverException, IllegalArgumentException
-    {
-        validateParameters( buildingRequest, coordinate );
-        try
-        {
-            return getMavenArtifactResolver( buildingRequest ).resolveArtifact( coordinate );
-        }
-        catch ( ComponentLookupException e )
-        {
-            throw new ArtifactResolverException( e.getMessage(), e );
-        }
-    }
-
-    private void validateParameters( ProjectBuildingRequest buildingRequest, Artifact mavenArtifact )
-    {
-        if ( buildingRequest == null )
-        {
-            throw new IllegalArgumentException( "The parameter buildingRequest is not allowed to be null." );
-        }
-        if ( mavenArtifact == null )
-        {
-            throw new IllegalArgumentException( "The parameter mavenArtifact is not allowed to be null." );
-        }
-    }
-
-    private void validateParameters( ProjectBuildingRequest buildingRequest, ArtifactCoordinate coordinate )
-    {
-        if ( buildingRequest == null )
-        {
-            throw new IllegalArgumentException( "The parameter buildingRequest is not allowed to be null." );
-        }
-        if ( coordinate == null )
-        {
-            throw new IllegalArgumentException( "The parameter coordinate is not allowed to be null." );
-        }
-    }
-
-    /**
-     * @return true if the current Maven version is Maven 3.1.
-     */
-    private boolean isMaven31()
-    {
-        try
-        {
-            // Maven 3.1 specific
-            Thread.currentThread().getContextClassLoader().loadClass( "org.eclipse.aether.artifact.Artifact" );
-            return true;
-        }
-        catch ( ClassNotFoundException e )
-        {
-            return false;
-        }
-    }
-
-    /**
-     * Injects the Plexus content.
-     *
-     * @param context Plexus context to inject.
-     * @throws ContextException if the PlexusContainer could not be located.
-     */
-    public void contextualize( Context context ) throws ContextException
-    {
-        container = (PlexusContainer) context.get( PlexusConstants.PLEXUS_KEY );
-    }
-
-    private MavenArtifactResolver getMavenArtifactResolver( ProjectBuildingRequest buildingRequest )
-            throws ComponentLookupException, ArtifactResolverException
-    {
-        if ( isMaven31() )
-        {
-            org.eclipse.aether.RepositorySystem repositorySystem = container.lookup(
-                    org.eclipse.aether.RepositorySystem.class );
-
-            List<org.eclipse.aether.repository.RemoteRepository> aetherRepositories = Invoker.invoke(
-                    RepositoryUtils.class, "toRepos", List.class, buildingRequest.getRemoteRepositories() );
-
-            org.eclipse.aether.RepositorySystemSession session = Invoker.invoke( buildingRequest,
-                    "getRepositorySession" );
-
-            return new Maven31ArtifactResolver( repositorySystem, aetherRepositories, session );
-
-        }
-        else
-        {
-            org.sonatype.aether.RepositorySystem repositorySystem = container.lookup(
-                    org.sonatype.aether.RepositorySystem.class );
-
-            List<org.sonatype.aether.repository.RemoteRepository> aetherRepositories = Invoker.invoke(
-                    RepositoryUtils.class, "toRepos", List.class, buildingRequest.getRemoteRepositories() );
-
-            org.sonatype.aether.RepositorySystemSession session = Invoker.invoke( buildingRequest,
-                    "getRepositorySession" );
-
-            return new Maven30ArtifactResolver( repositorySystem, aetherRepositories, session );
-        }
-
-
-    }
-}
diff --git a/maven-3.0.x/src/main/java/org/apache/maven/shared/transfer/artifact/resolve/internal/Invoker.java b/maven-3.0.x/src/main/java/org/apache/maven/shared/transfer/artifact/resolve/internal/Invoker.java
deleted file mode 100644
index 329e2c6..0000000
--- a/maven-3.0.x/src/main/java/org/apache/maven/shared/transfer/artifact/resolve/internal/Invoker.java
+++ /dev/null
@@ -1,67 +0,0 @@
-package org.apache.maven.shared.transfer.artifact.resolve.internal;
-
-/*
- * 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.
- */
-
-import java.lang.reflect.InvocationTargetException;
-
-import org.apache.maven.shared.transfer.artifact.resolve.ArtifactResolverException;
-
-/**
- * Invokes method on objects using reflection.
- */
-final class Invoker
-{
-
-    private Invoker()
-    {
-        // do not instantiate
-    }
-
-    public static <T> T invoke( Object object, String method )
-        throws ArtifactResolverException
-    {
-        try
-        {
-            @SuppressWarnings( "unchecked" )
-            T invoke = (T) object.getClass().getMethod( method ).invoke( object );
-            return invoke;
-        }
-        catch ( IllegalAccessException | InvocationTargetException | NoSuchMethodException e )
-        {
-            throw new ArtifactResolverException( e.getMessage(), e );
-        }
-    }
-
-    public static <T> T invoke( Class<?> objectClazz, String staticMethod, Class<?> argClazz, Object arg )
-        throws ArtifactResolverException
-    {
-        try
-        {
-            @SuppressWarnings( "unchecked" )
-            T invoke = (T) objectClazz.getMethod( staticMethod, argClazz ).invoke( null, arg );
-            return invoke;
-        }
-        catch ( IllegalAccessException | InvocationTargetException | NoSuchMethodException e )
-        {
-            throw new ArtifactResolverException( e.getMessage(), e );
-        }
-    }
-
-}
diff --git a/maven-3.0.x/src/main/java/org/apache/maven/shared/transfer/artifact/resolve/internal/Maven30ArtifactResolver.java b/maven-3.0.x/src/main/java/org/apache/maven/shared/transfer/artifact/resolve/internal/Maven30ArtifactResolver.java
index 95a6dc5..4a6db6e 100644
--- a/maven-3.0.x/src/main/java/org/apache/maven/shared/transfer/artifact/resolve/internal/Maven30ArtifactResolver.java
+++ b/maven-3.0.x/src/main/java/org/apache/maven/shared/transfer/artifact/resolve/internal/Maven30ArtifactResolver.java
@@ -19,13 +19,13 @@ package org.apache.maven.shared.transfer.artifact.resolve.internal;
  * under the License.
  */
 
-import java.util.List;
-
 import org.apache.maven.RepositoryUtils;
+import org.apache.maven.project.ProjectBuildingRequest;
 import org.apache.maven.shared.transfer.artifact.ArtifactCoordinate;
 import org.apache.maven.shared.transfer.artifact.resolve.ArtifactResolverException;
+import org.apache.maven.shared.transfer.support.DelegateSupport;
+import org.apache.maven.shared.transfer.support.Selector;
 import org.sonatype.aether.RepositorySystem;
-import org.sonatype.aether.RepositorySystemSession;
 import org.sonatype.aether.artifact.Artifact;
 import org.sonatype.aether.repository.RemoteRepository;
 import org.sonatype.aether.resolution.ArtifactDescriptorException;
@@ -35,68 +35,69 @@ import org.sonatype.aether.resolution.ArtifactRequest;
 import org.sonatype.aether.resolution.ArtifactResolutionException;
 import org.sonatype.aether.util.artifact.DefaultArtifact;
 
+import javax.inject.Inject;
+import javax.inject.Named;
+import javax.inject.Singleton;
+import java.util.List;
+import java.util.Objects;
+
 /**
- * 
+ *
  */
-class Maven30ArtifactResolver
-    implements MavenArtifactResolver
+@Singleton
+@Named( Selector.MAVEN_3_0_X )
+public class Maven30ArtifactResolver extends DelegateSupport implements ArtifactResolverDelegate
 {
     private final RepositorySystem repositorySystem;
 
     private final List<RemoteRepository> aetherRepositories;
-    
-    private final RepositorySystemSession session;
 
-    Maven30ArtifactResolver( RepositorySystem repositorySystem, List<RemoteRepository> aetherRepositories,
-                                    RepositorySystemSession session )
+    @Inject
+    public Maven30ArtifactResolver( RepositorySystem repositorySystem, List<RemoteRepository> aetherRepositories )
     {
-        this.repositorySystem = repositorySystem;
-        this.aetherRepositories = aetherRepositories;
-        this.session = session;
+        this.repositorySystem = Objects.requireNonNull( repositorySystem );
+        this.aetherRepositories = Objects.requireNonNull( aetherRepositories );
     }
 
     @Override
-    // CHECKSTYLE_OFF: LineLength
-    public org.apache.maven.shared.transfer.artifact.resolve.ArtifactResult resolveArtifact( org.apache.maven.artifact.Artifact mavenArtifact )
-                                                                                        throws ArtifactResolverException
-    // CHECKSTYLE_ON: LineLength
+    public org.apache.maven.shared.transfer.artifact.resolve.ArtifactResult resolveArtifact(
+            ProjectBuildingRequest buildingRequest,
+            org.apache.maven.artifact.Artifact mavenArtifact ) throws ArtifactResolverException
     {
-        Artifact aetherArtifact = Invoker.invoke( RepositoryUtils.class, "toArtifact",
-                                                             org.apache.maven.artifact.Artifact.class, mavenArtifact );
+        Artifact aetherArtifact = RepositoryUtils.toArtifact( mavenArtifact );
 
-        return resolveArtifact( aetherArtifact );
+        return resolveArtifact( buildingRequest, aetherArtifact );
     }
 
     @Override
-    // CHECKSTYLE_OFF: LineLength
-    public org.apache.maven.shared.transfer.artifact.resolve.ArtifactResult resolveArtifact( ArtifactCoordinate coordinate )
-                                                                                        throws ArtifactResolverException
-    // CHECKSTYLE_ON: LineLength
+    public org.apache.maven.shared.transfer.artifact.resolve.ArtifactResult resolveArtifact(
+            ProjectBuildingRequest buildingRequest,
+            ArtifactCoordinate coordinate ) throws ArtifactResolverException
     {
-        Artifact aetherArtifact =
-            new DefaultArtifact( coordinate.getGroupId(), coordinate.getArtifactId(), coordinate.getClassifier(),
-                                 coordinate.getExtension(), coordinate.getVersion() );
+        Artifact aetherArtifact = new DefaultArtifact( coordinate.getGroupId(), coordinate.getArtifactId(),
+                coordinate.getClassifier(), coordinate.getExtension(), coordinate.getVersion() );
 
-        return resolveArtifact( aetherArtifact );
+        return resolveArtifact( buildingRequest, aetherArtifact );
     }
 
-    // CHECKSTYLE_OFF: LineLength
-    private org.apache.maven.shared.transfer.artifact.resolve.ArtifactResult resolveArtifact( Artifact aetherArtifact )
-                                                                                         throws ArtifactResolverException
-    // CHECKSTYLE_ON: LineLength
+    private org.apache.maven.shared.transfer.artifact.resolve.ArtifactResult resolveArtifact(
+            ProjectBuildingRequest buildingRequest,
+            Artifact aetherArtifact ) throws ArtifactResolverException
     {
         try
         {
             // use descriptor to respect relocation
-            ArtifactDescriptorRequest descriptorRequest =
-                new ArtifactDescriptorRequest( aetherArtifact, aetherRepositories, null );
+            ArtifactDescriptorRequest descriptorRequest = new ArtifactDescriptorRequest( aetherArtifact,
+                    aetherRepositories, null );
 
-            ArtifactDescriptorResult descriptorResult =
-                repositorySystem.readArtifactDescriptor( session, descriptorRequest );
+            ArtifactDescriptorResult descriptorResult = repositorySystem.readArtifactDescriptor(
+                    buildingRequest.getRepositorySession(),
+                    descriptorRequest );
 
             ArtifactRequest request = new ArtifactRequest( descriptorResult.getArtifact(), aetherRepositories, null );
 
-            return new Maven30ArtifactResult( repositorySystem.resolveArtifact( session, request ) );
+            return new Maven30ArtifactResult( repositorySystem.resolveArtifact(
+                    buildingRequest.getRepositorySession(), request ) );
         }
         catch ( ArtifactDescriptorException | ArtifactResolutionException e )
         {
diff --git a/maven-3.0.x/src/main/java/org/apache/maven/shared/transfer/artifact/resolve/internal/Maven30ArtifactResult.java b/maven-3.0.x/src/main/java/org/apache/maven/shared/transfer/artifact/resolve/internal/Maven30ArtifactResult.java
index e65c00b..240e06e 100644
--- a/maven-3.0.x/src/main/java/org/apache/maven/shared/transfer/artifact/resolve/internal/Maven30ArtifactResult.java
+++ b/maven-3.0.x/src/main/java/org/apache/maven/shared/transfer/artifact/resolve/internal/Maven30ArtifactResult.java
@@ -20,8 +20,6 @@ package org.apache.maven.shared.transfer.artifact.resolve.internal;
  */
 
 import org.apache.maven.RepositoryUtils;
-import org.apache.maven.shared.transfer.artifact.resolve.ArtifactResolverException;
-import org.sonatype.aether.artifact.Artifact;
 import org.sonatype.aether.resolution.ArtifactResult;
 
 /**
@@ -45,13 +43,6 @@ class Maven30ArtifactResult implements org.apache.maven.shared.transfer.artifact
     @Override
     public org.apache.maven.artifact.Artifact getArtifact()
     {
-        try
-        {
-            return Invoker.invoke( RepositoryUtils.class, "toArtifact", Artifact.class, artifactResult.getArtifact() );
-        }
-        catch ( ArtifactResolverException e )
-        {
-            throw new RuntimeException( e );
-        }
+        return RepositoryUtils.toArtifact( artifactResult.getArtifact() );
     }
 }
diff --git a/maven-3.0.x/src/main/java/org/apache/maven/shared/transfer/artifact/resolve/internal/Maven31ArtifactResolver.java b/maven-3.0.x/src/main/java/org/apache/maven/shared/transfer/artifact/resolve/internal/Maven31ArtifactResolver.java
deleted file mode 100644
index 9ef5658..0000000
--- a/maven-3.0.x/src/main/java/org/apache/maven/shared/transfer/artifact/resolve/internal/Maven31ArtifactResolver.java
+++ /dev/null
@@ -1,105 +0,0 @@
-package org.apache.maven.shared.transfer.artifact.resolve.internal;
-
-/*
- * 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.
- */
-
-import java.util.List;
-
-import org.apache.maven.RepositoryUtils;
-import org.apache.maven.shared.transfer.artifact.ArtifactCoordinate;
-import org.apache.maven.shared.transfer.artifact.resolve.ArtifactResolverException;
-import org.eclipse.aether.RepositorySystem;
-import org.eclipse.aether.RepositorySystemSession;
-import org.eclipse.aether.artifact.Artifact;
-import org.eclipse.aether.artifact.DefaultArtifact;
-import org.eclipse.aether.repository.RemoteRepository;
-import org.eclipse.aether.resolution.ArtifactDescriptorException;
-import org.eclipse.aether.resolution.ArtifactDescriptorRequest;
-import org.eclipse.aether.resolution.ArtifactDescriptorResult;
-import org.eclipse.aether.resolution.ArtifactRequest;
-import org.eclipse.aether.resolution.ArtifactResolutionException;
-
-/**
- * 
- */
-class Maven31ArtifactResolver
-    implements MavenArtifactResolver
-{
-    private final RepositorySystem repositorySystem;
-    
-    private final List<RemoteRepository> aetherRepositories;
-    
-    private final RepositorySystemSession session;
-
-    Maven31ArtifactResolver( RepositorySystem repositorySystem, List<RemoteRepository> aetherRepositories,
-                                    RepositorySystemSession session )
-    {
-        this.repositorySystem = repositorySystem;
-        this.aetherRepositories = aetherRepositories;
-        this.session = session;
-    }
-
-    @Override
-    public org.apache.maven.shared.transfer.artifact.resolve.ArtifactResult resolveArtifact(
-            org.apache.maven.artifact.Artifact mavenArtifact ) throws ArtifactResolverException
-    {
-        Artifact aetherArtifact = Invoker.invoke( RepositoryUtils.class, "toArtifact",
-                org.apache.maven.artifact.Artifact.class, mavenArtifact );
-
-        return resolveArtifact( aetherArtifact );
-    }
-
-    @Override
-    // CHECKSTYLE_OFF: LineLength
-    public org.apache.maven.shared.transfer.artifact.resolve.ArtifactResult resolveArtifact( ArtifactCoordinate coordinate )
-                                                                                        throws ArtifactResolverException
-    // CHECKSTYLE_ON: LineLength
-    {
-        Artifact aetherArtifact =
-            new DefaultArtifact( coordinate.getGroupId(), coordinate.getArtifactId(), coordinate.getClassifier(),
-                                 coordinate.getExtension(), coordinate.getVersion() );
-
-        return resolveArtifact( aetherArtifact );
-    }
-
-    // CHECKSTYLE_OFF: LineLength
-    private org.apache.maven.shared.transfer.artifact.resolve.ArtifactResult resolveArtifact( Artifact aetherArtifact )
-                                                                                         throws ArtifactResolverException
-    // CHECKSTYLE_ON: LineLength
-    {
-        try
-        {
-            // use descriptor to respect relocation
-            ArtifactDescriptorRequest descriptorRequest =
-                new ArtifactDescriptorRequest( aetherArtifact, aetherRepositories, null );
-
-            ArtifactDescriptorResult descriptorResult =
-                repositorySystem.readArtifactDescriptor( session, descriptorRequest );
-
-            ArtifactRequest request = new ArtifactRequest( descriptorResult.getArtifact(), aetherRepositories, null );
-
-            return new Maven31ArtifactResult( repositorySystem.resolveArtifact( session, request ) );
-        }
-        catch ( ArtifactDescriptorException | ArtifactResolutionException e )
-        {
-            throw new ArtifactResolverException( e.getMessage(), e );
-        }
-    }
-
-}
diff --git a/maven-3.0.x/src/main/java/org/apache/maven/shared/transfer/artifact/resolve/internal/Maven31ArtifactResult.java b/maven-3.0.x/src/main/java/org/apache/maven/shared/transfer/artifact/resolve/internal/Maven31ArtifactResult.java
deleted file mode 100644
index 56fbc0b..0000000
--- a/maven-3.0.x/src/main/java/org/apache/maven/shared/transfer/artifact/resolve/internal/Maven31ArtifactResult.java
+++ /dev/null
@@ -1,59 +0,0 @@
-package org.apache.maven.shared.transfer.artifact.resolve.internal;
-
-/*
- * 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.
- */
-
-import org.apache.maven.RepositoryUtils;
-import org.apache.maven.shared.transfer.artifact.resolve.ArtifactResolverException;
-import org.eclipse.aether.resolution.ArtifactResult;
-import org.eclipse.aether.artifact.Artifact;
-
-/**
- * {@link org.apache.maven.shared.transfer.artifact.resolve.ArtifactResult} wrapper for {@link ArtifactResult}
- * 
- * @author Robert Scholte
- * @since 3.0
- */
-class Maven31ArtifactResult
-    implements org.apache.maven.shared.transfer.artifact.resolve.ArtifactResult
-{
-    private final ArtifactResult artifactResult;
-
-    /**
-     * @param artifactResult {@link ArtifactResult}
-     */
-    Maven31ArtifactResult( ArtifactResult artifactResult )
-    {
-        this.artifactResult = artifactResult;
-    }
-
-    @Override
-    public org.apache.maven.artifact.Artifact getArtifact()
-    {
-        try
-        {
-            return Invoker.invoke( RepositoryUtils.class, "toArtifact",
-                                                                        Artifact.class, artifactResult.getArtifact() );
-        }
-        catch ( ArtifactResolverException e )
-        {
-            throw new RuntimeException( e );
-        }
-    }
-}
diff --git a/maven-3.0.x/src/main/java/org/apache/maven/shared/transfer/artifact/resolve/internal/MavenArtifactResolver.java b/maven-3.0.x/src/main/java/org/apache/maven/shared/transfer/artifact/resolve/internal/MavenArtifactResolver.java
deleted file mode 100644
index 2413968..0000000
--- a/maven-3.0.x/src/main/java/org/apache/maven/shared/transfer/artifact/resolve/internal/MavenArtifactResolver.java
+++ /dev/null
@@ -1,38 +0,0 @@
-package org.apache.maven.shared.transfer.artifact.resolve.internal;
-
-/*
- * 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.
- */
-
-import org.apache.maven.artifact.Artifact;
-import org.apache.maven.shared.transfer.artifact.ArtifactCoordinate;
-import org.apache.maven.shared.transfer.artifact.resolve.ArtifactResolverException;
-import org.apache.maven.shared.transfer.artifact.resolve.ArtifactResult;
-
-/**
- * 
- * @author Robert Scholte
- *
- */
-interface MavenArtifactResolver
-{
-    ArtifactResult resolveArtifact( Artifact mavenArtifact ) throws ArtifactResolverException;
-
-    ArtifactResult resolveArtifact( ArtifactCoordinate coordinate ) throws ArtifactResolverException;
-
-}
diff --git a/maven-3.0.x/src/main/java/org/apache/maven/shared/transfer/collection/CollectRequest.java b/maven-3.0.x/src/main/java/org/apache/maven/shared/transfer/collection/CollectRequest.java
deleted file mode 100644
index 8049c3a..0000000
--- a/maven-3.0.x/src/main/java/org/apache/maven/shared/transfer/collection/CollectRequest.java
+++ /dev/null
@@ -1,307 +0,0 @@
-package org.apache.maven.shared.transfer.collection;
-
-/*
- * 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.
- */
-
-import java.util.ArrayList;
-import java.util.Collections;
-import java.util.List;
-
-import org.apache.maven.artifact.repository.ArtifactRepository;
-import org.apache.maven.model.Dependency;
-import org.apache.maven.artifact.Artifact;
-
-/**
- * A request to collect the transitive dependencies and to build a dependency graph from them. There are three ways to
- * create a dependency graph. First, only the root dependency can be given. Second, a root dependency and direct
- * dependencies can be specified in which case the specified direct dependencies are merged with the direct dependencies
- * retrieved from the artifact descriptor of the root dependency. And last, only direct dependencies can be specified in
- * which case the root node of the resulting graph has no associated dependency.
- *
- * @see DependencyCollector#collectDependencies(org.apache.maven.project.ProjectBuildingRequest, org.apache.maven.model.Dependency)
- * @see DependencyCollector#collectDependencies(org.apache.maven.project.ProjectBuildingRequest, org.apache.maven.shared.transfer.dependencies.DependableCoordinate)
- * @see DependencyCollector#collectDependencies(org.apache.maven.project.ProjectBuildingRequest, org.apache.maven.model.Model)
- */
-public final class CollectRequest
-{
-
-    private Artifact rootArtifact;
-
-    private Dependency root;
-
-    private List<Dependency> dependencies = Collections.emptyList();
-
-    private List<Dependency> managedDependencies = Collections.emptyList();
-
-    private List<ArtifactRepository> repositories = Collections.emptyList();
-
-    /**
-     * Creates an uninitialized request.
-     */
-    public CollectRequest()
-    {
-        // enables default constructor
-    }
-
-    /**
-     * Creates a request with the specified properties.
-     * 
-     * @param root The root dependency whose transitive dependencies should be collected, may be {@code null}.
-     * @param repositories The repositories to use for the collection, may be {@code null}.
-     */
-    public CollectRequest( Dependency root, List<ArtifactRepository> repositories )
-    {
-        setRoot( root );
-        setRepositories( repositories );
-    }
-
-    /**
-     * Creates a new request with the specified properties.
-     * 
-     * @param root The root dependency whose transitive dependencies should be collected, may be {@code null}.
-     * @param dependencies The direct dependencies to merge with the direct dependencies from the root dependency's
-     *            artifact descriptor.
-     * @param repositories The repositories to use for the collection, may be {@code null}.
-     */
-    public CollectRequest( Dependency root, List<Dependency> dependencies, List<ArtifactRepository> repositories )
-    {
-        setRoot( root );
-        setDependencies( dependencies );
-        setRepositories( repositories );
-    }
-
-    /**
-     * Creates a new request with the specified properties.
-     * 
-     * @param dependencies The direct dependencies of some imaginary root, may be {@code null}.
-     * @param managedDependencies The dependency management information to apply to the transitive dependencies, may be
-     *            {@code null}.
-     * @param repositories The repositories to use for the collection, may be {@code null}.
-     */
-    public CollectRequest( List<Dependency> dependencies, List<Dependency> managedDependencies,
-                          List<ArtifactRepository> repositories )
-    {
-        setDependencies( dependencies );
-        setManagedDependencies( managedDependencies );
-        setRepositories( repositories );
-    }
-
-    /**
-     * Gets the root artifact for the dependency graph.
-     * 
-     * @return The root artifact for the dependency graph or {@code null} if none.
-     */
-    public Artifact getRootArtifact()
-    {
-        return rootArtifact;
-    }
-
-    /**
-     * Sets the root artifact for the dependency graph. This must not be confused with {@link #setRoot(Dependency)}: The
-     * root <em>dependency</em>, like any other specified dependency, will be subject to dependency
-     * collection/resolution, i.e. should have an artifact descriptor and a corresponding artifact file. The root
-     * <em>artifact</em> on the other hand is only used as a label for the root node of the graph in case no root
-     * dependency was specified. As such, the configured root artifact is ignored if {@link #getRoot()} does not return
-     * {@code null}.
-     * 
-     * @param rootArtifact The root artifact for the dependency graph, may be {@code null}.
-     * @return This request for chaining, never {@code null}.
-     */
-    public CollectRequest setRootArtifact(  Artifact rootArtifact )
-    {
-        this.rootArtifact = rootArtifact;
-        return this;
-    }
-
-    /**
-     * Gets the root dependency of the graph.
-     * 
-     * @return The root dependency of the graph or {@code null} if none.
-     */
-    public Dependency getRoot()
-    {
-        return root;
-    }
-
-    /**
-     * Sets the root dependency of the graph.
-     * 
-     * @param root The root dependency of the graph, may be {@code null}.
-     * @return This request for chaining, never {@code null}.
-     */
-    public CollectRequest setRoot( Dependency root )
-    {
-        this.root = root;
-        return this;
-    }
-
-    /**
-     * Gets the direct dependencies.
-     * 
-     * @return The direct dependencies, never {@code null}.
-     */
-    public List<Dependency> getDependencies()
-    {
-        return dependencies;
-    }
-
-    /**
-     * Sets the direct dependencies. If both a root dependency and direct dependencies are given in the request, the
-     * direct dependencies from the request will be merged with the direct dependencies from the root dependency's
-     * artifact descriptor, giving higher priority to the dependencies from the request.
-     * 
-     * @param dependencies The direct dependencies, may be {@code null}.
-     * @return This request for chaining, never {@code null}.
-     */
-    public CollectRequest setDependencies( List<Dependency> dependencies )
-    {
-        if ( dependencies == null )
-        {
-            this.dependencies = Collections.emptyList();
-        }
-        else
-        {
-            this.dependencies = dependencies;
-        }
-        return this;
-    }
-
-    /**
-     * Adds the specified direct dependency.
-     * 
-     * @param dependency The dependency to add, may be {@code null}.
-     * @return This request for chaining, never {@code null}.
-     */
-    public CollectRequest addDependency( Dependency dependency )
-    {
-        if ( dependency != null )
-        {
-            if ( this.dependencies.isEmpty() )
-            {
-                this.dependencies = new ArrayList<>();
-            }
-            this.dependencies.add( dependency );
-        }
-        return this;
-    }
-
-    /**
-     * Gets the dependency management to apply to transitive dependencies.
-     * 
-     * @return The dependency management to apply to transitive dependencies, never {@code null}.
-     */
-    public List<Dependency> getManagedDependencies()
-    {
-        return managedDependencies;
-    }
-
-    /**
-     * Sets the dependency management to apply to transitive dependencies. To clarify, this management does not apply to
-     * the direct dependencies of the root node.
-     * 
-     * @param managedDependencies The dependency management, may be {@code null}.
-     * @return This request for chaining, never {@code null}.
-     */
-    public CollectRequest setManagedDependencies( List<Dependency> managedDependencies )
-    {
-        if ( managedDependencies == null )
-        {
-            this.managedDependencies = Collections.emptyList();
-        }
-        else
-        {
-            this.managedDependencies = managedDependencies;
-        }
-        return this;
-    }
-
-    /**
-     * Adds the specified managed dependency.
-     * 
-     * @param managedDependency The managed dependency to add, may be {@code null}.
-     * @return This request for chaining, never {@code null}.
-     */
-    public CollectRequest addManagedDependency( Dependency managedDependency )
-    {
-        if ( managedDependency != null )
-        {
-            if ( this.managedDependencies.isEmpty() )
-            {
-                this.managedDependencies = new ArrayList<>();
-            }
-            this.managedDependencies.add( managedDependency );
-        }
-        return this;
-    }
-
-    /**
-     * Gets the repositories to use for the collection.
-     * 
-     * @return The repositories to use for the collection, never {@code null}.
-     */
-    public List<ArtifactRepository> getRepositories()
-    {
-        return repositories;
-    }
-
-    /**
-     * Sets the repositories to use for the collection.
-     * 
-     * @param repositories The repositories to use for the collection, may be {@code null}.
-     * @return This request for chaining, never {@code null}.
-     */
-    public CollectRequest setRepositories( List<ArtifactRepository> repositories )
-    {
-        if ( repositories == null )
-        {
-            this.repositories = Collections.emptyList();
-        }
-        else
-        {
-            this.repositories = repositories;
-        }
-        return this;
-    }
-
-    /**
-     * Adds the specified repository for collection.
-     * 
-     * @param repository The repository to collect dependency information from, may be {@code null}.
-     * @return This request for chaining, never {@code null}.
-     */
-    public CollectRequest addRepository( ArtifactRepository repository )
-    {
-        if ( repository != null )
-        {
-            if ( this.repositories.isEmpty() )
-            {
-                this.repositories = new ArrayList<>();
-            }
-            this.repositories.add( repository );
-        }
-        return this;
-    }
-
-    @Override
-    public String toString()
-    {
-        return getRoot() + " -> " + getDependencies() + " < " + getRepositories();
-    }
-
-}
diff --git a/maven-3.0.x/src/main/java/org/apache/maven/shared/transfer/collection/CollectResult.java b/maven-3.0.x/src/main/java/org/apache/maven/shared/transfer/collection/CollectResult.java
deleted file mode 100644
index 7f30b7d..0000000
--- a/maven-3.0.x/src/main/java/org/apache/maven/shared/transfer/collection/CollectResult.java
+++ /dev/null
@@ -1,49 +0,0 @@
-package org.apache.maven.shared.transfer.collection;
-
-/*
- * 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.
- */
-
-import java.util.List;
-
-import org.apache.maven.shared.transfer.graph.DependencyNode;
-
-/**
- * The result of a dependency collection request.
- *
- * @see DependencyCollector#collectDependencies(org.apache.maven.project.ProjectBuildingRequest, org.apache.maven.model.Dependency)
- * @see DependencyCollector#collectDependencies(org.apache.maven.project.ProjectBuildingRequest, org.apache.maven.shared.transfer.dependencies.DependableCoordinate)
- * @see DependencyCollector#collectDependencies(org.apache.maven.project.ProjectBuildingRequest, org.apache.maven.model.Model)
- */
-public interface CollectResult
-{
-  /**
-   * Gets the exceptions that occurred while building the dependency graph.
-   *
-   * @return The exceptions that occurred, never {@code null}.
-   */
-  List<Exception> getExceptions();
-
-  /**
-   * Gets the root node of the dependency graph.
-   *
-   * @return The root node of the dependency graph or {@code null} if none.
-   */
-  DependencyNode getRoot();
-
-}
diff --git a/maven-3.0.x/src/main/java/org/apache/maven/shared/transfer/collection/DependencyCollectionException.java b/maven-3.0.x/src/main/java/org/apache/maven/shared/transfer/collection/DependencyCollectionException.java
deleted file mode 100644
index eafcfcf..0000000
--- a/maven-3.0.x/src/main/java/org/apache/maven/shared/transfer/collection/DependencyCollectionException.java
+++ /dev/null
@@ -1,42 +0,0 @@
-package org.apache.maven.shared.transfer.collection;
-
-/*
- * 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.
- */
-
-/**
- * Thrown in case of bad artifact descriptors, version ranges or other issues encountered during calculation of the
- * dependency graph.
- */
-public class DependencyCollectionException
-    extends Exception
-{
-    /**
-     *
-     */
-    private static final long serialVersionUID = -3134726259840210686L;
-
-    /**
-     * @param message The message you would give for the exception.
-     * @param cause The cause which is related to the message.
-     */
-    public DependencyCollectionException( String message, Throwable cause )
-    {
-        super( message, cause );
-    }
-}
diff --git a/maven-3.0.x/src/main/java/org/apache/maven/shared/transfer/collection/DependencyCollector.java b/maven-3.0.x/src/main/java/org/apache/maven/shared/transfer/collection/DependencyCollector.java
deleted file mode 100644
index 28f2ff0..0000000
--- a/maven-3.0.x/src/main/java/org/apache/maven/shared/transfer/collection/DependencyCollector.java
+++ /dev/null
@@ -1,78 +0,0 @@
-package org.apache.maven.shared.transfer.collection;
-
-/*
- * 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.
- */
-
-import org.apache.maven.model.Dependency;
-import org.apache.maven.model.Model;
-import org.apache.maven.project.ProjectBuildingRequest;
-import org.apache.maven.shared.transfer.dependencies.DependableCoordinate;
-
-/**
- * Will only download the pom files when not available, never the artifact. 
- * 
- * @author Robert Scholte
- *
- */
-public interface DependencyCollector
-{
-
-    /**
-     * Collects the transitive dependencies of some artifacts and builds a dependency graph. Note that this operation is
-     * only concerned about determining the coordinates of the transitive dependencies and does not actually resolve the
-     * artifact files. The supplied session carries various hooks to customize the dependency graph that must be invoked
-     * throughout the operation.
-     *
-     * @param buildingRequest The Maven project buildingrequest, must not be {@code null}.
-     * @param root The Maven Dependency, must not be {@code null}.
-     * @return The collection result, never {@code null}.
-     * @throws DependencyCollectionException If the dependency tree could not be built.
-     */
-    CollectResult collectDependencies( ProjectBuildingRequest buildingRequest, Dependency root )
-        throws DependencyCollectionException;
-
-    /**
-     * Collects the transitive dependencies of some artifacts and builds a dependency graph. Note that this operation is
-     * only concerned about determining the coordinates of the transitive dependencies and does not actually resolve the
-     * artifact files. The supplied session carries various hooks to customize the dependency graph that must be invoked
-     * throughout the operation.
-     *
-     * @param buildingRequest The Maven project buildingrequest, must not be {@code null}.
-     * @param root The Maven DependableCoordinate, must not be {@code null}.
-     * @return The collection result, never {@code null}.
-     * @throws DependencyCollectionException If the dependency tree could not be built.
-     */
-    CollectResult collectDependencies( ProjectBuildingRequest buildingRequest, DependableCoordinate root )
-        throws DependencyCollectionException;
-
-    /**
-     * Collects the transitive dependencies of some artifacts and builds a dependency graph. Note that this operation is
-     * only concerned about determining the coordinates of the transitive dependencies and does not actually resolve the
-     * artifact files. The supplied session carries various hooks to customize the dependency graph that must be invoked
-     * throughout the operation.
-     *
-     * @param buildingRequest The Maven project buildingrequest, must not be {@code null}.
-     * @param root The Maven model, must not be {@code null}.
-     * @return The collection result, never {@code null}.
-     * @throws DependencyCollectionException If the dependency tree could not be built.
-     */
-    CollectResult collectDependencies( ProjectBuildingRequest buildingRequest, Model root )
-        throws DependencyCollectionException;
-
-}
diff --git a/maven-3.0.x/src/main/java/org/apache/maven/shared/transfer/collection/internal/DefaultDependencyCollector.java b/maven-3.0.x/src/main/java/org/apache/maven/shared/transfer/collection/internal/DefaultDependencyCollector.java
deleted file mode 100644
index e6ce50e..0000000
--- a/maven-3.0.x/src/main/java/org/apache/maven/shared/transfer/collection/internal/DefaultDependencyCollector.java
+++ /dev/null
@@ -1,195 +0,0 @@
-package org.apache.maven.shared.transfer.collection.internal;
-
-/*
- * 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.
- */
-
-import java.util.List;
-import java.util.Objects;
-
-import org.apache.maven.RepositoryUtils;
-import org.apache.maven.artifact.handler.manager.ArtifactHandlerManager;
-import org.apache.maven.model.Dependency;
-import org.apache.maven.model.Model;
-import org.apache.maven.project.ProjectBuildingRequest;
-import org.apache.maven.shared.transfer.collection.CollectResult;
-import org.apache.maven.shared.transfer.collection.DependencyCollectionException;
-import org.apache.maven.shared.transfer.collection.DependencyCollector;
-import org.apache.maven.shared.transfer.dependencies.DependableCoordinate;
-import org.codehaus.plexus.PlexusConstants;
-import org.codehaus.plexus.PlexusContainer;
-import org.codehaus.plexus.component.annotations.Component;
-import org.codehaus.plexus.component.repository.exception.ComponentLookupException;
-import org.codehaus.plexus.context.Context;
-import org.codehaus.plexus.context.ContextException;
-import org.codehaus.plexus.personality.plexus.lifecycle.phase.Contextualizable;
-
-/**
- * This DependencyCollector passes the request to the proper Maven 3.x implementation
- *
- * @author Robert Scholte
- */
-@Component( role = DependencyCollector.class, hint = "default" )
-class DefaultDependencyCollector implements DependencyCollector, Contextualizable
-{
-    private PlexusContainer container;
-
-    @Override
-    public CollectResult collectDependencies( ProjectBuildingRequest buildingRequest, Dependency root )
-            throws DependencyCollectionException
-    {
-        validateParameters( buildingRequest, root );
-
-        try
-        {
-            return getMavenDependencyCollector( buildingRequest ).collectDependencies( root );
-        }
-        catch ( ComponentLookupException e )
-        {
-            throw new DependencyCollectionException( e.getMessage(), e );
-        }
-    }
-
-    @Override
-    public CollectResult collectDependencies( ProjectBuildingRequest buildingRequest, DependableCoordinate root )
-            throws DependencyCollectionException
-    {
-        validateParameters( buildingRequest, root );
-
-        try
-        {
-            return getMavenDependencyCollector( buildingRequest ).collectDependencies( root );
-        }
-        catch ( ComponentLookupException e )
-        {
-            throw new DependencyCollectionException( e.getMessage(), e );
-        }
-    }
-
-    @Override
-    public CollectResult collectDependencies( ProjectBuildingRequest buildingRequest, Model root )
-            throws DependencyCollectionException
-    {
-        validateParameters( buildingRequest, root );
-
-        try
-        {
-            return getMavenDependencyCollector( buildingRequest ).collectDependencies( root );
-        }
-        catch ( ComponentLookupException e )
-        {
-            throw new DependencyCollectionException( e.getMessage(), e );
-        }
-    }
-
-  private void validateParameters( ProjectBuildingRequest buildingRequest, DependableCoordinate root )
-  {
-    validateBuildingRequestAndRoot( buildingRequest, root );
-  }
-
-  private void validateParameters( ProjectBuildingRequest buildingRequest, Dependency root )
-  {
-    validateBuildingRequestAndRoot( buildingRequest, root );
-  }
-
-  private void validateParameters( ProjectBuildingRequest buildingRequest, Model root )
-  {
-    validateBuildingRequestAndRoot( buildingRequest, root );
-  }
-
-  private void validateBuildingRequestAndRoot( ProjectBuildingRequest buildingRequest, Object root )
-  {
-    validateBuildingRequest( buildingRequest );
-    validateRoot( root );
-  }
-
-  private void validateBuildingRequest( ProjectBuildingRequest buildingRequest )
-  {
-    Objects.requireNonNull( buildingRequest, "The parameter buildingRequest is not allowed to be null." );
-  }
-
-  private void validateRoot( Object root )
-  {
-    Objects.requireNonNull( root, "The parameter root is not allowed to be null." );
-  }
-
-  /**
-   * @return true if the current Maven version is Maven 3.1.
-   */
-  private boolean isMaven31()
-  {
-      try
-      {
-          // Maven 3.1 specific
-          Thread.currentThread().getContextClassLoader().loadClass( "org.eclipse.aether.artifact.Artifact" );
-          return true;
-      }
-      catch ( ClassNotFoundException e )
-      {
-          return false;
-      }
-  }
-
-    /**
-     * Injects the Plexus content.
-     *
-     * @param context Plexus context to inject.
-     * @throws ContextException if the PlexusContainer could not be located.
-     */
-    public void contextualize( Context context ) throws ContextException
-    {
-        container = (PlexusContainer) context.get( PlexusConstants.PLEXUS_KEY );
-    }
-
-    private MavenDependencyCollector getMavenDependencyCollector( ProjectBuildingRequest buildingRequest )
-            throws ComponentLookupException, DependencyCollectionException
-    {
-        ArtifactHandlerManager artifactHandlerManager = container.lookup( ArtifactHandlerManager.class );
-
-        if ( isMaven31() )
-        {
-            org.eclipse.aether.RepositorySystem m31RepositorySystem = container.lookup(
-                    org.eclipse.aether.RepositorySystem.class );
-
-            org.eclipse.aether.RepositorySystemSession session = Invoker.invoke( buildingRequest,
-                    "getRepositorySession" );
-
-            List<org.eclipse.aether.repository.RemoteRepository> aetherRepositories = Invoker.invoke(
-                    RepositoryUtils.class, "toRepos", List.class, buildingRequest.getRemoteRepositories() );
-
-            return new Maven31DependencyCollector( m31RepositorySystem, artifactHandlerManager, session,
-                    aetherRepositories );
-        }
-        else
-        {
-            org.sonatype.aether.RepositorySystem m30RepositorySystem = container.lookup(
-                    org.sonatype.aether.RepositorySystem.class );
-
-            org.sonatype.aether.RepositorySystemSession session = Invoker.invoke( buildingRequest,
-                    "getRepositorySession" );
-
-            List<org.sonatype.aether.repository.RemoteRepository> aetherRepositories = Invoker.invoke(
-                    RepositoryUtils.class, "toRepos", List.class, buildingRequest.getRemoteRepositories() );
-
-            return new Maven30DependencyCollector( m30RepositorySystem, artifactHandlerManager, session,
-                    aetherRepositories );
-        }
-
-    }
-
-}
diff --git a/maven-3.0.x/src/main/java/org/apache/maven/shared/transfer/collection/internal/Invoker.java b/maven-3.0.x/src/main/java/org/apache/maven/shared/transfer/collection/internal/Invoker.java
deleted file mode 100644
index 642c4b6..0000000
--- a/maven-3.0.x/src/main/java/org/apache/maven/shared/transfer/collection/internal/Invoker.java
+++ /dev/null
@@ -1,96 +0,0 @@
-package org.apache.maven.shared.transfer.collection.internal;
-
-/*
- * 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.
- */
-
-import java.lang.reflect.InvocationTargetException;
-
-import org.apache.maven.shared.transfer.collection.DependencyCollectionException;
-
-/**
- * Invokes method on objects using reflection.
- */
-final class Invoker
-{
-    private Invoker()
-    {
-        // do not instantiate
-    }
-
-    public static <T> T invoke( Object object, String method )
-        throws DependencyCollectionException
-    {
-        try
-        {
-            @SuppressWarnings( "unchecked" )
-            T invoke = (T) object.getClass().getMethod( method ).invoke( object );
-            return invoke;
-        }
-        catch ( IllegalAccessException | InvocationTargetException | NoSuchMethodException e )
-        {
-            throw new DependencyCollectionException( e.getMessage(), e );
-        }
-    }
-
-    public static <T> T invoke( Class<?> objectClazz, String staticMethod, Class<?> argClazz, Object arg )
-                    throws DependencyCollectionException
-    {
-        try
-        {
-            @SuppressWarnings( "unchecked" )
-            T invoke = (T) objectClazz.getMethod( staticMethod, argClazz ).invoke( null, arg );
-            return invoke;
-        }
-        catch ( IllegalAccessException | InvocationTargetException | NoSuchMethodException e )
-        {
-            throw new DependencyCollectionException( e.getMessage(), e );
-        }
-    }
-    
-    /**
-     * <strong>Note:</strong> Ensure that argClasses and args have the same number of elements 
-     * 
-     * @param objectClazz the class of the static method
-     * @param staticMethod the static method to call
-     * @param argClasses the classes of the argument, used to select the right static method
-     * @param args the actual arguments to be passed
-     * @return the result of the method invocation
-     * @throws DependencyCollectionException if any checked exception occurs
-     */
-    public static <T> T invoke( Class<?> objectClazz, String staticMethod, Class<?>[] argClasses, Object[] args )
-                    throws DependencyCollectionException
-    {
-        if ( args.length != argClasses.length )
-        {
-            throw new IllegalArgumentException( "The number of elements in argClasses and args are not the same." );
-        }
-
-        try
-        {
-            @SuppressWarnings( "unchecked" )
-            T invoke = (T) objectClazz.getMethod( staticMethod, argClasses ).invoke( null, args );
-            return invoke;
-        }
-        catch ( IllegalAccessException | InvocationTargetException | NoSuchMethodException e )
-        {
-            throw new DependencyCollectionException( e.getMessage(), e );
-        }
-    }
-
-}
diff --git a/maven-3.0.x/src/main/java/org/apache/maven/shared/transfer/collection/internal/Maven30DependencyCollector.java b/maven-3.0.x/src/main/java/org/apache/maven/shared/transfer/collection/internal/Maven30DependencyCollector.java
index 108db21..7c7d0b8 100644
--- a/maven-3.0.x/src/main/java/org/apache/maven/shared/transfer/collection/internal/Maven30DependencyCollector.java
+++ b/maven-3.0.x/src/main/java/org/apache/maven/shared/transfer/collection/internal/Maven30DependencyCollector.java
@@ -19,19 +19,17 @@ package org.apache.maven.shared.transfer.collection.internal;
  * under the License.
  */
 
-import java.util.ArrayList;
-import java.util.List;
-
 import org.apache.maven.RepositoryUtils;
 import org.apache.maven.artifact.handler.ArtifactHandler;
 import org.apache.maven.artifact.handler.manager.ArtifactHandlerManager;
 import org.apache.maven.model.Model;
+import org.apache.maven.project.ProjectBuildingRequest;
 import org.apache.maven.shared.transfer.collection.CollectResult;
 import org.apache.maven.shared.transfer.collection.DependencyCollectionException;
-import org.apache.maven.shared.transfer.collection.DependencyCollector;
 import org.apache.maven.shared.transfer.dependencies.DependableCoordinate;
+import org.apache.maven.shared.transfer.support.DelegateSupport;
+import org.apache.maven.shared.transfer.support.Selector;
 import org.sonatype.aether.RepositorySystem;
-import org.sonatype.aether.RepositorySystemSession;
 import org.sonatype.aether.artifact.Artifact;
 import org.sonatype.aether.artifact.ArtifactTypeRegistry;
 import org.sonatype.aether.collection.CollectRequest;
@@ -39,82 +37,86 @@ import org.sonatype.aether.graph.Dependency;
 import org.sonatype.aether.repository.RemoteRepository;
 import org.sonatype.aether.util.artifact.DefaultArtifact;
 
+import javax.inject.Inject;
+import javax.inject.Named;
+import javax.inject.Singleton;
+import java.util.ArrayList;
+import java.util.List;
+import java.util.Objects;
+
 /**
- * Maven 3.0 implementation of the {@link DependencyCollector}
- * 
- * @author Robert Scholte
  *
  */
-class Maven30DependencyCollector
-    implements MavenDependencyCollector
+@Singleton
+@Named( Selector.MAVEN_3_0_X )
+public class Maven30DependencyCollector
+        extends DelegateSupport
+        implements DependencyCollectorDelegate
 {
     private final RepositorySystem repositorySystem;
 
     private final ArtifactHandlerManager artifactHandlerManager;
 
-    private final RepositorySystemSession session;
-    
     private final List<RemoteRepository> aetherRepositories;
-    
-    Maven30DependencyCollector( RepositorySystem repositorySystem, ArtifactHandlerManager artifactHandlerManager,
-                                RepositorySystemSession session, List<RemoteRepository> aetherRepositories )
+
+    @Inject
+    public Maven30DependencyCollector( RepositorySystem repositorySystem,
+                                       ArtifactHandlerManager artifactHandlerManager,
+                                       List<RemoteRepository> aetherRepositories )
     {
-        super();
-        this.repositorySystem = repositorySystem;
-        this.artifactHandlerManager = artifactHandlerManager;
-        this.session = session;
-        this.aetherRepositories = aetherRepositories;
+        this.repositorySystem = Objects.requireNonNull( repositorySystem );
+        this.artifactHandlerManager = Objects.requireNonNull( artifactHandlerManager );
+        this.aetherRepositories = Objects.requireNonNull( aetherRepositories );
     }
 
     @Override
-    public CollectResult collectDependencies( org.apache.maven.model.Dependency root )
-        throws DependencyCollectionException
+    public CollectResult collectDependencies( ProjectBuildingRequest buildingRequest,
+                                                org.apache.maven.model.Dependency root )
+            throws DependencyCollectionException
     {
-        ArtifactTypeRegistry typeRegistry = Invoker
-            .invoke( RepositoryUtils.class, "newArtifactTypeRegistry",
-                                               ArtifactHandlerManager.class, artifactHandlerManager );
+        ArtifactTypeRegistry typeRegistry = RepositoryUtils.newArtifactTypeRegistry( artifactHandlerManager );
 
         CollectRequest request = new CollectRequest();
         request.setRoot( toDependency( root, typeRegistry ) );
 
-        return collectDependencies( request );
+        return collectDependencies( buildingRequest, request );
     }
 
     @Override
-    public CollectResult collectDependencies( DependableCoordinate root )
-        throws DependencyCollectionException
+    public CollectResult collectDependencies( ProjectBuildingRequest buildingRequest,
+                                              DependableCoordinate root )
+            throws DependencyCollectionException
     {
         ArtifactHandler artifactHandler = artifactHandlerManager.getArtifactHandler( root.getType() );
 
         String extension = artifactHandler != null ? artifactHandler.getExtension() : null;
 
         Artifact aetherArtifact = new DefaultArtifact( root.getGroupId(), root.getArtifactId(), root.getClassifier(),
-                                                       extension, root.getVersion() );
+                extension, root.getVersion() );
 
         CollectRequest request = new CollectRequest();
         request.setRoot( new Dependency( aetherArtifact, null ) );
 
-        return collectDependencies( request );
+        return collectDependencies( buildingRequest, request );
     }
 
     @Override
-    public CollectResult collectDependencies( Model root )
-        throws DependencyCollectionException
+    public CollectResult collectDependencies( ProjectBuildingRequest buildingRequest,
+                                              Model root )
+            throws DependencyCollectionException
     {
         // Are there examples where packaging and type are NOT in sync
         ArtifactHandler artifactHandler = artifactHandlerManager.getArtifactHandler( root.getPackaging() );
 
         String extension = artifactHandler != null ? artifactHandler.getExtension() : null;
 
-        Artifact aetherArtifact =
-            new DefaultArtifact( root.getGroupId(), root.getArtifactId(), extension, root.getVersion() );
+        Artifact aetherArtifact = new DefaultArtifact( root.getGroupId(), root.getArtifactId(), extension,
+                root.getVersion() );
 
         CollectRequest request = new CollectRequest();
         request.setRoot( new Dependency( aetherArtifact, null ) );
 
-        ArtifactTypeRegistry typeRegistry = Invoker
-            .invoke( RepositoryUtils.class, "newArtifactTypeRegistry",
-                                               ArtifactHandlerManager.class, artifactHandlerManager );
+        ArtifactTypeRegistry typeRegistry = RepositoryUtils.newArtifactTypeRegistry( artifactHandlerManager );
 
         List<Dependency> aetherDependencies = new ArrayList<>( root.getDependencies().size() );
         for ( org.apache.maven.model.Dependency mavenDependency : root.getDependencies() )
@@ -136,17 +138,19 @@ class Maven30DependencyCollector
             request.setManagedDependencies( aetherManagerDependencies );
         }
 
-        return collectDependencies( request );
+        return collectDependencies( buildingRequest, request );
     }
 
-    private CollectResult collectDependencies( CollectRequest request )
-        throws DependencyCollectionException
+    private CollectResult collectDependencies( ProjectBuildingRequest buildingRequest,
+                                               CollectRequest request )
+            throws DependencyCollectionException
     {
         request.setRepositories( aetherRepositories );
 
         try
         {
-            return new Maven30CollectResult( repositorySystem.collectDependencies( session, request ) );
+            return new Maven30CollectResult( repositorySystem.collectDependencies(
+                    buildingRequest.getRepositorySession(), request ) );
         }
         catch ( org.sonatype.aether.collection.DependencyCollectionException e )
         {
@@ -156,12 +160,7 @@ class Maven30DependencyCollector
 
     private static Dependency toDependency( org.apache.maven.model.Dependency mavenDependency,
                                             ArtifactTypeRegistry typeRegistry )
-        throws DependencyCollectionException
     {
-        Class<?>[] argClasses = new Class<?>[] { org.apache.maven.model.Dependency.class, ArtifactTypeRegistry.class };
-
-        Object[] args = new Object[] { mavenDependency, typeRegistry };
-
-        return Invoker.invoke( RepositoryUtils.class, "toDependency", argClasses, args );
+        return RepositoryUtils.toDependency( mavenDependency, typeRegistry );
     }
 }
diff --git a/maven-3.0.x/src/main/java/org/apache/maven/shared/transfer/collection/internal/Maven30DependencyNodeAdapter.java b/maven-3.0.x/src/main/java/org/apache/maven/shared/transfer/collection/internal/Maven30DependencyNodeAdapter.java
index fa96b35..cee74b9 100644
--- a/maven-3.0.x/src/main/java/org/apache/maven/shared/transfer/collection/internal/Maven30DependencyNodeAdapter.java
+++ b/maven-3.0.x/src/main/java/org/apache/maven/shared/transfer/collection/internal/Maven30DependencyNodeAdapter.java
@@ -25,7 +25,6 @@ import java.util.List;
 import org.apache.maven.RepositoryUtils;
 import org.apache.maven.artifact.Artifact;
 import org.apache.maven.artifact.repository.ArtifactRepository;
-import org.apache.maven.shared.transfer.collection.DependencyCollectionException;
 import org.apache.maven.shared.transfer.graph.DependencyNode;
 import org.apache.maven.shared.transfer.graph.DependencyVisitor;
 import org.sonatype.aether.repository.RemoteRepository;
@@ -150,14 +149,6 @@ class Maven30DependencyNodeAdapter implements DependencyNode
 
     private Artifact getArtifact( org.sonatype.aether.artifact.Artifact aetherArtifact )
     {
-        try
-        {
-            return Invoker.invoke( RepositoryUtils.class, "toArtifact",
-                org.sonatype.aether.artifact.Artifact.class, aetherArtifact );
-        }
-        catch ( DependencyCollectionException e )
-        {
-            throw new RuntimeException( e );
-        }
+        return RepositoryUtils.toArtifact( aetherArtifact );
     }
 }
diff --git a/maven-3.0.x/src/main/java/org/apache/maven/shared/transfer/collection/internal/Maven31ArtifactRepositoryAdapter.java b/maven-3.0.x/src/main/java/org/apache/maven/shared/transfer/collection/internal/Maven31ArtifactRepositoryAdapter.java
deleted file mode 100644
index d53a452..0000000
--- a/maven-3.0.x/src/main/java/org/apache/maven/shared/transfer/collection/internal/Maven31ArtifactRepositoryAdapter.java
+++ /dev/null
@@ -1,265 +0,0 @@
-package org.apache.maven.shared.transfer.collection.internal;
-
-/*
- * 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.
- */
-
-import java.util.List;
-
-import org.apache.maven.artifact.Artifact;
-import org.apache.maven.artifact.metadata.ArtifactMetadata;
-import org.apache.maven.artifact.repository.ArtifactRepository;
-import org.apache.maven.artifact.repository.ArtifactRepositoryPolicy;
-import org.apache.maven.artifact.repository.Authentication;
-import org.apache.maven.artifact.repository.layout.ArtifactRepositoryLayout;
-import org.apache.maven.repository.Proxy;
-import org.eclipse.aether.repository.RemoteRepository;
-import org.eclipse.aether.repository.RepositoryPolicy;
-
-/**
- * ArtifactRepository wrapper around {@link RemoteRepository}
- * 
- * @author Robert Scholte
- *
- */
-class Maven31ArtifactRepositoryAdapter implements ArtifactRepository
-{
-    private static final String LS = System.lineSeparator();
-    private RemoteRepository remoteRepository;
-
-    /**
-     * @param remoteRepository {@link RemoteRepository}
-     */
-    Maven31ArtifactRepositoryAdapter( RemoteRepository remoteRepository )
-    {
-        this.remoteRepository = remoteRepository;
-    }
-
-    @Override
-    public String pathOf( Artifact artifact )
-    {
-        throw new UnsupportedOperationException();
-    }
-
-    @Override
-    public String pathOfRemoteRepositoryMetadata( ArtifactMetadata artifactMetadata )
-    {
-        throw new UnsupportedOperationException();
-    }
-
-    @Override
-    public String pathOfLocalRepositoryMetadata( ArtifactMetadata metadata, ArtifactRepository repository )
-    {
-        throw new UnsupportedOperationException();
-    }
-
-    @Override
-    public String getUrl()
-    {
-        return remoteRepository.getUrl();
-    }
-
-    @Override
-    public void setUrl( String url )
-    {
-        throw new UnsupportedOperationException();
-    }
-
-    @Override
-    public String getBasedir()
-    {
-        throw new UnsupportedOperationException();
-    }
-
-    @Override
-    public String getProtocol()
-    {
-        throw new UnsupportedOperationException();
-    }
-
-    @Override
-    public String getId()
-    {
-        return remoteRepository.getId();
-    }
-
-    @Override
-    public void setId( String id )
-    {
-        throw new UnsupportedOperationException();
-    }
-
-    @Override
-    public ArtifactRepositoryPolicy getSnapshots()
-    {
-        throw new UnsupportedOperationException();
-    }
-
-    @Override
-    public void setSnapshotUpdatePolicy( ArtifactRepositoryPolicy policy )
-    {
-        throw new UnsupportedOperationException();
-    }
-
-    @Override
-    public ArtifactRepositoryPolicy getReleases()
-    {
-        throw new UnsupportedOperationException();
-    }
-
-    @Override
-    public void setReleaseUpdatePolicy( ArtifactRepositoryPolicy policy )
-    {
-        throw new UnsupportedOperationException();
-    }
-
-    @Override
-    public ArtifactRepositoryLayout getLayout()
-    {
-        throw new UnsupportedOperationException();
-    }
-
-    @Override
-    public void setLayout( ArtifactRepositoryLayout layout )
-    {
-        throw new UnsupportedOperationException();
-    }
-
-    @Override
-    public String getKey()
-    {
-        throw new UnsupportedOperationException();
-    }
-
-    @Override
-    public boolean isUniqueVersion()
-    {
-        throw new UnsupportedOperationException();
-    }
-
-    @Override
-    public boolean isBlacklisted()
-    {
-        throw new UnsupportedOperationException();
-    }
-
-    @Override
-    public void setBlacklisted( boolean blackListed )
-    {
-        throw new UnsupportedOperationException();
-    }
-
-    @Override
-    public Artifact find( Artifact artifact )
-    {
-        throw new UnsupportedOperationException();
-    }
-
-    @Override
-    public List<String> findVersions( Artifact artifact )
-    {
-        throw new UnsupportedOperationException();
-    }
-
-    @Override
-    public boolean isProjectAware()
-    {
-        throw new UnsupportedOperationException();
-    }
-
-    @Override
-    public void setAuthentication( Authentication authentication )
-    {
-        throw new UnsupportedOperationException();
-    }
-
-    @Override
-    public Authentication getAuthentication()
-    {
-        throw new UnsupportedOperationException();
-    }
-
-    @Override
-    public void setProxy( Proxy proxy )
-    {
-        throw new UnsupportedOperationException();
-    }
-
-    @Override
-    public Proxy getProxy()
-    {
-        throw new UnsupportedOperationException();
-    }
-
-    @Override
-    public String toString()
-    {
-        StringBuilder sb = new StringBuilder();
-
-        sb.append( "       id: " ).append( getId() ).append( LS );
-        sb.append( "      url: " ).append( getUrl() ).append( LS );
-        sb.append( "   layout: " ).append( "default" ).append( LS );
-
-        RepositoryPolicy snapshotPolicy = remoteRepository.getPolicy( true ); 
-        sb.append( "snapshots: [enabled => " ).append( snapshotPolicy.isEnabled() );
-        sb.append( ", update => " ).append( snapshotPolicy.getUpdatePolicy() ).append( "]" ).append( LS );
-
-        RepositoryPolicy releasePolicy = remoteRepository.getPolicy( false ); 
-        sb.append( " releases: [enabled => " ).append( releasePolicy.isEnabled() );
-        sb.append( ", update => " ).append( releasePolicy.getUpdatePolicy() ).append( "]" ).append( LS );
-
-        return sb.toString();
-    }
-    
-    @Override
-    public int hashCode()
-    {
-        return remoteRepository.hashCode();
-    }
-
-    @Override
-    public boolean equals( Object obj )
-    {
-        if ( this == obj )
-        {
-            return true;
-        }
-        if ( obj == null )
-        {
-            return false;
-        }
-        if ( getClass() != obj.getClass() )
-        {
-            return false;
-        }
-        
-        Maven31ArtifactRepositoryAdapter other = (Maven31ArtifactRepositoryAdapter) obj;
-        if ( remoteRepository == null )
-        {
-            if ( other.remoteRepository != null )
-            {
-                return false;
-            }
-        }
-        else if ( !remoteRepository.equals( other.remoteRepository ) )
-        {
-            return false;
-        }
-        return true;
-    }
-}
diff --git a/maven-3.0.x/src/main/java/org/apache/maven/shared/transfer/collection/internal/Maven31CollectResult.java b/maven-3.0.x/src/main/java/org/apache/maven/shared/transfer/collection/internal/Maven31CollectResult.java
deleted file mode 100644
index 8a95ad7..0000000
--- a/maven-3.0.x/src/main/java/org/apache/maven/shared/transfer/collection/internal/Maven31CollectResult.java
+++ /dev/null
@@ -1,62 +0,0 @@
-package org.apache.maven.shared.transfer.collection.internal;
-
-/*
- * 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.
- */
-
-import java.util.List;
-
-import org.apache.maven.shared.transfer.collection.CollectResult;
-import org.apache.maven.shared.transfer.graph.DependencyNode;
-
-/**
- * CollectResult wrapper around {@link CollectResult}
- * 
- * @author Pim Moerenhout
- *
- */
-class Maven31CollectResult implements CollectResult
-{
-    private final org.eclipse.aether.collection.CollectResult collectResult;
-    
-    /**
-     * @param collectResult {@link CollectResult}
-     */
-    Maven31CollectResult( org.eclipse.aether.collection.CollectResult collectResult )
-    {
-        this.collectResult = collectResult;
-    }
-
-    /**
-     * Gets the root node of the dependency graph.
-     *
-     * @return The root node of the dependency graph or {@code null} if none.
-     */
-    @Override
-    public DependencyNode getRoot()
-    {
-        return new Maven31DependencyNodeAdapter( collectResult.getRoot() );
-    }
-
-    @Override
-    public List<Exception> getExceptions()
-    {
-        return collectResult.getExceptions();
-    }
-
-}
diff --git a/maven-3.0.x/src/main/java/org/apache/maven/shared/transfer/collection/internal/Maven31DependencyCollector.java b/maven-3.0.x/src/main/java/org/apache/maven/shared/transfer/collection/internal/Maven31DependencyCollector.java
deleted file mode 100644
index 43846ab..0000000
--- a/maven-3.0.x/src/main/java/org/apache/maven/shared/transfer/collection/internal/Maven31DependencyCollector.java
+++ /dev/null
@@ -1,168 +0,0 @@
-package org.apache.maven.shared.transfer.collection.internal;
-
-/*
- * 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.
- */
-
-import java.util.ArrayList;
-import java.util.List;
-
-import org.apache.maven.RepositoryUtils;
-import org.apache.maven.artifact.handler.ArtifactHandler;
-import org.apache.maven.artifact.handler.manager.ArtifactHandlerManager;
-import org.apache.maven.model.Model;
-import org.apache.maven.shared.transfer.dependencies.DependableCoordinate;
-import org.apache.maven.shared.transfer.collection.CollectResult;
-import org.apache.maven.shared.transfer.collection.DependencyCollectionException;
-import org.apache.maven.shared.transfer.collection.DependencyCollector;
-import org.eclipse.aether.RepositorySystem;
-import org.eclipse.aether.RepositorySystemSession;
-import org.eclipse.aether.artifact.Artifact;
-import org.eclipse.aether.artifact.ArtifactTypeRegistry;
-import org.eclipse.aether.artifact.DefaultArtifact;
-import org.eclipse.aether.collection.CollectRequest;
-import org.eclipse.aether.graph.Dependency;
-import org.eclipse.aether.repository.RemoteRepository;
-
-/**
- * Maven 3.1+ implementation of the {@link DependencyCollector}
- * 
- * @author Robert Scholte
- *
- */
-class Maven31DependencyCollector
-    implements MavenDependencyCollector
-{
-    private final RepositorySystem repositorySystem;
-
-    private final ArtifactHandlerManager artifactHandlerManager;
-    
-    private final RepositorySystemSession session;
-    
-    private final List<RemoteRepository> aetherRepositories;
-    
-    Maven31DependencyCollector( RepositorySystem repositorySystem, ArtifactHandlerManager artifactHandlerManager,
-                                RepositorySystemSession session, List<RemoteRepository> aetherRepositories )
-    {
-        super();
-        this.repositorySystem = repositorySystem;
-        this.artifactHandlerManager = artifactHandlerManager;
-        this.session = session;
-        this.aetherRepositories = aetherRepositories;
-    }
-
-    @Override
-    public CollectResult collectDependencies( org.apache.maven.model.Dependency root )
-        throws DependencyCollectionException
-    {
-        ArtifactTypeRegistry typeRegistry = Invoker
-            .invoke( RepositoryUtils.class, "newArtifactTypeRegistry",
-                                               ArtifactHandlerManager.class, artifactHandlerManager );
-
-        CollectRequest request = new CollectRequest();
-        request.setRoot( toDependency( root, typeRegistry ) );
-
-        return collectDependencies( request );
-    }
-
-    @Override
-    public CollectResult collectDependencies( DependableCoordinate root )
-        throws DependencyCollectionException
-    {
-        ArtifactHandler artifactHandler = artifactHandlerManager.getArtifactHandler( root.getType() );
-
-        String extension = artifactHandler != null ? artifactHandler.getExtension() : null;
-
-        Artifact aetherArtifact = new DefaultArtifact( root.getGroupId(), root.getArtifactId(), root.getClassifier(),
-                                                       extension, root.getVersion() );
-
-        CollectRequest request = new CollectRequest();
-        request.setRoot( new Dependency( aetherArtifact, null ) );
-
-        return collectDependencies( request );
-    }
-
-    @Override
-    public CollectResult collectDependencies( Model root )
-        throws DependencyCollectionException
-    {
-        // Are there examples where packaging and type are NOT in sync
-        ArtifactHandler artifactHandler = artifactHandlerManager.getArtifactHandler( root.getPackaging() );
-
-        String extension = artifactHandler != null ? artifactHandler.getExtension() : null;
-
-        Artifact aetherArtifact =
-            new DefaultArtifact( root.getGroupId(), root.getArtifactId(), extension, root.getVersion() );
-
-        CollectRequest request = new CollectRequest();
-        request.setRoot( new Dependency( aetherArtifact, null ) );
-
-        ArtifactTypeRegistry typeRegistry = Invoker
-            .invoke( RepositoryUtils.class, "newArtifactTypeRegistry",
-                                               ArtifactHandlerManager.class, artifactHandlerManager );
-
-        List<Dependency> aetherDependencies = new ArrayList<>( root.getDependencies().size() );
-        for ( org.apache.maven.model.Dependency mavenDependency : root.getDependencies() )
-        {
-            aetherDependencies.add( toDependency( mavenDependency, typeRegistry ) );
-        }
-        request.setDependencies( aetherDependencies );
-
-        if ( root.getDependencyManagement() != null )
-        {
-            List<Dependency> aetherManagerDependencies = new ArrayList<>(
-                    root.getDependencyManagement().getDependencies().size() );
-
-            for ( org.apache.maven.model.Dependency mavenDependency : root.getDependencyManagement().getDependencies() )
-            {
-                aetherManagerDependencies.add( toDependency( mavenDependency, typeRegistry ) );
-            }
-
-            request.setManagedDependencies( aetherManagerDependencies );
-        }
-
-        return collectDependencies( request );
-    }
-
-    private CollectResult collectDependencies( CollectRequest request )
-        throws DependencyCollectionException
-    {
-        request.setRepositories( aetherRepositories );
-
-        try
-        {
-            return new Maven31CollectResult( repositorySystem.collectDependencies( session, request ) );
-        }
-        catch ( org.eclipse.aether.collection.DependencyCollectionException e )
-        {
-            throw new DependencyCollectionException( e.getMessage(), e );
-        }
-    }
-
-    private static Dependency toDependency( org.apache.maven.model.Dependency root, ArtifactTypeRegistry typeRegistry )
-                    throws DependencyCollectionException
-    {
-        Class<?>[] argClasses = new Class<?>[] { org.apache.maven.model.Dependency.class, ArtifactTypeRegistry.class };
-
-        Object[] args = new Object[] { root, typeRegistry };
-
-        return Invoker
-            .invoke( RepositoryUtils.class, "toDependency", argClasses, args );
-    }
-
-}
diff --git a/maven-3.0.x/src/main/java/org/apache/maven/shared/transfer/collection/internal/Maven31DependencyNodeAdapter.java b/maven-3.0.x/src/main/java/org/apache/maven/shared/transfer/collection/internal/Maven31DependencyNodeAdapter.java
deleted file mode 100644
index eae1542..0000000
--- a/maven-3.0.x/src/main/java/org/apache/maven/shared/transfer/collection/internal/Maven31DependencyNodeAdapter.java
+++ /dev/null
@@ -1,163 +0,0 @@
-package org.apache.maven.shared.transfer.collection.internal;
-
-/*
- * 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.
- */
-
-import java.util.ArrayList;
-import java.util.List;
-
-import org.apache.maven.RepositoryUtils;
-import org.apache.maven.artifact.Artifact;
-import org.apache.maven.artifact.repository.ArtifactRepository;
-import org.apache.maven.shared.transfer.collection.DependencyCollectionException;
-import org.apache.maven.shared.transfer.graph.DependencyNode;
-import org.apache.maven.shared.transfer.graph.DependencyVisitor;
-import org.eclipse.aether.repository.RemoteRepository;
-
-/**
- * DependencyCollectorNode wrapper around {@link org.eclipse.aether.graph.DependencyNode}
- *
- * @author Pim Moerenhout
- *
- */
-class Maven31DependencyNodeAdapter implements DependencyNode
-{
-
-    private org.eclipse.aether.graph.DependencyNode dependencyNode;
-
-    /**
-     * @param dependencyNode {@link org.eclipse.aether.graph.DependencyNode}
-     */
-    Maven31DependencyNodeAdapter( org.eclipse.aether.graph.DependencyNode dependencyNode )
-    {
-        this.dependencyNode = dependencyNode;
-    }
-
-    @Override
-    public Artifact getArtifact()
-    {
-        return getArtifact( dependencyNode.getArtifact() );
-    }
-
-    @Override
-    public List<DependencyNode> getChildren()
-    {
-        List<org.eclipse.aether.graph.DependencyNode> aetherChildren = dependencyNode.getChildren();
-        List<DependencyNode> children = new ArrayList<>( aetherChildren.size() );
-        for ( org.eclipse.aether.graph.DependencyNode aetherChild : aetherChildren )
-        {
-            children.add( new Maven31DependencyNodeAdapter( aetherChild ) );
-        }
-        return children;
-    }
-
-    @Override
-    public List<ArtifactRepository> getRemoteRepositories()
-    {
-        List<RemoteRepository> aetherRepositories = dependencyNode.getRepositories();
-        List<ArtifactRepository> mavenRepositories = new ArrayList<>( aetherRepositories.size() );
-
-        for ( RemoteRepository aetherRepository : aetherRepositories )
-        {
-            mavenRepositories.add( new Maven31ArtifactRepositoryAdapter( aetherRepository ) );
-        }
-
-        return mavenRepositories;
-    }
-
-    @Override
-    public String getScope()
-    {
-        return dependencyNode.getDependency().getScope();
-    }
-
-    @Override
-    public Boolean getOptional()
-    {
-        return dependencyNode.getDependency().getOptional();
-    }
-
-    @Override
-    public boolean accept( DependencyVisitor visitor )
-    {
-        if ( visitor.visitEnter( this ) )
-        {
-            for ( org.eclipse.aether.graph.DependencyNode aetherNode : dependencyNode.getChildren() )
-            {
-                DependencyNode child = new Maven31DependencyNodeAdapter( aetherNode );
-                if ( !child.accept( visitor ) )
-                {
-                    break;
-                }
-            }
-        }
-
-        return visitor.visitLeave( this );
-    }
-
-    @Override
-    public int hashCode()
-    {
-        return dependencyNode.hashCode();
-    }
-
-    @Override
-    public boolean equals( Object obj )
-    {
-        if ( this == obj )
-        {
-            return true;
-        }
-        if ( obj == null )
-        {
-            return false;
-        }
-        if ( getClass() != obj.getClass() )
-        {
-            return false;
-        }
-
-        Maven31DependencyNodeAdapter other = (Maven31DependencyNodeAdapter) obj;
-        if ( dependencyNode == null )
-        {
-            if ( other.dependencyNode != null )
-            {
-                return false;
-            }
-        }
-        else if ( !dependencyNode.equals( other.dependencyNode ) )
-        {
-            return false;
-        }
-        return true;
-    }
-
-    private Artifact getArtifact( org.eclipse.aether.artifact.Artifact aetherArtifact )
-    {
-        try
-        {
-            return Invoker.invoke( RepositoryUtils.class, "toArtifact",
-                org.eclipse.aether.artifact.Artifact.class, aetherArtifact );
-        }
-        catch ( DependencyCollectionException e )
-        {
-            throw new RuntimeException( e );
-        }
-    }
-}
diff --git a/maven-3.0.x/src/main/java/org/apache/maven/shared/transfer/collection/internal/MavenDependencyCollector.java b/maven-3.0.x/src/main/java/org/apache/maven/shared/transfer/collection/internal/MavenDependencyCollector.java
deleted file mode 100644
index fc7edb8..0000000
--- a/maven-3.0.x/src/main/java/org/apache/maven/shared/transfer/collection/internal/MavenDependencyCollector.java
+++ /dev/null
@@ -1,43 +0,0 @@
-package org.apache.maven.shared.transfer.collection.internal;
-
-/*
- * 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.
- */
-
-import org.apache.maven.model.Dependency;
-import org.apache.maven.model.Model;
-import org.apache.maven.shared.transfer.dependencies.DependableCoordinate;
-import org.apache.maven.shared.transfer.collection.CollectResult;
-import org.apache.maven.shared.transfer.collection.DependencyCollectionException;
-
-/**
- * @author Robert Scholte
- */
-interface MavenDependencyCollector
-{
-
-  CollectResult collectDependencies( Dependency root )
-      throws DependencyCollectionException;
-
-  CollectResult collectDependencies( DependableCoordinate root )
-      throws DependencyCollectionException;
-
-  CollectResult collectDependencies( Model root )
-      throws DependencyCollectionException;
-
-}
diff --git a/maven-3.0.x/src/main/java/org/apache/maven/shared/transfer/dependencies/DefaultDependableCoordinate.java b/maven-3.0.x/src/main/java/org/apache/maven/shared/transfer/dependencies/DefaultDependableCoordinate.java
deleted file mode 100644
index dcd78b5..0000000
--- a/maven-3.0.x/src/main/java/org/apache/maven/shared/transfer/dependencies/DefaultDependableCoordinate.java
+++ /dev/null
@@ -1,183 +0,0 @@
-package org.apache.maven.shared.transfer.dependencies;
-
-/*
- * 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.
- */
-
-/**
- * Common usage of an DependableCoordinate for a Mojo
- * 
- * <pre>
- * &#64;Parameter
- * private DefaultDependableCoordinate[] dependencies;
- * </pre>
- * 
- * and
- * 
- * <pre>
- * private DefaultDependableCoordinate dependable = new DefaultDependableCoordinate();
- * 
- * &#64;Parameter( property = "groupId" )
- * private String groupId;
- * 
- * &#64;Parameter( property = "artifactId" )
- * private String artifactId;
- * 
- * &#64;Parameter( property = "version" )
- * private String version;
- * 
- * &#64;Parameter( property = "classifier" )
- * private String classifier;
- * 
- * &#64;Parameter( property = "type" )
- * private String type;
- * 
- * public void setGroupId( String groupId )
- * {
- *   this.dependable.setGroupId( groupId );
- * }
- * 
- * public void setArtifactId( String artifactId )
- * {
- *   this.dependable.setArtifactId( artifactId );
- * }
- * 
- * public void setVersion( String version )
- * {
- *   this.dependable.setVersion( version );
- * }
- * 
- * public void setClassifier( String classifier )
- * {
- *   this.dependable.setClassifier( classifier );
- * }
- * 
- * public void setType( String type )
- * {
- *   this.dependable.setType( type );
- * }
- * </pre>
- * <strong>Note: </strong> type is not the same as extension! 
- * {@link org.apache.maven.artifact.handler.ArtifactHandler}s are used to map a type to an extension.  
- * 
- * 
- * @author Robert Scholte
- * @since 3.0
- */
-public class DefaultDependableCoordinate implements DependableCoordinate
-{
-    private String groupId;
-    
-    private String artifactId;
-    
-    private String version;
-    
-    private String type;
-    
-    private String classifier;
-    
-    @Override
-    public final String getGroupId()
-    {
-        return groupId;
-    }
-
-    /**
-     * @param groupId The groupId to be set.
-     */
-    public final void setGroupId( String groupId )
-    {
-        this.groupId = groupId;
-    }
-
-    @Override
-    public final String getArtifactId()
-    {
-        return artifactId;
-    }
-
-    /**
-     * @param artifactId The artifactId to be set.
-     */
-    public final void setArtifactId( String artifactId )
-    {
-        this.artifactId = artifactId;
-    }
-
-    @Override
-    public final String getVersion()
-    {
-        return version;
-    }
-
-    /**
-     * @param version The version to be set.
-     */
-    public final void setVersion( String version )
-    {
-        this.version = version;
-    }
-
-    @Override
-    public final String getType()
-    {
-        return type != null ? type : "jar";
-    }
-
-    /**
-     * @param type The type to be set.
-     */
-    public void setType( String type )
-    {
-        this.type = type;
-    }
-    
-    @Override
-    public final String getClassifier()
-    {
-        return classifier;
-    }
-
-    /**
-     * @param classifier The classifier to be set.
-     */
-    public final void setClassifier( String classifier )
-    {
-        this.classifier = classifier;
-    }
-    
-    /**
-     * @see org.apache.maven.artifact.DefaultArtifact#toString()
-     */
-    @Override
-    public String toString()
-    {
-        StringBuilder sb =
-            new StringBuilder().append( groupId ).append( ':' ).append( artifactId ).append( ':' ).append( getType() );
-        
-        if ( classifier != null )
-        {
-            sb.append( ':' ).append( classifier );
-        }
-        
-        sb.append( ':' ).append( version );
-        
-        return sb.toString();
-    }
-    
-}
diff --git a/maven-3.0.x/src/main/java/org/apache/maven/shared/transfer/dependencies/DependableCoordinate.java b/maven-3.0.x/src/main/java/org/apache/maven/shared/transfer/dependencies/DependableCoordinate.java
deleted file mode 100644
index a2e8a3b..0000000
--- a/maven-3.0.x/src/main/java/org/apache/maven/shared/transfer/dependencies/DependableCoordinate.java
+++ /dev/null
@@ -1,70 +0,0 @@
-package org.apache.maven.shared.transfer.dependencies;
-
-/*
- * 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.
- */
-
-/**
- * <p>
- * Represents any instance which may contain Maven Dependencies, both explicit or implicit to (transitively) resolve 
- * and calculate its path for either a local or remote Maven repository.
- * </p>
- * <p>
- * The version can be a version range. Based on the groupId and artifactId it will be resolved to the actual version.
- * </p>
- * <p>
- * The type will be translated to an extension based on the artifact descriptor ({@code pom.xml} matching the groupId,
- * artifactId and version.
- * </p>
- * A MavenProject is not considered a DependableCoordinate because it should never have a versionRange, and it has 
- * packaging instead of type.
- * 
- * @author Robert Scholte
- */
-public interface DependableCoordinate
-{
-    /**
-     * @return the groupId of the coordinate
-     */
-    String getGroupId();
-
-    /**
-     * 
-     * @return the artifact of the coordinate
-     */
-    String getArtifactId();
-
-    /**
-     * A version or versionRange
-     * 
-     * @return the version
-     */
-    String getVersion();
-
-    /**
-     * 
-     * @return the type of the coordinate
-     */
-    String getType();
-
-    /**
-     * 
-     * @return the classifier or {@code null}
-     */
-    String getClassifier();
-}
diff --git a/maven-3.0.x/src/main/java/org/apache/maven/shared/transfer/dependencies/TransferUtils.java b/maven-3.0.x/src/main/java/org/apache/maven/shared/transfer/dependencies/TransferUtils.java
deleted file mode 100644
index 078ebb4..0000000
--- a/maven-3.0.x/src/main/java/org/apache/maven/shared/transfer/dependencies/TransferUtils.java
+++ /dev/null
@@ -1,136 +0,0 @@
-package org.apache.maven.shared.transfer.dependencies;
-
-/*
- * 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.
- */
-
-import org.apache.maven.model.Dependency;
-import org.apache.maven.model.Extension;
-import org.apache.maven.model.Model;
-import org.apache.maven.model.Parent;
-import org.apache.maven.model.Plugin;
-import org.apache.maven.model.ReportPlugin;
-
-/**
- * Utility class to convert different things like {@link Dependency}, {@link Extension}, {@link Model}, {@link Parent},
- * {@link Plugin} and {@link ReportPlugin} into {@link DependableCoordinate}.
- * 
- * @author Robert Scholte
- */
-public final class TransferUtils
-{
-    private TransferUtils()
-    {
-    }
-    
-    /**
-     * @param dependency {@link Dependency} to be converted to {@link DependableCoordinate}
-     * @return {@link DependableCoordinate}
-     */
-    public static DependableCoordinate toDependableCoordinate( Dependency dependency )
-    {
-        DefaultDependableCoordinate coordinate = new DefaultDependableCoordinate();
-        
-        coordinate.setGroupId( dependency.getGroupId() );
-        coordinate.setArtifactId( dependency.getArtifactId() );
-        coordinate.setVersion( dependency.getVersion() );
-        coordinate.setType( dependency.getType() );
-        coordinate.setClassifier( dependency.getClassifier() );
-        
-        return coordinate;
-    }
-
-    /**
-     * @param extension {@link Extension} to be converted to {@link DependableCoordinate}
-     * @return {@link DependableCoordinate}
-     */
-    public static DependableCoordinate toDependableCoordinate( Extension extension )
-    {
-        DefaultDependableCoordinate coordinate = new DefaultDependableCoordinate();
-        
-        coordinate.setGroupId( extension.getGroupId() );
-        coordinate.setArtifactId( extension.getArtifactId() );
-        coordinate.setVersion( extension.getVersion() );
-        
-        return coordinate;
-    }
-
-    /**
-     * @param model {@link Model} coordinates to be converted to {@link DependableCoordinate}.
-     * @return {@link DependableCoordinate}
-     */
-    public static DependableCoordinate toDependableCoordinate( Model model )
-    {
-        DefaultDependableCoordinate coordinate = new DefaultDependableCoordinate();
-        
-        coordinate.setGroupId( model.getGroupId() );
-        coordinate.setArtifactId( model.getArtifactId() );
-        coordinate.setVersion( model.getVersion() );
-        coordinate.setType( model.getPackaging() );
-        
-        return coordinate;
-    }
-
-    /**
-     * @param parent {@link Parent parent} coordinates to be converted to {@link DependableCoordinate}.
-     * @return {@link DependableCoordinate}.
-     */
-    public static DependableCoordinate toDependableCoordinate( Parent parent )
-    {
-        DefaultDependableCoordinate coordinate = new DefaultDependableCoordinate();
-        
-        coordinate.setGroupId( parent.getGroupId() );
-        coordinate.setArtifactId( parent.getArtifactId() );
-        coordinate.setVersion( parent.getVersion() );
-        coordinate.setType( "pom" );
-        
-        return coordinate;
-    }
-
-    /**
-     * @param plugin The {@link Plugin plugin} coordiantes which should be converted. 
-     * @return {@link DependableCoordinate}.
-     */
-    public static DependableCoordinate toDependableCoordinate( Plugin plugin )
-    {
-        DefaultDependableCoordinate coordinate = new DefaultDependableCoordinate();
-        
-        coordinate.setGroupId( plugin.getGroupId() );
-        coordinate.setArtifactId( plugin.getArtifactId() );
-        coordinate.setVersion( plugin.getVersion() );
-        
-        return coordinate;
-    }
-    
-    /**
-     * Convert {@link ReportPlugin plugin} coordinates to {@link DependableCoordinate}.
-     * @param plugin The {@link ReportPlugin plugin} to be converted to {@link DependableCoordinate}.
-     * @return The converted {@link DependableCoordinate} coordinates.
-     */
-    public static DependableCoordinate toDependableCoordinate( ReportPlugin plugin )
-    {
-        DefaultDependableCoordinate coordinate = new DefaultDependableCoordinate();
-        
-        coordinate.setGroupId( plugin.getGroupId() );
-        coordinate.setArtifactId( plugin.getArtifactId() );
-        coordinate.setVersion( plugin.getVersion() );
-        
-        return coordinate;
-    }
-
-}
diff --git a/maven-3.0.x/src/main/java/org/apache/maven/shared/transfer/dependencies/collect/CollectorResult.java b/maven-3.0.x/src/main/java/org/apache/maven/shared/transfer/dependencies/collect/CollectorResult.java
deleted file mode 100644
index 674dad5..0000000
--- a/maven-3.0.x/src/main/java/org/apache/maven/shared/transfer/dependencies/collect/CollectorResult.java
+++ /dev/null
@@ -1,37 +0,0 @@
-package org.apache.maven.shared.transfer.dependencies.collect;
-
-/*
- * 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.
- */
-
-import java.util.List;
-
-import org.apache.maven.artifact.repository.ArtifactRepository;
-
-/**
- * 
- * @author Robert Scholte
- *
- */
-public interface CollectorResult
-{
-    /**
-     * @return List of {@link ArtifactRepository}
-     */
-    List<ArtifactRepository> getRemoteRepositories();
-}
diff --git a/maven-3.0.x/src/main/java/org/apache/maven/shared/transfer/dependencies/collect/DependencyCollector.java b/maven-3.0.x/src/main/java/org/apache/maven/shared/transfer/dependencies/collect/DependencyCollector.java
deleted file mode 100644
index 0dbc465..0000000
--- a/maven-3.0.x/src/main/java/org/apache/maven/shared/transfer/dependencies/collect/DependencyCollector.java
+++ /dev/null
@@ -1,73 +0,0 @@
-package org.apache.maven.shared.transfer.dependencies.collect;
-
-/*
- * 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.
- */
-
-import org.apache.maven.model.Dependency;
-import org.apache.maven.model.Model;
-import org.apache.maven.project.ProjectBuildingRequest;
-import org.apache.maven.shared.transfer.dependencies.DependableCoordinate;
-
-/**
- * Will only download the pom files when not available, never the artifact. 
- * 
- * @author Robert Scholte
- *
- */
-public interface DependencyCollector
-{
-
-    /**
-     * A dependency may have excludes 
-     * 
-     * @param buildingRequest {@link ProjectBuildingRequest}
-     * @param root {@link Dependency}
-     * @return {@link CollectorResult}
-     * @throws DependencyCollectorException in case of an error.
-     * @throws IllegalArgumentException in case of parameter <code>buildingRequest</code> is <code>null</code> or
-     *             parameter <code>root</code> is <code>null</code>.
-     */
-    CollectorResult collectDependencies( ProjectBuildingRequest buildingRequest, Dependency root )
-        throws DependencyCollectorException;
-
-    /**
-     * @param buildingRequest {@link ProjectBuildingRequest}.
-     * @param root {@link DependableCoordinate}
-     * @return {@link CollectorResult}
-     * @throws DependencyCollectorException in case of an error which can be a component lookup error or
-     *  an error while trying to look up the dependencies.
-     * @throws IllegalArgumentException in case of parameter <code>buildingRequest</code> is <code>null</code> or
-     *             parameter <code>root</code> is <code>null</code>.
-     */
-    CollectorResult collectDependencies( ProjectBuildingRequest buildingRequest, DependableCoordinate root )
-                    throws DependencyCollectorException;
-
-    /**
-     * @param buildingRequest {@link ProjectBuildingRequest}.
-     * @param root {@link Model}
-     * @return {@link CollectorResult}
-     * @throws DependencyCollectorException in case of an error which can be a component lookup error or
-     *  an error while trying to look up the dependencies.
-     * @throws IllegalArgumentException in case of parameter <code>buildingRequest</code> is <code>null</code> or
-     *             parameter <code>root</code> is <code>null</code>.
-     */
-    CollectorResult collectDependencies( ProjectBuildingRequest buildingRequest, Model root )
-                    throws DependencyCollectorException;
-
-}
diff --git a/maven-3.0.x/src/main/java/org/apache/maven/shared/transfer/dependencies/collect/internal/DefaultDependencyCollector.java b/maven-3.0.x/src/main/java/org/apache/maven/shared/transfer/dependencies/collect/internal/DefaultDependencyCollector.java
deleted file mode 100644
index bf84fc9..0000000
--- a/maven-3.0.x/src/main/java/org/apache/maven/shared/transfer/dependencies/collect/internal/DefaultDependencyCollector.java
+++ /dev/null
@@ -1,198 +0,0 @@
-package org.apache.maven.shared.transfer.dependencies.collect.internal;
-
-/*
- * 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.
- */
-
-import java.util.List;
-
-import org.apache.maven.RepositoryUtils;
-import org.apache.maven.artifact.handler.manager.ArtifactHandlerManager;
-import org.apache.maven.model.Dependency;
-import org.apache.maven.model.Model;
-import org.apache.maven.project.ProjectBuildingRequest;
-import org.apache.maven.shared.transfer.dependencies.DependableCoordinate;
-import org.apache.maven.shared.transfer.dependencies.collect.CollectorResult;
-import org.apache.maven.shared.transfer.dependencies.collect.DependencyCollector;
-import org.apache.maven.shared.transfer.dependencies.collect.DependencyCollectorException;
-import org.codehaus.plexus.PlexusConstants;
-import org.codehaus.plexus.PlexusContainer;
-import org.codehaus.plexus.component.annotations.Component;
-import org.codehaus.plexus.component.repository.exception.ComponentLookupException;
-import org.codehaus.plexus.context.Context;
-import org.codehaus.plexus.context.ContextException;
-import org.codehaus.plexus.personality.plexus.lifecycle.phase.Contextualizable;
-
-/**
- * This DependencyCollector passes the request to the proper Maven 3.x implementation
- *
- * @author Robert Scholte
- */
-@Component( role = DependencyCollector.class, hint = "default" )
-class DefaultDependencyCollector implements DependencyCollector, Contextualizable
-{
-    private PlexusContainer container;
-
-    @Override
-    public CollectorResult collectDependencies( ProjectBuildingRequest buildingRequest, Dependency root )
-            throws DependencyCollectorException
-    {
-        validateParameters( buildingRequest, root );
-
-        try
-        {
-            return getMavenDependencyCollector( buildingRequest ).collectDependencies( root );
-        }
-        catch ( ComponentLookupException e )
-        {
-            throw new DependencyCollectorException( e.getMessage(), e );
-        }
-    }
-
-    @Override
-    public CollectorResult collectDependencies( ProjectBuildingRequest buildingRequest, DependableCoordinate root )
-            throws DependencyCollectorException
-    {
-        validateParameters( buildingRequest, root );
-
-        try
-        {
-            return getMavenDependencyCollector( buildingRequest ).collectDependencies( root );
-        }
-        catch ( ComponentLookupException e )
-        {
-            throw new DependencyCollectorException( e.getMessage(), e );
-        }
-    }
-
-    @Override
-    public CollectorResult collectDependencies( ProjectBuildingRequest buildingRequest, Model root )
-            throws DependencyCollectorException
-    {
-        validateParameters( buildingRequest, root );
-
-        try
-        {
-            return getMavenDependencyCollector( buildingRequest ).collectDependencies( root );
-        }
-        catch ( ComponentLookupException e )
-        {
-            throw new DependencyCollectorException( e.getMessage(), e );
-        }
-    }
-
-    private void validateParameters( ProjectBuildingRequest buildingRequest, DependableCoordinate root )
-    {
-        validateBuildingRequest( buildingRequest );
-        validateRoot( root );
-    }
-
-    private void validateParameters( ProjectBuildingRequest buildingRequest, Dependency root )
-    {
-        validateBuildingRequest( buildingRequest );
-        validateRoot( root );
-    }
-
-    private void validateParameters( ProjectBuildingRequest buildingRequest, Model root )
-    {
-        validateBuildingRequest( buildingRequest );
-        validateRoot( root );
-    }
-
-    private void validateBuildingRequest( ProjectBuildingRequest buildingRequest )
-    {
-        if ( buildingRequest == null )
-        {
-            throw new IllegalArgumentException( "The parameter buildingRequest is not allowed to be null." );
-        }
-    }
-
-    private void validateRoot( Object root )
-    {
-        if ( root == null )
-        {
-            throw new IllegalArgumentException( "The parameter root is not allowed to be null." );
-        }
-    }
-
-    /**
-     * @return true if the current Maven version is Maven 3.1.
-     */
-    private boolean isMaven31()
-    {
-        try
-        {
-            // Maven 3.1 specific
-            Thread.currentThread().getContextClassLoader().loadClass( "org.eclipse.aether.artifact.Artifact" );
-            return true;
-        }
-        catch ( ClassNotFoundException e )
-        {
-            return false;
-        }
-    }
-
-    /**
-     * Injects the Plexus content.
-     *
-     * @param context Plexus context to inject.
-     * @throws ContextException if the PlexusContainer could not be located.
-     */
-    public void contextualize( Context context ) throws ContextException
-    {
-        container = (PlexusContainer) context.get( PlexusConstants.PLEXUS_KEY );
-    }
-
-    private MavenDependencyCollector getMavenDependencyCollector( ProjectBuildingRequest buildingRequest )
-            throws ComponentLookupException, DependencyCollectorException
-    {
-        ArtifactHandlerManager artifactHandlerManager = container.lookup( ArtifactHandlerManager.class );
-
-        if ( isMaven31() )
-        {
-            org.eclipse.aether.RepositorySystem m31RepositorySystem = container.lookup(
-                    org.eclipse.aether.RepositorySystem.class );
-
-            org.eclipse.aether.RepositorySystemSession session = Invoker.invoke( buildingRequest,
-                    "getRepositorySession" );
-
-            List<org.eclipse.aether.repository.RemoteRepository> aetherRepositories = Invoker.invoke(
-                    RepositoryUtils.class, "toRepos", List.class, buildingRequest.getRemoteRepositories() );
-
-            return new Maven31DependencyCollector( m31RepositorySystem, artifactHandlerManager, session,
-                    aetherRepositories );
-        }
-        else
-        {
-
-            org.sonatype.aether.RepositorySystem m30RepositorySystem = container.lookup(
-                    org.sonatype.aether.RepositorySystem.class );
-
-            org.sonatype.aether.RepositorySystemSession session = Invoker.invoke( buildingRequest,
-                    "getRepositorySession" );
-
-            List<org.sonatype.aether.repository.RemoteRepository> aetherRepositories = Invoker.invoke(
-                    RepositoryUtils.class, "toRepos", List.class, buildingRequest.getRemoteRepositories() );
-
-            return new Maven30DependencyCollector( m30RepositorySystem, artifactHandlerManager, session,
-                    aetherRepositories );
-        }
-
-    }
-
-}
diff --git a/maven-3.0.x/src/main/java/org/apache/maven/shared/transfer/dependencies/collect/internal/Invoker.java b/maven-3.0.x/src/main/java/org/apache/maven/shared/transfer/dependencies/collect/internal/Invoker.java
deleted file mode 100644
index 9f645b6..0000000
--- a/maven-3.0.x/src/main/java/org/apache/maven/shared/transfer/dependencies/collect/internal/Invoker.java
+++ /dev/null
@@ -1,93 +0,0 @@
-package org.apache.maven.shared.transfer.dependencies.collect.internal;
-
-/*
- * 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.
- */
-
-import org.apache.maven.shared.transfer.dependencies.collect.DependencyCollectorException;
-
-import java.lang.reflect.InvocationTargetException;
-
-/**
- * Invokes method on objects using reflection.
- */
-final class Invoker
-{
-    private Invoker()
-    {
-        // do not instantiate
-    }
-
-    public static <T> T invoke( Object object, String method ) throws DependencyCollectorException
-    {
-        try
-        {
-            @SuppressWarnings( "unchecked" )
-            T invoke = (T) object.getClass().getMethod( method ).invoke( object );
-            return invoke;
-        }
-        catch ( IllegalAccessException | InvocationTargetException | NoSuchMethodException e )
-        {
-            throw new DependencyCollectorException( e.getMessage(), e );
-        }
-    }
-
-    public static <T> T invoke( Class<?> objectClazz, String staticMethod, Class<?> argClazz, Object arg )
-            throws DependencyCollectorException
-    {
-        try
-        {
-            @SuppressWarnings( "unchecked" )
-            T invoke = (T) objectClazz.getMethod( staticMethod, argClazz ).invoke( null, arg );
-            return invoke;
-        }
-        catch ( IllegalAccessException | InvocationTargetException | NoSuchMethodException e )
-        {
-            throw new DependencyCollectorException( e.getMessage(), e );
-        }
-    }
-
-    /**
-     * @param objectClazz  the class of the static method
-     * @param staticMethod the static method to call
-     * @param argClasses   the classes of the argument, used to select the right static method
-     * @param args         the actual arguments to be passed
-     * @return the result of the method invocation
-     * @throws DependencyCollectorException if any checked exception occurs
-     */
-    public static <T> T invoke( Class<?> objectClazz, String staticMethod, Class<?>[] argClasses, Object[] args )
-            throws DependencyCollectorException
-    {
-        if ( args.length != argClasses.length )
-        {
-            throw new IllegalArgumentException( "The number of elements in argClasses and args are not the same." );
-        }
-
-        try
-        {
-            @SuppressWarnings( "unchecked" )
-            T invoke = (T) objectClazz.getMethod( staticMethod, argClasses ).invoke( null, args );
-            return invoke;
-        }
-        catch ( IllegalAccessException | InvocationTargetException | NoSuchMethodException e )
-        {
-            throw new DependencyCollectorException( e.getMessage(), e );
-        }
-    }
-
-}
diff --git a/maven-3.0.x/src/main/java/org/apache/maven/shared/transfer/dependencies/collect/internal/Maven30DependencyCollector.java b/maven-3.0.x/src/main/java/org/apache/maven/shared/transfer/dependencies/collect/internal/Maven30DependencyCollector.java
index aa54ac1..56d3a86 100644
--- a/maven-3.0.x/src/main/java/org/apache/maven/shared/transfer/dependencies/collect/internal/Maven30DependencyCollector.java
+++ b/maven-3.0.x/src/main/java/org/apache/maven/shared/transfer/dependencies/collect/internal/Maven30DependencyCollector.java
@@ -19,19 +19,17 @@ package org.apache.maven.shared.transfer.dependencies.collect.internal;
  * under the License.
  */
 
-import java.util.ArrayList;
-import java.util.List;
-
 import org.apache.maven.RepositoryUtils;
 import org.apache.maven.artifact.handler.ArtifactHandler;
 import org.apache.maven.artifact.handler.manager.ArtifactHandlerManager;
 import org.apache.maven.model.Model;
+import org.apache.maven.project.ProjectBuildingRequest;
 import org.apache.maven.shared.transfer.dependencies.DependableCoordinate;
 import org.apache.maven.shared.transfer.dependencies.collect.CollectorResult;
-import org.apache.maven.shared.transfer.dependencies.collect.DependencyCollector;
 import org.apache.maven.shared.transfer.dependencies.collect.DependencyCollectorException;
+import org.apache.maven.shared.transfer.support.DelegateSupport;
+import org.apache.maven.shared.transfer.support.Selector;
 import org.sonatype.aether.RepositorySystem;
-import org.sonatype.aether.RepositorySystemSession;
 import org.sonatype.aether.artifact.Artifact;
 import org.sonatype.aether.artifact.ArtifactTypeRegistry;
 import org.sonatype.aether.collection.CollectRequest;
@@ -40,56 +38,61 @@ import org.sonatype.aether.graph.Dependency;
 import org.sonatype.aether.repository.RemoteRepository;
 import org.sonatype.aether.util.artifact.DefaultArtifact;
 
+import javax.inject.Inject;
+import javax.inject.Named;
+import javax.inject.Singleton;
+import java.util.ArrayList;
+import java.util.List;
+import java.util.Objects;
+
 /**
- * Maven 3.0 implementation of the {@link DependencyCollector}
  *
- * @author Robert Scholte
  */
-class Maven30DependencyCollector implements MavenDependencyCollector
+@Singleton
+@Named( Selector.MAVEN_3_0_X )
+public class Maven30DependencyCollector
+        extends DelegateSupport
+        implements DependencyCollectorDelegate
 {
     private final RepositorySystem repositorySystem;
 
     private final ArtifactHandlerManager artifactHandlerManager;
 
-    private final RepositorySystemSession session;
-
     private final List<RemoteRepository> aetherRepositories;
 
-    Maven30DependencyCollector( RepositorySystem repositorySystem, ArtifactHandlerManager artifactHandlerManager,
-            RepositorySystemSession session, List<RemoteRepository> aetherRepositories )
+    @Inject
+    public Maven30DependencyCollector( RepositorySystem repositorySystem,
+                                       ArtifactHandlerManager artifactHandlerManager,
+                                       List<RemoteRepository> aetherRepositories )
     {
-        super();
-        this.repositorySystem = repositorySystem;
-        this.artifactHandlerManager = artifactHandlerManager;
-        this.session = session;
-        this.aetherRepositories = aetherRepositories;
+        this.repositorySystem = Objects.requireNonNull( repositorySystem );
+        this.artifactHandlerManager = Objects.requireNonNull( artifactHandlerManager );
+        this.aetherRepositories = Objects.requireNonNull( aetherRepositories );
     }
 
     private static Dependency toDependency( org.apache.maven.model.Dependency mavenDependency,
-            ArtifactTypeRegistry typeRegistry ) throws DependencyCollectorException
+                                            ArtifactTypeRegistry typeRegistry )
     {
-        Class<?>[] argClasses = new Class<?>[] {org.apache.maven.model.Dependency.class, ArtifactTypeRegistry.class};
-
-        Object[] args = new Object[] {mavenDependency, typeRegistry};
-
-        return Invoker.invoke( RepositoryUtils.class, "toDependency", argClasses, args );
+        return RepositoryUtils.toDependency( mavenDependency, typeRegistry );
     }
 
     @Override
-    public CollectorResult collectDependencies( org.apache.maven.model.Dependency root )
+    public CollectorResult collectDependencies( ProjectBuildingRequest buildingRequest,
+                                                org.apache.maven.model.Dependency root )
             throws DependencyCollectorException
     {
-        ArtifactTypeRegistry typeRegistry = Invoker.invoke( RepositoryUtils.class, "newArtifactTypeRegistry",
-                ArtifactHandlerManager.class, artifactHandlerManager );
+        ArtifactTypeRegistry typeRegistry = RepositoryUtils.newArtifactTypeRegistry( artifactHandlerManager );
 
         CollectRequest request = new CollectRequest();
         request.setRoot( toDependency( root, typeRegistry ) );
 
-        return collectDependencies( request );
+        return collectDependencies( buildingRequest, request );
     }
 
     @Override
-    public CollectorResult collectDependencies( DependableCoordinate root ) throws DependencyCollectorException
+    public CollectorResult collectDependencies( ProjectBuildingRequest buildingRequest,
+                                                DependableCoordinate root )
+            throws DependencyCollectorException
     {
         ArtifactHandler artifactHandler = artifactHandlerManager.getArtifactHandler( root.getType() );
 
@@ -101,11 +104,13 @@ class Maven30DependencyCollector implements MavenDependencyCollector
         CollectRequest request = new CollectRequest();
         request.setRoot( new Dependency( aetherArtifact, null ) );
 
-        return collectDependencies( request );
+        return collectDependencies( buildingRequest, request );
     }
 
     @Override
-    public CollectorResult collectDependencies( Model root ) throws DependencyCollectorException
+    public CollectorResult collectDependencies( ProjectBuildingRequest buildingRequest,
+                                                Model root )
+            throws DependencyCollectorException
     {
         // Are there examples where packaging and type are NOT in sync
         ArtifactHandler artifactHandler = artifactHandlerManager.getArtifactHandler( root.getPackaging() );
@@ -118,8 +123,7 @@ class Maven30DependencyCollector implements MavenDependencyCollector
         CollectRequest request = new CollectRequest();
         request.setRoot( new Dependency( aetherArtifact, null ) );
 
-        ArtifactTypeRegistry typeRegistry = Invoker.invoke( RepositoryUtils.class, "newArtifactTypeRegistry",
-                ArtifactHandlerManager.class, artifactHandlerManager );
+        ArtifactTypeRegistry typeRegistry = RepositoryUtils.newArtifactTypeRegistry( artifactHandlerManager );
 
         List<Dependency> aetherDependencies = new ArrayList<>( root.getDependencies().size() );
         for ( org.apache.maven.model.Dependency mavenDependency : root.getDependencies() )
@@ -141,16 +145,19 @@ class Maven30DependencyCollector implements MavenDependencyCollector
             request.setManagedDependencies( aetherManagerDependencies );
         }
 
-        return collectDependencies( request );
+        return collectDependencies( buildingRequest, request );
     }
 
-    private CollectorResult collectDependencies( CollectRequest request ) throws DependencyCollectorException
+    private CollectorResult collectDependencies( ProjectBuildingRequest buildingRequest,
+                                                 CollectRequest request )
+            throws DependencyCollectorException
     {
         request.setRepositories( aetherRepositories );
 
         try
         {
-            return new Maven30CollectorResult( repositorySystem.collectDependencies( session, request ) );
+            return new Maven30CollectorResult( repositorySystem.collectDependencies(
+                    buildingRequest.getRepositorySession(), request ) );
         }
         catch ( DependencyCollectionException e )
         {
diff --git a/maven-3.0.x/src/main/java/org/apache/maven/shared/transfer/dependencies/collect/internal/Maven30DependencyNodeAdapter.java b/maven-3.0.x/src/main/java/org/apache/maven/shared/transfer/dependencies/collect/internal/Maven30DependencyNodeAdapter.java
index 87a10f8..31bc665 100644
--- a/maven-3.0.x/src/main/java/org/apache/maven/shared/transfer/dependencies/collect/internal/Maven30DependencyNodeAdapter.java
+++ b/maven-3.0.x/src/main/java/org/apache/maven/shared/transfer/dependencies/collect/internal/Maven30DependencyNodeAdapter.java
@@ -25,7 +25,6 @@ import java.util.List;
 import org.apache.maven.RepositoryUtils;
 import org.apache.maven.artifact.Artifact;
 import org.apache.maven.artifact.repository.ArtifactRepository;
-import org.apache.maven.shared.transfer.dependencies.collect.DependencyCollectorException;
 import org.apache.maven.shared.transfer.graph.DependencyNode;
 import org.apache.maven.shared.transfer.graph.DependencyVisitor;
 import org.sonatype.aether.repository.RemoteRepository;
@@ -150,14 +149,6 @@ class Maven30DependencyNodeAdapter implements DependencyNode
 
     private Artifact getArtifact( org.sonatype.aether.artifact.Artifact aetherArtifact )
     {
-        try
-        {
-            return Invoker.invoke( RepositoryUtils.class, "toArtifact",
-                org.sonatype.aether.artifact.Artifact.class, aetherArtifact );
-        }
-        catch ( DependencyCollectorException e )
-        {
-            throw new RuntimeException( e );
-        }
+        return RepositoryUtils.toArtifact( aetherArtifact );
     }
 }
diff --git a/maven-3.0.x/src/main/java/org/apache/maven/shared/transfer/dependencies/collect/internal/Maven31ArtifactRepositoryAdapter.java b/maven-3.0.x/src/main/java/org/apache/maven/shared/transfer/dependencies/collect/internal/Maven31ArtifactRepositoryAdapter.java
deleted file mode 100644
index f450dfd..0000000
--- a/maven-3.0.x/src/main/java/org/apache/maven/shared/transfer/dependencies/collect/internal/Maven31ArtifactRepositoryAdapter.java
+++ /dev/null
@@ -1,266 +0,0 @@
-package org.apache.maven.shared.transfer.dependencies.collect.internal;
-
-/*
- * 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.
- */
-
-import java.util.List;
-
-import org.apache.maven.artifact.Artifact;
-import org.apache.maven.artifact.metadata.ArtifactMetadata;
-import org.apache.maven.artifact.repository.ArtifactRepository;
-import org.apache.maven.artifact.repository.ArtifactRepositoryPolicy;
-import org.apache.maven.artifact.repository.Authentication;
-import org.apache.maven.artifact.repository.layout.ArtifactRepositoryLayout;
-import org.apache.maven.repository.Proxy;
-import org.eclipse.aether.repository.RemoteRepository;
-import org.eclipse.aether.repository.RepositoryPolicy;
-
-/**
- * ArtifactRepository wrapper around {@link RemoteRepository}
- * 
- * @author Robert Scholte
- *
- */
-class Maven31ArtifactRepositoryAdapter implements ArtifactRepository
-{
-    
-    private RemoteRepository remoteRepository;
-
-    /**
-     * @param remoteRepository {@link RemoteRepository}
-     */
-    Maven31ArtifactRepositoryAdapter( RemoteRepository remoteRepository )
-    {
-        this.remoteRepository = remoteRepository;
-    }
-
-    @Override
-    public String pathOf( Artifact artifact )
-    {
-        throw new UnsupportedOperationException();
-    }
-
-    @Override
-    public String pathOfRemoteRepositoryMetadata( ArtifactMetadata artifactMetadata )
-    {
-        throw new UnsupportedOperationException();
-    }
-
-    @Override
-    public String pathOfLocalRepositoryMetadata( ArtifactMetadata metadata, ArtifactRepository repository )
-    {
-        throw new UnsupportedOperationException();
-    }
-
-    @Override
-    public String getUrl()
-    {
-        return remoteRepository.getUrl();
-    }
-
-    @Override
-    public void setUrl( String url )
-    {
-        throw new UnsupportedOperationException();
-    }
-
-    @Override
-    public String getBasedir()
-    {
-        throw new UnsupportedOperationException();
-    }
-
-    @Override
-    public String getProtocol()
-    {
-        throw new UnsupportedOperationException();
-    }
-
-    @Override
-    public String getId()
-    {
-        return remoteRepository.getId();
-    }
-
-    @Override
-    public void setId( String id )
-    {
-        throw new UnsupportedOperationException();
-    }
-
-    @Override
-    public ArtifactRepositoryPolicy getSnapshots()
-    {
-        throw new UnsupportedOperationException();
-    }
-
-    @Override
-    public void setSnapshotUpdatePolicy( ArtifactRepositoryPolicy policy )
-    {
-        throw new UnsupportedOperationException();
-    }
-
-    @Override
-    public ArtifactRepositoryPolicy getReleases()
-    {
-        throw new UnsupportedOperationException();
-    }
-
-    @Override
-    public void setReleaseUpdatePolicy( ArtifactRepositoryPolicy policy )
-    {
-        throw new UnsupportedOperationException();
-    }
-
-    @Override
-    public ArtifactRepositoryLayout getLayout()
-    {
-        throw new UnsupportedOperationException();
-    }
-
-    @Override
-    public void setLayout( ArtifactRepositoryLayout layout )
-    {
-        throw new UnsupportedOperationException();
-    }
-
-    @Override
-    public String getKey()
-    {
-        throw new UnsupportedOperationException();
-    }
-
-    @Override
-    public boolean isUniqueVersion()
-    {
-        throw new UnsupportedOperationException();
-    }
-
-    @Override
-    public boolean isBlacklisted()
-    {
-        throw new UnsupportedOperationException();
-    }
-
-    @Override
-    public void setBlacklisted( boolean blackListed )
-    {
-        throw new UnsupportedOperationException();
-    }
-
-    @Override
-    public Artifact find( Artifact artifact )
-    {
-        throw new UnsupportedOperationException();
-    }
-
-    @Override
-    public List<String> findVersions( Artifact artifact )
-    {
-        throw new UnsupportedOperationException();
-    }
-
-    @Override
-    public boolean isProjectAware()
-    {
-        throw new UnsupportedOperationException();
-    }
-
-    @Override
-    public void setAuthentication( Authentication authentication )
-    {
-        throw new UnsupportedOperationException();
-    }
-
-    @Override
-    public Authentication getAuthentication()
-    {
-        throw new UnsupportedOperationException();
-    }
-
-    @Override
-    public void setProxy( Proxy proxy )
-    {
-        throw new UnsupportedOperationException();
-    }
-
-    @Override
-    public Proxy getProxy()
-    {
-        throw new UnsupportedOperationException();
-    }
-
-    @Override
-    public String toString()
-    {
-        StringBuilder sb = new StringBuilder();
-
-        sb.append( "       id: " ).append( getId() ).append( "\n" );
-        sb.append( "      url: " ).append( getUrl() ).append( "\n" );
-        sb.append( "   layout: " ).append( "default" ).append( "\n" );
-
-        RepositoryPolicy snapshotPolicy = remoteRepository.getPolicy( true ); 
-        sb.append( "snapshots: [enabled => " ).append( snapshotPolicy.isEnabled() );
-        sb.append( ", update => " ).append( snapshotPolicy.getUpdatePolicy() ).append( "]\n" );
-
-        RepositoryPolicy releasePolicy = remoteRepository.getPolicy( false ); 
-        sb.append( " releases: [enabled => " ).append( releasePolicy.isEnabled() );
-        sb.append( ", update => " ).append( releasePolicy.getUpdatePolicy() ).append( "]\n" );
-
-        return sb.toString();
-    }
-    
-    
-    @Override
-    public int hashCode()
-    {
-        return remoteRepository.hashCode();
-    }
-
-    @Override
-    public boolean equals( Object obj )
-    {
-        if ( this == obj )
-        {
-            return true;
-        }
-        if ( obj == null )
-        {
-            return false;
-        }
-        if ( getClass() != obj.getClass() )
-        {
-            return false;
-        }
-        
-        Maven31ArtifactRepositoryAdapter other = (Maven31ArtifactRepositoryAdapter) obj;
-        if ( remoteRepository == null )
-        {
-            if ( other.remoteRepository != null )
-            {
-                return false;
-            }
-        }
-        else if ( !remoteRepository.equals( other.remoteRepository ) )
-        {
-            return false;
-        }
-        return true;
-    }
-}
diff --git a/maven-3.0.x/src/main/java/org/apache/maven/shared/transfer/dependencies/collect/internal/Maven31CollectorResult.java b/maven-3.0.x/src/main/java/org/apache/maven/shared/transfer/dependencies/collect/internal/Maven31CollectorResult.java
deleted file mode 100644
index c1a4e6f..0000000
--- a/maven-3.0.x/src/main/java/org/apache/maven/shared/transfer/dependencies/collect/internal/Maven31CollectorResult.java
+++ /dev/null
@@ -1,85 +0,0 @@
-package org.apache.maven.shared.transfer.dependencies.collect.internal;
-
-/*
- * 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.
- */
-
-import java.util.ArrayList;
-import java.util.HashSet;
-import java.util.List;
-import java.util.Set;
-
-import org.apache.maven.artifact.repository.ArtifactRepository;
-import org.apache.maven.shared.transfer.dependencies.collect.CollectorResult;
-import org.eclipse.aether.collection.CollectResult;
-import org.eclipse.aether.graph.DependencyNode;
-import org.eclipse.aether.graph.DependencyVisitor;
-import org.eclipse.aether.repository.RemoteRepository;
-
-/**
- * CollectorResult wrapper around {@link CollectResult}
- * 
- * @author Robert Scholte
- *
- */
-class Maven31CollectorResult implements CollectorResult
-{
-    private final CollectResult collectResult;
-    
-    /**
-     * @param collectResult {@link CollectorResult}
-     */
-    Maven31CollectorResult( CollectResult collectResult )
-    {
-        this.collectResult = collectResult;
-    }
-
-    @Override
-    public List<ArtifactRepository> getRemoteRepositories()
-    {
-        final Set<RemoteRepository> aetherRepositories = new HashSet<>();
-        
-        DependencyVisitor visitor = new DependencyVisitor()
-        {
-            @Override
-            public boolean visitEnter( DependencyNode node )
-            {
-                aetherRepositories.addAll( node.getRepositories() );
-                return true;
-            }
-            
-            @Override
-            public boolean visitLeave( DependencyNode node )
-            {
-                return true;
-            }
-        };
-        
-        collectResult.getRoot().accept( visitor );
-        
-        List<ArtifactRepository> mavenRepositories = new ArrayList<>( aetherRepositories.size() );
-        
-        for ( RemoteRepository aetherRepository : aetherRepositories )
-        {
-            mavenRepositories.add( new Maven31ArtifactRepositoryAdapter( aetherRepository ) );
-        }
-        
-        return mavenRepositories;
-    }
-
-}
diff --git a/maven-3.0.x/src/main/java/org/apache/maven/shared/transfer/dependencies/collect/internal/Maven31DependencyCollector.java b/maven-3.0.x/src/main/java/org/apache/maven/shared/transfer/dependencies/collect/internal/Maven31DependencyCollector.java
deleted file mode 100644
index 1ca1920..0000000
--- a/maven-3.0.x/src/main/java/org/apache/maven/shared/transfer/dependencies/collect/internal/Maven31DependencyCollector.java
+++ /dev/null
@@ -1,160 +0,0 @@
-package org.apache.maven.shared.transfer.dependencies.collect.internal;
-
-/*
- * 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.
- */
-
-import java.util.ArrayList;
-import java.util.List;
-
-import org.apache.maven.RepositoryUtils;
-import org.apache.maven.artifact.handler.ArtifactHandler;
-import org.apache.maven.artifact.handler.manager.ArtifactHandlerManager;
-import org.apache.maven.model.Model;
-import org.apache.maven.shared.transfer.dependencies.DependableCoordinate;
-import org.apache.maven.shared.transfer.dependencies.collect.CollectorResult;
-import org.apache.maven.shared.transfer.dependencies.collect.DependencyCollector;
-import org.apache.maven.shared.transfer.dependencies.collect.DependencyCollectorException;
-import org.eclipse.aether.RepositorySystem;
-import org.eclipse.aether.RepositorySystemSession;
-import org.eclipse.aether.artifact.Artifact;
-import org.eclipse.aether.artifact.ArtifactTypeRegistry;
-import org.eclipse.aether.artifact.DefaultArtifact;
-import org.eclipse.aether.collection.CollectRequest;
-import org.eclipse.aether.collection.DependencyCollectionException;
-import org.eclipse.aether.graph.Dependency;
-import org.eclipse.aether.repository.RemoteRepository;
-
-/**
- * Maven 3.1+ implementation of the {@link DependencyCollector}
- *
- * @author Robert Scholte
- */
-class Maven31DependencyCollector implements MavenDependencyCollector
-{
-    private final RepositorySystem repositorySystem;
-
-    private final ArtifactHandlerManager artifactHandlerManager;
-
-    private final RepositorySystemSession session;
-
-    private final List<RemoteRepository> aetherRepositories;
-
-    Maven31DependencyCollector( RepositorySystem repositorySystem, ArtifactHandlerManager artifactHandlerManager,
-            RepositorySystemSession session, List<RemoteRepository> aetherRepositories )
-    {
-        super();
-        this.repositorySystem = repositorySystem;
-        this.artifactHandlerManager = artifactHandlerManager;
-        this.session = session;
-        this.aetherRepositories = aetherRepositories;
-    }
-
-    private static Dependency toDependency( org.apache.maven.model.Dependency mavenDependency,
-            ArtifactTypeRegistry typeRegistry ) throws DependencyCollectorException
-    {
-        Class<?>[] argClasses = new Class<?>[] {org.apache.maven.model.Dependency.class, ArtifactTypeRegistry.class};
-
-        Object[] args = new Object[] {mavenDependency, typeRegistry};
-
-        return Invoker.invoke( RepositoryUtils.class, "toDependency", argClasses, args );
-    }
-
-    @Override
-    public CollectorResult collectDependencies( org.apache.maven.model.Dependency root )
-            throws DependencyCollectorException
-    {
-        ArtifactTypeRegistry typeRegistry = Invoker.invoke( RepositoryUtils.class, "newArtifactTypeRegistry",
-                ArtifactHandlerManager.class, artifactHandlerManager );
-
-        CollectRequest request = new CollectRequest();
-        request.setRoot( toDependency( root, typeRegistry ) );
-
-        return collectDependencies( request );
-    }
-
-    @Override
-    public CollectorResult collectDependencies( DependableCoordinate root ) throws DependencyCollectorException
-    {
-        ArtifactHandler artifactHandler = artifactHandlerManager.getArtifactHandler( root.getType() );
-
-        String extension = artifactHandler != null ? artifactHandler.getExtension() : null;
-
-        Artifact aetherArtifact = new DefaultArtifact( root.getGroupId(), root.getArtifactId(), root.getClassifier(),
-                extension, root.getVersion() );
-
-        CollectRequest request = new CollectRequest();
-        request.setRoot( new Dependency( aetherArtifact, null ) );
-
-        return collectDependencies( request );
-    }
-
-    @Override
-    public CollectorResult collectDependencies( Model root ) throws DependencyCollectorException
-    {
-        // Are there examples where packaging and type are NOT in sync
-        ArtifactHandler artifactHandler = artifactHandlerManager.getArtifactHandler( root.getPackaging() );
-
-        String extension = artifactHandler != null ? artifactHandler.getExtension() : null;
-
-        Artifact aetherArtifact = new DefaultArtifact( root.getGroupId(), root.getArtifactId(), extension,
-                root.getVersion() );
-
-        CollectRequest request = new CollectRequest();
-        request.setRoot( new Dependency( aetherArtifact, null ) );
-
-        ArtifactTypeRegistry typeRegistry = Invoker.invoke( RepositoryUtils.class, "newArtifactTypeRegistry",
-                ArtifactHandlerManager.class, artifactHandlerManager );
-
-        List<Dependency> aetherDependencies = new ArrayList<>( root.getDependencies().size() );
-        for ( org.apache.maven.model.Dependency mavenDependency : root.getDependencies() )
-        {
-            aetherDependencies.add( toDependency( mavenDependency, typeRegistry ) );
-        }
-        request.setDependencies( aetherDependencies );
-
-        if ( root.getDependencyManagement() != null )
-        {
-            List<Dependency> aetherManagerDependencies = new ArrayList<>(
-                    root.getDependencyManagement().getDependencies().size() );
-
-            for ( org.apache.maven.model.Dependency mavenDependency : root.getDependencyManagement().getDependencies() )
-            {
-                aetherManagerDependencies.add( toDependency( mavenDependency, typeRegistry ) );
-            }
-
-            request.setManagedDependencies( aetherManagerDependencies );
-        }
-
-        return collectDependencies( request );
-    }
-
-    private CollectorResult collectDependencies( CollectRequest request ) throws DependencyCollectorException
-    {
-        request.setRepositories( aetherRepositories );
-
-        try
-        {
-            return new Maven31CollectorResult( repositorySystem.collectDependencies( session, request ) );
-        }
-        catch ( DependencyCollectionException e )
-        {
-            throw new DependencyCollectorException( e.getMessage(), e );
-        }
-    }
-}
diff --git a/maven-3.0.x/src/main/java/org/apache/maven/shared/transfer/dependencies/collect/internal/Maven31DependencyNodeAdapter.java b/maven-3.0.x/src/main/java/org/apache/maven/shared/transfer/dependencies/collect/internal/Maven31DependencyNodeAdapter.java
deleted file mode 100644
index f0cccc4..0000000
--- a/maven-3.0.x/src/main/java/org/apache/maven/shared/transfer/dependencies/collect/internal/Maven31DependencyNodeAdapter.java
+++ /dev/null
@@ -1,163 +0,0 @@
-package org.apache.maven.shared.transfer.dependencies.collect.internal;
-
-/*
- * 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.
- */
-
-import java.util.ArrayList;
-import java.util.List;
-
-import org.apache.maven.RepositoryUtils;
-import org.apache.maven.artifact.Artifact;
-import org.apache.maven.artifact.repository.ArtifactRepository;
-import org.apache.maven.shared.transfer.dependencies.collect.DependencyCollectorException;
-import org.apache.maven.shared.transfer.graph.DependencyNode;
-import org.apache.maven.shared.transfer.graph.DependencyVisitor;
-import org.eclipse.aether.repository.RemoteRepository;
-
-/**
- * DependencyCollectorNode wrapper around {@link org.eclipse.aether.graph.DependencyNode}
- *
- * @author Pim Moerenhout
- *
- */
-class Maven31DependencyNodeAdapter implements DependencyNode
-{
-
-    private org.eclipse.aether.graph.DependencyNode dependencyNode;
-
-    /**
-     * @param dependencyNode {@link org.eclipse.aether.graph.DependencyNode}
-     */
-    Maven31DependencyNodeAdapter( org.eclipse.aether.graph.DependencyNode dependencyNode )
-    {
-        this.dependencyNode = dependencyNode;
-    }
-
-    @Override
-    public Artifact getArtifact()
-    {
-        return getArtifact( dependencyNode.getArtifact() );
-    }
-
-    @Override
-    public List<DependencyNode> getChildren()
-    {
-        List<org.eclipse.aether.graph.DependencyNode> aetherChildren = dependencyNode.getChildren();
-        List<DependencyNode> children = new ArrayList<>( aetherChildren.size() );
-        for ( org.eclipse.aether.graph.DependencyNode aetherChild : aetherChildren )
-        {
-            children.add( new Maven31DependencyNodeAdapter( aetherChild ) );
-        }
-        return children;
-    }
-
-    @Override
-    public List<ArtifactRepository> getRemoteRepositories()
-    {
-        List<RemoteRepository> aetherRepositories = dependencyNode.getRepositories();
-        List<ArtifactRepository> mavenRepositories = new ArrayList<>( aetherRepositories.size() );
-
-        for ( RemoteRepository aetherRepository : aetherRepositories )
-        {
-            mavenRepositories.add( new Maven31ArtifactRepositoryAdapter( aetherRepository ) );
-        }
-
-        return mavenRepositories;
-    }
-
-    @Override
-    public String getScope()
-    {
-        return dependencyNode.getDependency().getScope();
-    }
-
-    @Override
-    public Boolean getOptional()
-    {
-        return dependencyNode.getDependency().getOptional();
-    }
-
-    @Override
-    public boolean accept( DependencyVisitor visitor )
-    {
-        if ( visitor.visitEnter( this ) )
-        {
-            for ( org.eclipse.aether.graph.DependencyNode child : dependencyNode.getChildren() )
-            {
-                DependencyNode node = new Maven31DependencyNodeAdapter( child );
-                if ( !node.accept( visitor ) )
-                {
-                    break;
-                }
-            }
-        }
-
-        return visitor.visitLeave( this );
-    }
-
-    @Override
-    public int hashCode()
-    {
-        return dependencyNode.hashCode();
-    }
-
-    @Override
-    public boolean equals( Object obj )
-    {
-        if ( this == obj )
-        {
-            return true;
-        }
-        if ( obj == null )
-        {
-            return false;
-        }
-        if ( getClass() != obj.getClass() )
-        {
-            return false;
-        }
-
-        Maven31DependencyNodeAdapter other = (Maven31DependencyNodeAdapter) obj;
-        if ( dependencyNode == null )
-        {
-            if ( other.dependencyNode != null )
-            {
-                return false;
-            }
-        }
-        else if ( !dependencyNode.equals( other.dependencyNode ) )
-        {
-            return false;
-        }
-        return true;
-    }
-
-    private Artifact getArtifact( org.eclipse.aether.artifact.Artifact aetherArtifact )
-    {
-        try
-        {
-            return Invoker.invoke( RepositoryUtils.class, "toArtifact",
-                org.eclipse.aether.artifact.Artifact.class, aetherArtifact );
-        }
-        catch ( DependencyCollectorException e )
-        {
-            throw new RuntimeException( e );
-        }
-    }
-}
diff --git a/maven-3.0.x/src/main/java/org/apache/maven/shared/transfer/dependencies/collect/internal/MavenDependencyCollector.java b/maven-3.0.x/src/main/java/org/apache/maven/shared/transfer/dependencies/collect/internal/MavenDependencyCollector.java
deleted file mode 100644
index ce647f5..0000000
--- a/maven-3.0.x/src/main/java/org/apache/maven/shared/transfer/dependencies/collect/internal/MavenDependencyCollector.java
+++ /dev/null
@@ -1,44 +0,0 @@
-package org.apache.maven.shared.transfer.dependencies.collect.internal;
-
-/*
- * 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.
- */
-
-import org.apache.maven.model.Dependency;
-import org.apache.maven.model.Model;
-import org.apache.maven.shared.transfer.dependencies.DependableCoordinate;
-import org.apache.maven.shared.transfer.dependencies.collect.CollectorResult;
-import org.apache.maven.shared.transfer.dependencies.collect.DependencyCollectorException;
-
-/**
- * 
- * @author Robert Scholte
- */
-interface MavenDependencyCollector
-{
-
-    CollectorResult collectDependencies( Dependency root )
-        throws DependencyCollectorException;
-
-    CollectorResult collectDependencies( DependableCoordinate root )
-        throws DependencyCollectorException;
-
-    CollectorResult collectDependencies( Model root )
-        throws DependencyCollectorException;
-
-}
diff --git a/maven-3.0.x/src/main/java/org/apache/maven/shared/transfer/dependencies/resolve/DependencyResolver.java b/maven-3.0.x/src/main/java/org/apache/maven/shared/transfer/dependencies/resolve/DependencyResolver.java
deleted file mode 100644
index 041a613..0000000
--- a/maven-3.0.x/src/main/java/org/apache/maven/shared/transfer/dependencies/resolve/DependencyResolver.java
+++ /dev/null
@@ -1,81 +0,0 @@
-package org.apache.maven.shared.transfer.dependencies.resolve;
-
-/*
- * 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.
- */
-
-import java.util.Collection;
-
-import org.apache.maven.model.Dependency;
-import org.apache.maven.model.Model;
-import org.apache.maven.project.ProjectBuildingRequest;
-import org.apache.maven.shared.artifact.filter.resolve.TransformableFilter;
-import org.apache.maven.shared.transfer.artifact.resolve.ArtifactResult;
-import org.apache.maven.shared.transfer.dependencies.DependableCoordinate;
-
-/**
- * @author Robert Scholte
- */
-public interface DependencyResolver
-{
-    /**
-     * This will resolve the dependencies of the coordinate, not resolving the the artifact of the coordinate itself. If
-     * the coordinate needs to be resolved too, use
-     * {@link #resolveDependencies(ProjectBuildingRequest, Collection, Collection, TransformableFilter)} passing
-     * {@code Collections.singletonList(coordinate)}
-     * 
-     * @param buildingRequest {@link ProjectBuildingRequest}
-     * @param coordinate {@link DependableCoordinate}
-     * @param filter {@link TransformableFilter} (can be {@code null}).
-     * @return the resolved dependencies.
-     * @throws DependencyResolverException in case of an error.
-     */
-    Iterable<ArtifactResult> resolveDependencies( ProjectBuildingRequest buildingRequest,
-                                                  DependableCoordinate coordinate, TransformableFilter filter )
-        throws DependencyResolverException;
-
-    /**
-     * This will resolve the dependencies of the coordinate, not resolving the the artifact of the coordinate itself. If
-     * the coordinate needs to be resolved too, use
-     * {@link #resolveDependencies(ProjectBuildingRequest, Collection, Collection, TransformableFilter)} passing
-     * {@code Collections.singletonList(coordinate)}
-     * 
-     * @param buildingRequest {@link ProjectBuildingRequest}
-     * @param model {@link Model}
-     * @param filter {@link TransformableFilter} (can be {@code null}).
-     * @return the resolved dependencies.
-     * @throws DependencyResolverException in case of an error.
-     */
-    Iterable<ArtifactResult> resolveDependencies( ProjectBuildingRequest buildingRequest, Model model,
-                                                  TransformableFilter filter )
-        throws DependencyResolverException;
-
-    /**
-     * @param buildingRequest the project building request, never {@code null}
-     * @param dependencies the dependencies to resolve, can be {@code null}
-     * @param managedDependencies managed dependencies, can be {@code null}
-     * @param filter a filter, can be {@code null}
-     * @return the resolved dependencies.
-     * @throws DependencyResolverException in case of an error.
-     */
-    Iterable<ArtifactResult> resolveDependencies( ProjectBuildingRequest buildingRequest,
-                                                  Collection<Dependency> dependencies,
-                                                  Collection<Dependency> managedDependencies,
-                                                  TransformableFilter filter )
-        throws DependencyResolverException;
-}
diff --git a/maven-3.0.x/src/main/java/org/apache/maven/shared/transfer/dependencies/resolve/DependencyResolverException.java b/maven-3.0.x/src/main/java/org/apache/maven/shared/transfer/dependencies/resolve/DependencyResolverException.java
deleted file mode 100644
index d6ca1ac..0000000
--- a/maven-3.0.x/src/main/java/org/apache/maven/shared/transfer/dependencies/resolve/DependencyResolverException.java
+++ /dev/null
@@ -1,54 +0,0 @@
-package org.apache.maven.shared.transfer.dependencies.resolve;
-
-/*
- * 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.
- */
-
-/**
- * The Exception class in case a resolving does not work.
- */
-public class DependencyResolverException
-    extends Exception
-{
-    private static final long serialVersionUID = 5320065249974323888L;
-
-    /**
-     * @param cause The {@link Exception cause} of the problem.
-     */
-    protected DependencyResolverException( Exception cause )
-    {
-        super( cause );
-    }
-
-    /**
-     * @param message The message to give.
-     * @param e The {@link Exception}.
-     */
-    public DependencyResolverException( String message, Exception e )
-    {
-        super( message, e );
-    }
-
-    /**
-     * @return {@link DependencyResult}
-     */
-    public DependencyResult getResult()
-    {
-        return null;
-    }
-}
diff --git a/maven-3.0.x/src/main/java/org/apache/maven/shared/transfer/dependencies/resolve/DependencyResult.java b/maven-3.0.x/src/main/java/org/apache/maven/shared/transfer/dependencies/resolve/DependencyResult.java
deleted file mode 100644
index 7d76d2f..0000000
--- a/maven-3.0.x/src/main/java/org/apache/maven/shared/transfer/dependencies/resolve/DependencyResult.java
+++ /dev/null
@@ -1,37 +0,0 @@
-package org.apache.maven.shared.transfer.dependencies.resolve;
-
-/*
- * 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.
- */
-
-import java.util.List;
-
-/**
- * 
- * @author Robert Scholte
- *
- */
-public interface DependencyResult
-{
-    /**
-     * Gets the exceptions that occurred while building the dependency graph.
-     * 
-     * @return The list of exceptions {@link Exception}.
-     */
-    List<Exception> getCollectorExceptions();
-}
diff --git a/maven-3.0.x/src/main/java/org/apache/maven/shared/transfer/dependencies/resolve/internal/DefaultDependencyResolver.java b/maven-3.0.x/src/main/java/org/apache/maven/shared/transfer/dependencies/resolve/internal/DefaultDependencyResolver.java
deleted file mode 100644
index 28289a8..0000000
--- a/maven-3.0.x/src/main/java/org/apache/maven/shared/transfer/dependencies/resolve/internal/DefaultDependencyResolver.java
+++ /dev/null
@@ -1,190 +0,0 @@
-package org.apache.maven.shared.transfer.dependencies.resolve.internal;
-
-/*
- * 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.
- */
-
-import java.util.Collection;
-import java.util.List;
-
-import org.apache.maven.RepositoryUtils;
-import org.apache.maven.artifact.handler.manager.ArtifactHandlerManager;
-import org.apache.maven.model.Dependency;
-import org.apache.maven.model.Model;
-import org.apache.maven.project.ProjectBuildingRequest;
-import org.apache.maven.shared.artifact.filter.resolve.TransformableFilter;
-import org.apache.maven.shared.transfer.artifact.resolve.ArtifactResult;
-import org.apache.maven.shared.transfer.dependencies.DependableCoordinate;
-import org.apache.maven.shared.transfer.dependencies.resolve.DependencyResolver;
-import org.apache.maven.shared.transfer.dependencies.resolve.DependencyResolverException;
-import org.codehaus.plexus.PlexusConstants;
-import org.codehaus.plexus.PlexusContainer;
-import org.codehaus.plexus.component.annotations.Component;
-import org.codehaus.plexus.component.repository.exception.ComponentLookupException;
-import org.codehaus.plexus.context.Context;
-import org.codehaus.plexus.context.ContextException;
-import org.codehaus.plexus.personality.plexus.lifecycle.phase.Contextualizable;
-
-/**
- *
- */
-@Component( role = DependencyResolver.class, hint = "default" )
-class DefaultDependencyResolver implements DependencyResolver, Contextualizable
-{
-    private PlexusContainer container;
-
-    @Override
-    public Iterable<ArtifactResult> resolveDependencies( ProjectBuildingRequest buildingRequest,
-            Collection<Dependency> coordinates, Collection<Dependency> managedDependencies, TransformableFilter filter )
-            throws DependencyResolverException
-    {
-        validateBuildingRequest( buildingRequest );
-
-        try
-        {
-            return getMavenDependencyResolver( buildingRequest ).resolveDependencies( coordinates, managedDependencies,
-                    filter );
-        }
-        catch ( ComponentLookupException e )
-        {
-            throw new DependencyResolverException( e.getMessage(), e );
-        }
-    }
-
-    @Override
-    public Iterable<ArtifactResult> resolveDependencies( ProjectBuildingRequest buildingRequest,
-            DependableCoordinate coordinate, TransformableFilter filter ) throws DependencyResolverException
-    {
-        validateParameters( buildingRequest, coordinate );
-        try
-        {
-            return getMavenDependencyResolver( buildingRequest ).resolveDependencies( coordinate, filter );
-        }
-        catch ( ComponentLookupException e )
-        {
-            throw new DependencyResolverException( e.getMessage(), e );
-        }
-    }
-
-    @Override
-    public Iterable<ArtifactResult> resolveDependencies( ProjectBuildingRequest buildingRequest, Model model,
-            TransformableFilter filter ) throws DependencyResolverException
-    {
-        validateParameters( buildingRequest, model );
-        try
-        {
-            return getMavenDependencyResolver( buildingRequest ).resolveDependencies( model, filter );
-        }
-        catch ( ComponentLookupException e )
-        {
-            throw new DependencyResolverException( e.getMessage(), e );
-        }
-    }
-
-    /**
-     * @return true if the current Maven version is Maven 3.1.
-     */
-    private boolean isMaven31()
-    {
-        try
-        {
-            // Maven 3.1 specific
-            Thread.currentThread().getContextClassLoader().loadClass( "org.eclipse.aether.artifact.Artifact" );
-            return true;
-        }
-        catch ( ClassNotFoundException e )
-        {
-            return false;
-        }
-    }
-
-    /**
-     * Injects the Plexus content.
-     *
-     * @param context Plexus context to inject.
-     * @throws ContextException if the PlexusContainer could not be located.
-     */
-    public void contextualize( Context context ) throws ContextException
-    {
-        container = (PlexusContainer) context.get( PlexusConstants.PLEXUS_KEY );
-    }
-
-    private void validateParameters( ProjectBuildingRequest buildingRequest, DependableCoordinate coordinate )
-    {
-        validateBuildingRequest( buildingRequest );
-        if ( coordinate == null )
-        {
-            throw new IllegalArgumentException( "The parameter coordinate is not allowed to be null." );
-        }
-    }
-
-    private void validateParameters( ProjectBuildingRequest buildingRequest, Model model )
-    {
-        validateBuildingRequest( buildingRequest );
-        if ( model == null )
-        {
-            throw new IllegalArgumentException( "The parameter model is not allowed to be null." );
-        }
-
-    }
-
-    private MavenDependencyResolver getMavenDependencyResolver( ProjectBuildingRequest buildingRequest )
-            throws ComponentLookupException, DependencyResolverException
-    {
-        ArtifactHandlerManager artifactHandlerManager = container.lookup( ArtifactHandlerManager.class );
-
-        if ( isMaven31() )
-        {
-            org.eclipse.aether.RepositorySystem m31RepositorySystem = container.lookup(
-                    org.eclipse.aether.RepositorySystem.class );
-
-            org.eclipse.aether.RepositorySystemSession session = Invoker.invoke( buildingRequest,
-                    "getRepositorySession" );
-
-            List<org.eclipse.aether.repository.RemoteRepository> aetherRepositories = Invoker.invoke(
-                    RepositoryUtils.class, "toRepos", List.class, buildingRequest.getRemoteRepositories() );
-
-            return new Maven31DependencyResolver( m31RepositorySystem, artifactHandlerManager, session,
-                    aetherRepositories );
-        }
-        else
-        {
-            org.sonatype.aether.RepositorySystem m30RepositorySystem = container.lookup(
-                    org.sonatype.aether.RepositorySystem.class );
-
-            org.sonatype.aether.RepositorySystemSession session = Invoker.invoke( buildingRequest,
-                    "getRepositorySession" );
-
-            List<org.sonatype.aether.repository.RemoteRepository> aetherRepositories = Invoker.invoke(
-                    RepositoryUtils.class, "toRepos", List.class, buildingRequest.getRemoteRepositories() );
-
-            return new Maven30DependencyResolver( m30RepositorySystem, artifactHandlerManager, session,
-                    aetherRepositories );
-
-        }
-    }
-
-    private void validateBuildingRequest( ProjectBuildingRequest buildingRequest )
-    {
-        if ( buildingRequest == null )
-        {
-            throw new IllegalArgumentException( "The parameter buildingRequest is not allowed to be null." );
-        }
-    }
-
-}
diff --git a/maven-3.0.x/src/main/java/org/apache/maven/shared/transfer/dependencies/resolve/internal/Invoker.java b/maven-3.0.x/src/main/java/org/apache/maven/shared/transfer/dependencies/resolve/internal/Invoker.java
deleted file mode 100644
index e4dfb82..0000000
--- a/maven-3.0.x/src/main/java/org/apache/maven/shared/transfer/dependencies/resolve/internal/Invoker.java
+++ /dev/null
@@ -1,95 +0,0 @@
-package org.apache.maven.shared.transfer.dependencies.resolve.internal;
-
-/*
- * 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.
- */
-
-import java.lang.reflect.InvocationTargetException;
-
-import org.apache.maven.shared.transfer.dependencies.resolve.DependencyResolverException;
-
-/**
- * Invokes method on objects using reflection.
- */
-final class Invoker
-{
-    private Invoker()
-    {
-        // do not instantiate
-    }
-
-    public static <T> T invoke( Object object, String method )
-        throws DependencyResolverException
-    {
-        try
-        {
-            @SuppressWarnings( "unchecked" )
-            T invoke = (T) object.getClass().getMethod( method ).invoke( object );
-            return invoke;
-        }
-        catch ( IllegalAccessException | InvocationTargetException | NoSuchMethodException e )
-        {
-            throw new DependencyResolverException( e.getMessage(), e );
-        }
-    }
-
-    public static <T> T invoke( Class<?> objectClazz, String staticMethod, Class<?> argClazz, Object arg )
-        throws DependencyResolverException
-    {
-        try
-        {
-            @SuppressWarnings( "unchecked" )
-            T invoke = (T) objectClazz.getMethod( staticMethod, argClazz ).invoke( null, arg );
-            return invoke;
-        }
-        catch ( IllegalAccessException | InvocationTargetException | NoSuchMethodException e )
-        {
-            throw new DependencyResolverException( e.getMessage(), e );
-        }
-    }
-
-    /**
-     * <strong>Note:</strong> Ensure that argClasses and args have the same number of elements
-     * 
-     * @param objectClazz the class of the static method
-     * @param staticMethod the static method to call
-     * @param argClasses the classes of the argument, used to select the right static method
-     * @param args the actual arguments to be passed
-     * @return the result of the method invocation
-     * @throws DependencyResolverException if any checked exception occurs
-     */
-    public static <T> T invoke( Class<?> objectClazz, String staticMethod, Class<?>[] argClasses, Object[] args )
-        throws DependencyResolverException
-    {
-        if ( args.length != argClasses.length )
-        {
-            throw new IllegalArgumentException( "The number of elements in argClasses and args are not the same." );
-        }
-
-        try
-        {
-            @SuppressWarnings( "unchecked" )
-            T invoke = (T) objectClazz.getMethod( staticMethod, argClasses ).invoke( null, args );
-            return invoke;
-        }
-        catch ( IllegalAccessException | InvocationTargetException | NoSuchMethodException e )
-        {
-            throw new DependencyResolverException( e.getMessage(), e );
-        }
-    }
-}
diff --git a/maven-3.0.x/src/main/java/org/apache/maven/shared/transfer/dependencies/resolve/internal/Maven30ArtifactResult.java b/maven-3.0.x/src/main/java/org/apache/maven/shared/transfer/dependencies/resolve/internal/Maven30ArtifactResult.java
index b0aafdf..2d33053 100644
--- a/maven-3.0.x/src/main/java/org/apache/maven/shared/transfer/dependencies/resolve/internal/Maven30ArtifactResult.java
+++ b/maven-3.0.x/src/main/java/org/apache/maven/shared/transfer/dependencies/resolve/internal/Maven30ArtifactResult.java
@@ -20,8 +20,6 @@ package org.apache.maven.shared.transfer.dependencies.resolve.internal;
  */
 
 import org.apache.maven.RepositoryUtils;
-import org.apache.maven.shared.transfer.dependencies.resolve.DependencyResolverException;
-import org.sonatype.aether.artifact.Artifact;
 import org.sonatype.aether.resolution.ArtifactResult;
 
 /**
@@ -45,13 +43,6 @@ class Maven30ArtifactResult implements org.apache.maven.shared.transfer.artifact
     @Override
     public org.apache.maven.artifact.Artifact getArtifact()
     {
-        try
-        {
-            return Invoker.invoke( RepositoryUtils.class, "toArtifact", Artifact.class, artifactResult.getArtifact() );
-        }
-        catch ( DependencyResolverException e )
-        {
-            throw new RuntimeException( e );
-        }
+        return RepositoryUtils.toArtifact( artifactResult.getArtifact() );
     }
 }
diff --git a/maven-3.0.x/src/main/java/org/apache/maven/shared/transfer/dependencies/resolve/internal/Maven30DependencyResolver.java b/maven-3.0.x/src/main/java/org/apache/maven/shared/transfer/dependencies/resolve/internal/Maven30DependencyResolver.java
index f6730ae..06962fb 100644
--- a/maven-3.0.x/src/main/java/org/apache/maven/shared/transfer/dependencies/resolve/internal/Maven30DependencyResolver.java
+++ b/maven-3.0.x/src/main/java/org/apache/maven/shared/transfer/dependencies/resolve/internal/Maven30DependencyResolver.java
@@ -19,23 +19,19 @@ package org.apache.maven.shared.transfer.dependencies.resolve.internal;
  * under the License.
  */
 
-import java.util.ArrayList;
-import java.util.Collection;
-import java.util.Collections;
-import java.util.Iterator;
-import java.util.List;
-
 import org.apache.maven.RepositoryUtils;
 import org.apache.maven.artifact.handler.ArtifactHandler;
 import org.apache.maven.artifact.handler.manager.ArtifactHandlerManager;
 import org.apache.maven.model.DependencyManagement;
 import org.apache.maven.model.Model;
+import org.apache.maven.project.ProjectBuildingRequest;
 import org.apache.maven.shared.artifact.filter.resolve.TransformableFilter;
 import org.apache.maven.shared.artifact.filter.resolve.transform.SonatypeAetherFilterTransformer;
 import org.apache.maven.shared.transfer.dependencies.DependableCoordinate;
 import org.apache.maven.shared.transfer.dependencies.resolve.DependencyResolverException;
+import org.apache.maven.shared.transfer.support.DelegateSupport;
+import org.apache.maven.shared.transfer.support.Selector;
 import org.sonatype.aether.RepositorySystem;
-import org.sonatype.aether.RepositorySystemSession;
 import org.sonatype.aether.artifact.Artifact;
 import org.sonatype.aether.artifact.ArtifactType;
 import org.sonatype.aether.artifact.ArtifactTypeRegistry;
@@ -49,33 +45,46 @@ import org.sonatype.aether.resolution.ArtifactResult;
 import org.sonatype.aether.util.artifact.DefaultArtifact;
 import org.sonatype.aether.util.artifact.DefaultArtifactType;
 
+import javax.inject.Inject;
+import javax.inject.Named;
+import javax.inject.Singleton;
+import java.util.ArrayList;
+import java.util.Collection;
+import java.util.Collections;
+import java.util.Iterator;
+import java.util.List;
+import java.util.Objects;
+
 /**
  *
  */
-class Maven30DependencyResolver implements MavenDependencyResolver
+@Singleton
+@Named( Selector.MAVEN_3_0_X )
+public class Maven30DependencyResolver
+        extends DelegateSupport
+        implements DependencyResolverDelegate
 {
-    private static final Class<?>[] ARG_CLASSES = new Class<?>[] {org.apache.maven.model.Dependency.class,
-            ArtifactTypeRegistry.class};
     private final RepositorySystem repositorySystem;
+
     private final ArtifactHandlerManager artifactHandlerManager;
-    private final RepositorySystemSession session;
+
     private final List<RemoteRepository> aetherRepositories;
 
-    Maven30DependencyResolver( RepositorySystem repositorySystem, ArtifactHandlerManager artifactHandlerManager,
-            RepositorySystemSession session, List<RemoteRepository> aetherRepositories )
+    @Inject
+    public Maven30DependencyResolver( RepositorySystem repositorySystem,
+                                      ArtifactHandlerManager artifactHandlerManager,
+                                      List<RemoteRepository> aetherRepositories )
     {
-        super();
-        this.repositorySystem = repositorySystem;
-        this.artifactHandlerManager = artifactHandlerManager;
-        this.session = session;
-        this.aetherRepositories = aetherRepositories;
+        this.repositorySystem = Objects.requireNonNull( repositorySystem );
+        this.artifactHandlerManager = Objects.requireNonNull( artifactHandlerManager );
+        this.aetherRepositories = Objects.requireNonNull( aetherRepositories );
     }
 
     /**
      * Based on RepositoryUtils#toDependency(org.apache.maven.model.Dependency, ArtifactTypeRegistry)
      *
      * @param coordinate  {@link DependableCoordinate}
-     * @param stereotypes {@link org.eclipse.aether.artifact.ArtifactTypeRegistry
+     * @param stereotypes {@link org.sonatype.aether.artifact.ArtifactTypeRegistry
      * @return as Aether Dependency
      */
     private static Dependency toDependency( DependableCoordinate coordinate, ArtifactTypeRegistry stereotypes )
@@ -93,19 +102,16 @@ class Maven30DependencyResolver implements MavenDependencyResolver
     }
 
     private static Dependency toDependency( org.apache.maven.model.Dependency mavenDependency,
-            ArtifactTypeRegistry typeRegistry ) throws DependencyResolverException
+                                            ArtifactTypeRegistry typeRegistry )
     {
-        Object[] args = new Object[] {mavenDependency, typeRegistry};
-
-        return Invoker.invoke( RepositoryUtils.class, "toDependency", ARG_CLASSES, args );
+        return RepositoryUtils.toDependency( mavenDependency, typeRegistry );
     }
 
     @Override
-    // CHECKSTYLE_OFF: LineLength
     public Iterable<org.apache.maven.shared.transfer.artifact.resolve.ArtifactResult> resolveDependencies(
-            DependableCoordinate coordinate, TransformableFilter dependencyFilter )
-        // CHECKSTYLE_ON: LineLength
-            throws DependencyResolverException
+            ProjectBuildingRequest buildingRequest,
+            DependableCoordinate coordinate,
+            TransformableFilter dependencyFilter ) throws DependencyResolverException
     {
         ArtifactTypeRegistry typeRegistry = createTypeRegistry();
 
@@ -113,21 +119,19 @@ class Maven30DependencyResolver implements MavenDependencyResolver
 
         CollectRequest request = new CollectRequest( aetherRoot, aetherRepositories );
 
-        return resolveDependencies( dependencyFilter, request );
+        return resolveDependencies( buildingRequest, dependencyFilter, request );
     }
 
-    private ArtifactTypeRegistry createTypeRegistry() throws DependencyResolverException
+    private ArtifactTypeRegistry createTypeRegistry()
     {
-        return Invoker.invoke( RepositoryUtils.class, "newArtifactTypeRegistry", ArtifactHandlerManager.class,
-                artifactHandlerManager );
+        return RepositoryUtils.newArtifactTypeRegistry( artifactHandlerManager );
     }
 
     @Override
-    // CHECKSTYLE_OFF: LineLength
-    public Iterable<org.apache.maven.shared.transfer.artifact.resolve.ArtifactResult> resolveDependencies( Model model,
-            TransformableFilter dependencyFilter )
-        // CHECKSTYLE_ON: LineLength
-            throws DependencyResolverException
+    public Iterable<org.apache.maven.shared.transfer.artifact.resolve.ArtifactResult> resolveDependencies(
+            ProjectBuildingRequest buildingRequest,
+            Model model,
+            TransformableFilter dependencyFilter ) throws DependencyResolverException
     {
         // Are there examples where packaging and type are NOT in sync
         ArtifactHandler artifactHandler = artifactHandlerManager.getArtifactHandler( model.getPackaging() );
@@ -149,7 +153,7 @@ class Maven30DependencyResolver implements MavenDependencyResolver
             request.setManagedDependencies( resolveDependencies( mavenDependencyManagement.getDependencies() ) );
         }
 
-        return resolveDependencies( dependencyFilter, request );
+        return resolveDependencies( buildingRequest, dependencyFilter, request );
     }
 
     /**
@@ -157,10 +161,7 @@ class Maven30DependencyResolver implements MavenDependencyResolver
      * @return List of resolved dependencies.
      * @throws DependencyResolverException in case of a failure of the typeRegistry error.
      */
-    // CHECKSTYLE_OFF: LineLength
     private List<Dependency> resolveDependencies( Collection<org.apache.maven.model.Dependency> mavenDependencies )
-            throws DependencyResolverException
-    // CHECKSTYLE_ON: LineLength
     {
         if ( mavenDependencies == null )
         {
@@ -180,14 +181,12 @@ class Maven30DependencyResolver implements MavenDependencyResolver
     }
 
     @Override
-    // CHECKSTYLE_OFF: LineLength
     public Iterable<org.apache.maven.shared.transfer.artifact.resolve.ArtifactResult> resolveDependencies(
+            ProjectBuildingRequest buildingRequest,
             Collection<org.apache.maven.model.Dependency> mavenDependencies,
-            Collection<org.apache.maven.model.Dependency> managedMavenDependencies, TransformableFilter filter )
-        // CHECKSTYLE_ON: LineLength
-            throws DependencyResolverException
+            Collection<org.apache.maven.model.Dependency> managedMavenDependencies,
+            TransformableFilter filter ) throws DependencyResolverException
     {
-
         List<Dependency> aetherDependencies = resolveDependencies( mavenDependencies );
 
         List<Dependency> aetherManagedDependencies = resolveDependencies( managedMavenDependencies );
@@ -195,13 +194,13 @@ class Maven30DependencyResolver implements MavenDependencyResolver
         CollectRequest request = new CollectRequest( aetherDependencies, aetherManagedDependencies,
                 aetherRepositories );
 
-        return resolveDependencies( filter, request );
+        return resolveDependencies( buildingRequest, filter, request );
     }
 
-    // CHECKSTYLE_OFF: LineLength
     private Iterable<org.apache.maven.shared.transfer.artifact.resolve.ArtifactResult> resolveDependencies(
-            TransformableFilter dependencyFilter, CollectRequest request ) throws DependencyResolverException
-    // CHECKSTYLE_ON :LineLength
+            ProjectBuildingRequest buildingRequest,
+            TransformableFilter dependencyFilter,
+            CollectRequest request ) throws DependencyResolverException
     {
         try
         {
@@ -211,8 +210,8 @@ class Maven30DependencyResolver implements MavenDependencyResolver
                 depFilter = dependencyFilter.transform( new SonatypeAetherFilterTransformer() );
             }
 
-            final List<ArtifactResult> dependencyResults = repositorySystem.resolveDependencies( session, request,
-                    depFilter );
+            final List<ArtifactResult> dependencyResults = repositorySystem.resolveDependencies(
+                    buildingRequest.getRepositorySession(), request, depFilter );
 
             // Keep it lazy! Often artifactsResults aren't used, so transforming up front is too expensive
             return new Iterable<org.apache.maven.shared.transfer.artifact.resolve.ArtifactResult>()
@@ -221,8 +220,7 @@ class Maven30DependencyResolver implements MavenDependencyResolver
                 public Iterator<org.apache.maven.shared.transfer.artifact.resolve.ArtifactResult> iterator()
                 {
                     // CHECKSTYLE_OFF: LineLength
-                    Collection<org.apache.maven.shared.transfer.artifact.resolve.ArtifactResult> artResults =
-                            new ArrayList<>(
+                    Collection<org.apache.maven.shared.transfer.artifact.resolve.ArtifactResult> artResults = new ArrayList<>(
                             dependencyResults.size() );
                     // CHECKSTYLE_ON: LineLength
 
diff --git a/maven-3.0.x/src/main/java/org/apache/maven/shared/transfer/dependencies/resolve/internal/Maven31ArtifactResult.java b/maven-3.0.x/src/main/java/org/apache/maven/shared/transfer/dependencies/resolve/internal/Maven31ArtifactResult.java
deleted file mode 100644
index 48ba799..0000000
--- a/maven-3.0.x/src/main/java/org/apache/maven/shared/transfer/dependencies/resolve/internal/Maven31ArtifactResult.java
+++ /dev/null
@@ -1,59 +0,0 @@
-package org.apache.maven.shared.transfer.dependencies.resolve.internal;
-
-/*
- * 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.
- */
-
-import org.apache.maven.RepositoryUtils;
-import org.apache.maven.shared.transfer.dependencies.resolve.DependencyResolverException;
-import org.eclipse.aether.resolution.ArtifactResult;
-import org.eclipse.aether.artifact.Artifact;
-
-/**
- * {@link org.apache.maven.shared.transfer.artifact.resolve.ArtifactResult} wrapper for {@link ArtifactResult}
- * 
- * @author Robert Scholte
- * @since 3.0
- */
-class Maven31ArtifactResult
-    implements org.apache.maven.shared.transfer.artifact.resolve.ArtifactResult
-{
-    private final ArtifactResult artifactResult;
-
-    /**
-     * @param artifactResult {@link ArtifactResult}
-     */
-    Maven31ArtifactResult( ArtifactResult artifactResult )
-    {
-        this.artifactResult = artifactResult;
-    }
-
-    @Override
-    public org.apache.maven.artifact.Artifact getArtifact()
-    {
-        try
-        {
-            return Invoker.invoke( RepositoryUtils.class, "toArtifact",
-                                                                        Artifact.class, artifactResult.getArtifact() );
-        }
-        catch ( DependencyResolverException e )
-        {
-            throw new RuntimeException( e );
-        }
-    }
-}
diff --git a/maven-3.0.x/src/main/java/org/apache/maven/shared/transfer/dependencies/resolve/internal/Maven31DependencyResolver.java b/maven-3.0.x/src/main/java/org/apache/maven/shared/transfer/dependencies/resolve/internal/Maven31DependencyResolver.java
deleted file mode 100644
index d735e85..0000000
--- a/maven-3.0.x/src/main/java/org/apache/maven/shared/transfer/dependencies/resolve/internal/Maven31DependencyResolver.java
+++ /dev/null
@@ -1,243 +0,0 @@
-package org.apache.maven.shared.transfer.dependencies.resolve.internal;
-
-/*
- * 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.
- */
-
-import java.util.ArrayList;
-import java.util.Collection;
-import java.util.Collections;
-import java.util.Iterator;
-import java.util.List;
-
-import org.apache.maven.RepositoryUtils;
-import org.apache.maven.artifact.handler.ArtifactHandler;
-import org.apache.maven.artifact.handler.manager.ArtifactHandlerManager;
-import org.apache.maven.model.DependencyManagement;
-import org.apache.maven.model.Model;
-import org.apache.maven.shared.artifact.filter.resolve.TransformableFilter;
-import org.apache.maven.shared.artifact.filter.resolve.transform.EclipseAetherFilterTransformer;
-import org.apache.maven.shared.transfer.dependencies.DependableCoordinate;
-import org.apache.maven.shared.transfer.dependencies.resolve.DependencyResolverException;
-import org.eclipse.aether.RepositorySystem;
-import org.eclipse.aether.RepositorySystemSession;
-import org.eclipse.aether.artifact.Artifact;
-import org.eclipse.aether.artifact.ArtifactType;
-import org.eclipse.aether.artifact.ArtifactTypeRegistry;
-import org.eclipse.aether.artifact.DefaultArtifact;
-import org.eclipse.aether.artifact.DefaultArtifactType;
-import org.eclipse.aether.collection.CollectRequest;
-import org.eclipse.aether.graph.Dependency;
-import org.eclipse.aether.graph.DependencyFilter;
-import org.eclipse.aether.repository.RemoteRepository;
-import org.eclipse.aether.resolution.ArtifactResult;
-import org.eclipse.aether.resolution.DependencyRequest;
-import org.eclipse.aether.resolution.DependencyResolutionException;
-import org.eclipse.aether.resolution.DependencyResult;
-
-/**
- *
- */
-class Maven31DependencyResolver implements MavenDependencyResolver
-{
-    private static final Class<?>[] ARG_CLASSES = new Class<?>[] {org.apache.maven.model.Dependency.class,
-            ArtifactTypeRegistry.class};
-    private final RepositorySystem repositorySystem;
-    private final ArtifactHandlerManager artifactHandlerManager;
-    private final RepositorySystemSession session;
-    private final List<RemoteRepository> aetherRepositories;
-
-    Maven31DependencyResolver( RepositorySystem repositorySystem, ArtifactHandlerManager artifactHandlerManager,
-            RepositorySystemSession session, List<RemoteRepository> aetherRepositories )
-    {
-        super();
-        this.repositorySystem = repositorySystem;
-        this.artifactHandlerManager = artifactHandlerManager;
-        this.session = session;
-        this.aetherRepositories = aetherRepositories;
-    }
-
-    /**
-     * Based on RepositoryUtils#toDependency(org.apache.maven.model.Dependency, ArtifactTypeRegistry)
-     *
-     * @param coordinate  {@link DependableCoordinate}
-     * @param stereotypes {@link ArtifactTypeRegistry
-     * @return as Aether Dependency
-     */
-    private static Dependency toDependency( DependableCoordinate coordinate, ArtifactTypeRegistry stereotypes )
-    {
-        ArtifactType stereotype = stereotypes.get( coordinate.getType() );
-        if ( stereotype == null )
-        {
-            stereotype = new DefaultArtifactType( coordinate.getType() );
-        }
-
-        Artifact artifact = new DefaultArtifact( coordinate.getGroupId(), coordinate.getArtifactId(),
-                coordinate.getClassifier(), null, coordinate.getVersion(), null, stereotype );
-
-        return new Dependency( artifact, null );
-    }
-
-    private static Dependency toDependency( org.apache.maven.model.Dependency root, ArtifactTypeRegistry typeRegistry )
-            throws DependencyResolverException
-    {
-        Object[] args = new Object[] {root, typeRegistry};
-
-        return Invoker.invoke( RepositoryUtils.class, "toDependency", ARG_CLASSES, args );
-    }
-
-    @Override
-    // CHECKSTYLE_OFF: LineLength
-    public Iterable<org.apache.maven.shared.transfer.artifact.resolve.ArtifactResult> resolveDependencies(
-            DependableCoordinate coordinate, TransformableFilter dependencyFilter )
-        // CHECKSTYLE_ON: LineLength
-            throws DependencyResolverException
-    {
-        ArtifactTypeRegistry typeRegistry = createTypeRegistry();
-
-        Dependency aetherRoot = toDependency( coordinate, typeRegistry );
-
-        CollectRequest request = new CollectRequest( aetherRoot, aetherRepositories );
-
-        return resolveDependencies( dependencyFilter, request );
-    }
-
-    private ArtifactTypeRegistry createTypeRegistry() throws DependencyResolverException
-    {
-        return Invoker.invoke( RepositoryUtils.class, "newArtifactTypeRegistry", ArtifactHandlerManager.class,
-                artifactHandlerManager );
-    }
-
-    @Override
-    // CHECKSTYLE_OFF: LineLength
-    public Iterable<org.apache.maven.shared.transfer.artifact.resolve.ArtifactResult> resolveDependencies( Model model,
-            TransformableFilter dependencyFilter )
-        // CHECKSTYLE_ON: LineLength
-            throws DependencyResolverException
-    {
-        // Are there examples where packaging and type are NOT in sync
-        ArtifactHandler artifactHandler = artifactHandlerManager.getArtifactHandler( model.getPackaging() );
-
-        String extension = artifactHandler != null ? artifactHandler.getExtension() : null;
-
-        Artifact aetherArtifact = new DefaultArtifact( model.getGroupId(), model.getArtifactId(), extension,
-                model.getVersion() );
-
-        Dependency aetherRoot = new Dependency( aetherArtifact, null );
-
-        CollectRequest request = new CollectRequest( aetherRoot, aetherRepositories );
-
-        request.setDependencies( resolveDependencies( model.getDependencies() ) );
-
-        DependencyManagement mavenDependencyManagement = model.getDependencyManagement();
-        if ( mavenDependencyManagement != null )
-        {
-            request.setManagedDependencies( resolveDependencies( model.getDependencyManagement().getDependencies() ) );
-        }
-
-        return resolveDependencies( dependencyFilter, request );
-    }
-
-    /**
-     * @param mavenDependencies {@link org.apache.maven.model.Dependency} can be {@code null}.
-     * @return List of resolved dependencies.
-     * @throws DependencyResolverException in case of a failure of the typeRegistry error.
-     */
-    // CHECKSTYLE_OFF: LineLength
-    private List<Dependency> resolveDependencies( Collection<org.apache.maven.model.Dependency> mavenDependencies )
-            throws DependencyResolverException
-    // CHECKSTYLE_ON: LineLength
-    {
-        if ( mavenDependencies == null )
-        {
-            return Collections.emptyList();
-        }
-
-        ArtifactTypeRegistry typeRegistry = createTypeRegistry();
-
-        List<Dependency> aetherDependencies = new ArrayList<>( mavenDependencies.size() );
-
-        for ( org.apache.maven.model.Dependency mavenDependency : mavenDependencies )
-        {
-            aetherDependencies.add( toDependency( mavenDependency, typeRegistry ) );
-        }
-
-        return aetherDependencies;
-    }
-
-    @Override
-    // CHECKSTYLE_OFF: LineLength
-    public Iterable<org.apache.maven.shared.transfer.artifact.resolve.ArtifactResult> resolveDependencies(
-            Collection<org.apache.maven.model.Dependency> mavenDependencies,
-            Collection<org.apache.maven.model.Dependency> managedMavenDependencies, TransformableFilter filter )
-        // CHECKSTYLE_ON: LineLength
-            throws DependencyResolverException
-    {
-
-        List<Dependency> aetherDeps = resolveDependencies( mavenDependencies );
-
-        List<Dependency> aetherManagedDependencies = resolveDependencies( managedMavenDependencies );
-
-        CollectRequest request = new CollectRequest( aetherDeps, aetherManagedDependencies, aetherRepositories );
-
-        return resolveDependencies( filter, request );
-    }
-
-    // CHECKSTYLE_OFF: LineLength
-    private Iterable<org.apache.maven.shared.transfer.artifact.resolve.ArtifactResult> resolveDependencies(
-            TransformableFilter dependencyFilter, CollectRequest request ) throws DependencyResolverException
-    // CHECKSTYLE_ON: LineLength
-    {
-        try
-        {
-            DependencyFilter depFilter = null;
-            if ( dependencyFilter != null )
-            {
-                depFilter = dependencyFilter.transform( new EclipseAetherFilterTransformer() );
-            }
-
-            DependencyRequest depRequest = new DependencyRequest( request, depFilter );
-
-            final DependencyResult dependencyResults = repositorySystem.resolveDependencies( session, depRequest );
-
-            // Keep it lazy! Often artifactsResults aren't used, so transforming up front is too expensive
-            return new Iterable<org.apache.maven.shared.transfer.artifact.resolve.ArtifactResult>()
-            {
-                @Override
-                public Iterator<org.apache.maven.shared.transfer.artifact.resolve.ArtifactResult> iterator()
-                {
-                    // CHECKSTYLE_OFF: LineLength
-                    Collection<org.apache.maven.shared.transfer.artifact.resolve.ArtifactResult> artResults = new ArrayList<>(
-                            dependencyResults.getArtifactResults().size() );
-                    // CHECKSTYLE_ON: LineLength
-
-                    for ( ArtifactResult artifactResult : dependencyResults.getArtifactResults() )
-                    {
-                        artResults.add( new Maven31ArtifactResult( artifactResult ) );
-                    }
-
-                    return artResults.iterator();
-                }
-            };
-        }
-        catch ( DependencyResolutionException e )
-        {
-            throw new Maven31DependencyResolverException( e );
-        }
-    }
-}
diff --git a/maven-3.0.x/src/main/java/org/apache/maven/shared/transfer/dependencies/resolve/internal/Maven31DependencyResolverException.java b/maven-3.0.x/src/main/java/org/apache/maven/shared/transfer/dependencies/resolve/internal/Maven31DependencyResolverException.java
deleted file mode 100644
index ef6185d..0000000
--- a/maven-3.0.x/src/main/java/org/apache/maven/shared/transfer/dependencies/resolve/internal/Maven31DependencyResolverException.java
+++ /dev/null
@@ -1,55 +0,0 @@
-package org.apache.maven.shared.transfer.dependencies.resolve.internal;
-
-/*
- * 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.
- */
-
-import java.util.List;
-
-import org.apache.maven.shared.transfer.dependencies.resolve.DependencyResolverException;
-import org.apache.maven.shared.transfer.dependencies.resolve.DependencyResult;
-import org.eclipse.aether.resolution.DependencyResolutionException;
-
-/**
- * 
- * @author Robert Scholte
- *
- */
-class Maven31DependencyResolverException extends DependencyResolverException
-{
-    private DependencyResolutionException e;
-
-    Maven31DependencyResolverException( DependencyResolutionException e )
-    {
-        super( e );
-        this.e = e;
-    }
-    
-    @Override
-    public DependencyResult getResult()
-    {
-        return new DependencyResult()
-        {
-            @Override
-            public List<Exception> getCollectorExceptions()
-            {
-                return e.getResult().getCollectExceptions();
-            }
-        };
-    }
-}
diff --git a/maven-3.0.x/src/main/java/org/apache/maven/shared/transfer/dependencies/resolve/internal/MavenDependencyResolver.java b/maven-3.0.x/src/main/java/org/apache/maven/shared/transfer/dependencies/resolve/internal/MavenDependencyResolver.java
deleted file mode 100644
index 8652207..0000000
--- a/maven-3.0.x/src/main/java/org/apache/maven/shared/transfer/dependencies/resolve/internal/MavenDependencyResolver.java
+++ /dev/null
@@ -1,51 +0,0 @@
-package org.apache.maven.shared.transfer.dependencies.resolve.internal;
-
-/*
- * 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.
- */
-
-import java.util.Collection;
-
-import org.apache.maven.model.Dependency;
-import org.apache.maven.model.Model;
-import org.apache.maven.shared.artifact.filter.resolve.TransformableFilter;
-import org.apache.maven.shared.transfer.artifact.resolve.ArtifactResult;
-import org.apache.maven.shared.transfer.dependencies.DependableCoordinate;
-import org.apache.maven.shared.transfer.dependencies.resolve.DependencyResolverException;
-
-/**
- * 
- * @author Robert Scholte
- *
- */
-interface MavenDependencyResolver
-{
-
-    Iterable<ArtifactResult> resolveDependencies( DependableCoordinate coordinate,
-                                                  TransformableFilter dependencyFilter )
-        throws DependencyResolverException;
-
-    Iterable<ArtifactResult> resolveDependencies( Model model, TransformableFilter dependencyFilter )
-        throws DependencyResolverException;
-
-    Iterable<ArtifactResult> resolveDependencies( Collection<Dependency> mavenDependencies,
-                                                  Collection<Dependency> managedMavenDependencies,
-                                                  TransformableFilter filter )
-        throws DependencyResolverException;
-
-}
diff --git a/maven-3.0.x/src/main/java/org/apache/maven/shared/transfer/graph/DependencyNode.java b/maven-3.0.x/src/main/java/org/apache/maven/shared/transfer/graph/DependencyNode.java
deleted file mode 100644
index f18f9dd..0000000
--- a/maven-3.0.x/src/main/java/org/apache/maven/shared/transfer/graph/DependencyNode.java
+++ /dev/null
@@ -1,69 +0,0 @@
-package org.apache.maven.shared.transfer.graph;
-
-/*
- * 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.
- */
-
-import java.util.List;
-
-import org.apache.maven.artifact.Artifact;
-import org.apache.maven.artifact.repository.ArtifactRepository;
-
-/**
- * Represents a dependency node within a Maven project's dependency collector.
- *
- * @author Pim Moerenhout
- * @since 0.12
- */
-public interface DependencyNode
-{
-    /**
-     * Gets the child nodes of this node.
-     *
-     * @return the child nodes of this node, never {@code null}
-     */
-    List<DependencyNode> getChildren();
-
-    /**
-     * @return artifact for this DependencyCollectorNode
-     */
-    Artifact getArtifact();
-
-    /**
-     * @return repositories of this DependencyCollectorNode
-     */
-    List<ArtifactRepository> getRemoteRepositories();
-
-    /**
-     * @return true for an optional dependency.
-     */
-    Boolean getOptional();
-
-    /**
-     * @return The scope on the dependency.
-     */
-    String getScope();
-
-    /**
-     * Traverses this node and potentially its children using the specified visitor.
-     *
-     * @param visitor The visitor to call back, must not be {@code null}.
-     * @return {@code true} to visit siblings nodes of this node as well, {@code false} to skip siblings.
-     */
-    boolean accept( DependencyVisitor visitor );
-}
diff --git a/maven-3.0.x/src/main/java/org/apache/maven/shared/transfer/graph/DependencyVisitor.java b/maven-3.0.x/src/main/java/org/apache/maven/shared/transfer/graph/DependencyVisitor.java
deleted file mode 100644
index 9e499c4..0000000
--- a/maven-3.0.x/src/main/java/org/apache/maven/shared/transfer/graph/DependencyVisitor.java
+++ /dev/null
@@ -1,48 +0,0 @@
-package org.apache.maven.shared.transfer.graph;
-
-/*
- * 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.
- */
-
-
-/**
- * Defines a hierarchical visitor for collecting dependency node trees.
- * 
- * @author Pim Moerenhout
- * @since 0.12
- */
-public interface DependencyVisitor
-{
-    /**
-     * Starts the visit to the specified dependency node.
-     * 
-     * @param node the dependency node to visit
-     * @return <code>true</code> to visit the specified dependency node's children, <code>false</code> to skip the
-     *         specified dependency node's children and proceed to its next sibling
-     */
-    boolean visitEnter( DependencyNode node );
-
-    /**
-     * Ends the visit to to the specified dependency node.
-     *
-     * @param node the dependency node to visit
-     * @return <code>true</code> to visit the specified dependency node's next sibling, <code>false</code> to skip the
-     *         specified dependency node's next siblings and proceed to its parent
-     */
-    boolean visitLeave( DependencyNode node );
-}
diff --git a/maven-3.0.x/src/main/java/org/apache/maven/shared/transfer/metadata/internal/Maven31MetadataBridge.java b/maven-3.0.x/src/main/java/org/apache/maven/shared/transfer/metadata/internal/Maven31MetadataBridge.java
deleted file mode 100644
index 6d001a0..0000000
--- a/maven-3.0.x/src/main/java/org/apache/maven/shared/transfer/metadata/internal/Maven31MetadataBridge.java
+++ /dev/null
@@ -1,104 +0,0 @@
-package org.apache.maven.shared.transfer.metadata.internal;
-
-/*
- * 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.
- */
-
-import java.io.File;
-import java.util.Map;
-
-import org.apache.maven.artifact.metadata.ArtifactMetadata;
-import org.apache.maven.artifact.repository.metadata.RepositoryMetadata;
-import org.eclipse.aether.metadata.AbstractMetadata;
-import org.eclipse.aether.metadata.Metadata;
-
-/**
- * A MetadataBridge for Maven 3.1 
- * @author Robert Scholte
- */
-public class Maven31MetadataBridge extends AbstractMetadata implements Metadata
-{
-    private ArtifactMetadata metadata;
-    
-    public Maven31MetadataBridge( ArtifactMetadata metadata )
-    {
-        this.metadata = metadata;
-    }
-
-    @Override
-    public String getGroupId()
-    {
-        return emptify( metadata.getGroupId() );
-    }
-
-    @Override
-    public String getArtifactId()
-    {
-        return metadata.storedInGroupDirectory() ? "" : emptify( metadata.getArtifactId() );
-    }
-
-    @Override
-    public String getVersion()
-    {
-        return metadata.storedInArtifactVersionDirectory() ? emptify( metadata.getBaseVersion() ) : "";
-    }
-
-    @Override
-    public String getType()
-    {
-        return metadata.getRemoteFilename();
-    }
-
-    private String emptify( String string )
-    {
-        return ( string != null ) ? string : "";
-    }
-
-    @Override
-    public File getFile()
-    {
-        return null;
-    }
-    
-    @Override
-    public Nature getNature()
-    {
-        if ( metadata instanceof RepositoryMetadata )
-        {
-            switch ( ( (RepositoryMetadata) metadata ).getNature() )
-            {
-                case RepositoryMetadata.RELEASE_OR_SNAPSHOT:
-                    return Nature.RELEASE_OR_SNAPSHOT;
-                case RepositoryMetadata.SNAPSHOT:
-                    return Nature.SNAPSHOT;
-                default:
-                    return Nature.RELEASE;
-            }
-        }
-        else
-        {
-            return Nature.RELEASE;
-        }
-    }
-
-    @Override
-    public Map<String, String> getProperties()
-    {
-        return copyProperties( null );
-    }
-}
diff --git a/maven-3.0.x/src/main/java/org/apache/maven/shared/transfer/project/MavenAetherUtils.java b/maven-3.0.x/src/main/java/org/apache/maven/shared/transfer/project/MavenAetherUtils.java
deleted file mode 100644
index ccaee94..0000000
--- a/maven-3.0.x/src/main/java/org/apache/maven/shared/transfer/project/MavenAetherUtils.java
+++ /dev/null
@@ -1,100 +0,0 @@
-package org.apache.maven.shared.transfer.project;
-
-/*
- * 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.
- */
-
-import org.codehaus.plexus.classworlds.realm.ClassRealm;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-
-/**
- * This util class will import the Aether library available from the installed Maven distribution. It will do nothing if
- * it is called from outside of a ClassRealm.
- *
- * @since 0.11.1
- * @author Gabriel Belingueres <a href="mailto:belingueres@gmail.com">belingueres@gmail.com</a>
- */
-public class MavenAetherUtils
-{
-
-    private static final Logger LOGGER = LoggerFactory.getLogger( MavenAetherUtils.class );
-
-    private static final String NO_SUCH_REALM_EXCEPTION = "org.codehaus.plexus.classworlds.realm.NoSuchRealmException";
-
-    /**
-     * Import the core Aether library from the maven distribution.
-     */
-    public static void importAetherLibrary()
-    {
-        ClassLoader classLoader = Thread.currentThread().getContextClassLoader();
-        if ( isClassRealm( classLoader ) )
-        {
-            importAether( classLoader );
-        }
-    }
-
-    /**
-     * Imports aether-util library from the user's Maven distribution.
-     * <p>
-     * PRECONDITION: the classLoader parameter is an instance of ClassRealm.
-     * </p>
-     *
-     * @param classLoader the Classloader which needs to access aether-util.
-     */
-    private static void importAether( ClassLoader classLoader )
-    {
-        ClassRealm classRealm = (ClassRealm) classLoader;
-        try
-        {
-            classRealm.importFrom( "plexus.core", "org.eclipse.aether.util" );
-        }
-        catch ( Exception e )
-        {
-            if ( NO_SUCH_REALM_EXCEPTION.equals( e.getClass().getCanonicalName() ) )
-            {
-                LOGGER.info( "'plexus.core' ClassRealm could not be found. "
-                    + "Ignore this message if you are using the library outside of a Maven execution.", e );
-            }
-            else
-            {
-                // another exception
-                LOGGER.error( "Unexpected exception when importing Aether library to the '{}' ClassRealm", classLoader,
-                              e );
-            }
-        }
-    }
-
-    /**
-     * Using reflection, check if the Classloader is actually an instance of a ClassRealm.
-     *
-     * @param classLoader the Classloader to test.
-     * @return true if it an instance of ClassRealm; false otherwise.
-     */
-    private static boolean isClassRealm( ClassLoader classLoader )
-    {
-        for ( Class<?> clazz = classLoader.getClass(); clazz != null; clazz = clazz.getSuperclass() )
-        {
-            if ( "org.codehaus.plexus.classworlds.realm.ClassRealm".equals( clazz.getCanonicalName() ) )
-            {
-                return true;
-            }
-        }
-        return false;
-    }
-}
diff --git a/maven-3.0.x/src/main/java/org/apache/maven/shared/transfer/project/NoFileAssignedException.java b/maven-3.0.x/src/main/java/org/apache/maven/shared/transfer/project/NoFileAssignedException.java
deleted file mode 100644
index 12ecbed..0000000
--- a/maven-3.0.x/src/main/java/org/apache/maven/shared/transfer/project/NoFileAssignedException.java
+++ /dev/null
@@ -1,51 +0,0 @@
-package org.apache.maven.shared.transfer.project;
-
-/*
- * 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.
- */
-
-/**
- * This exception will be thrown if no file has been assigned to artifact.
- * 
- */
-public class NoFileAssignedException
-    extends Exception
-{
-
-    /**
-     * 
-     */
-    private static final long serialVersionUID = -3466983009427148332L;
-
-    /**
-     * @param message The message of the error.
-     * @param e {@link Exception}
-     */
-    public NoFileAssignedException( String message, Exception e )
-    {
-        super( message, e );
-    }
-
-    /**
-     * @param message The message.
-     */
-    public NoFileAssignedException( String message )
-    {
-        super( message );
-    }
-}
diff --git a/maven-3.0.x/src/main/java/org/apache/maven/shared/transfer/project/deploy/ProjectDeployer.java b/maven-3.0.x/src/main/java/org/apache/maven/shared/transfer/project/deploy/ProjectDeployer.java
deleted file mode 100644
index bf67425..0000000
--- a/maven-3.0.x/src/main/java/org/apache/maven/shared/transfer/project/deploy/ProjectDeployer.java
+++ /dev/null
@@ -1,69 +0,0 @@
-package org.apache.maven.shared.transfer.project.deploy;
-
-/*
- * 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.
- */
-
-import org.apache.maven.artifact.repository.ArtifactRepository;
-import org.apache.maven.project.ProjectBuildingRequest;
-import org.apache.maven.shared.transfer.artifact.deploy.ArtifactDeployerException;
-import org.apache.maven.shared.transfer.project.NoFileAssignedException;
-
-/**
- * This defines the interface to deploy a single Maven Project.
- * 
- * @author Karl Heinz Marbaise <a href="mailto:khmarbaise@apache.org">khmarbaise@apache.org</a>
- */
-public interface ProjectDeployer
-{
-    /**
-     * This will deploy a single project which may contain several artifacts. Those artifacts will be deployed into the
-     * appropriate remote repository.
-     * 
-     * <pre class="java">
-     *  &#64;Parameter( defaultValue = "${session}", required = true, readonly = true )
-     *  MavenSession session;
-     *  &#64;Parameter( defaultValue = "${project}", required = true, readonly = true )
-     *  MavenProject project;
-     *  ..
-     *  &#64;Component
-     *  ProjectDeployer deployer;
-     *  ...
-     *  public void execute()
-     *  {
-     *    ProjectDeployerRequest pdr = 
-     *      new ProjectDeployerRequest()
-     *        .setProject( project );
-     *  
-     *    deployer.deploy( session.getProjectBuildingRequest(), pdr, artifactRepository );
-     *  }
-     * </pre>
-     * 
-     * @param buildingRequest {@link ProjectBuildingRequest}
-     * @param request {@link ProjectDeployerRequest}
-     * @param artifactRepository {@link ArtifactRepository}
-     * @throws NoFileAssignedException In case of missing file which has not been assigned to project.
-     * @throws ArtifactDeployerException in case of artifact could not correctly deployed.
-     * @throws IllegalArgumentException in case <code>buildingRequest</code> is <code>null</code>, <code>request</code>
-     *             is <code>null</code> or <code>artifactRepository</code> is <code>null</code>.
-     */
-    void deploy( ProjectBuildingRequest buildingRequest, ProjectDeployerRequest request,
-                 ArtifactRepository artifactRepository )
-        throws NoFileAssignedException, ArtifactDeployerException;
-
-}
diff --git a/maven-3.0.x/src/main/java/org/apache/maven/shared/transfer/project/deploy/ProjectDeployerRequest.java b/maven-3.0.x/src/main/java/org/apache/maven/shared/transfer/project/deploy/ProjectDeployerRequest.java
deleted file mode 100644
index aea581a..0000000
--- a/maven-3.0.x/src/main/java/org/apache/maven/shared/transfer/project/deploy/ProjectDeployerRequest.java
+++ /dev/null
@@ -1,132 +0,0 @@
-package org.apache.maven.shared.transfer.project.deploy;
-
-/*
- * 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.
- */
-
-import org.apache.maven.project.MavenProject;
-
-/**
- * 
- * @author Robert Scholte
- */
-public class ProjectDeployerRequest
-{
-
-    private int retryFailedDeploymentCount;
-
-    // From DeployMojo
-
-    private MavenProject project;
-
-    private String altDeploymentRepository;
-
-    private String altSnapshotDeploymentRepository;
-
-    private String altReleaseDeploymentRepository;
-
-    /**
-     * @return the retryFailedDeploymentCount
-     */
-    public int getRetryFailedDeploymentCount()
-    {
-        return retryFailedDeploymentCount;
-    }
-
-    /**
-     * @param theRetryFailedDeploymentCountToBeSet the retryFailedDeploymentCount to set
-     * @return {@link ProjectDeployerRequest} for chaining.
-     */
-    public ProjectDeployerRequest setRetryFailedDeploymentCount( int theRetryFailedDeploymentCountToBeSet )
-    {
-        this.retryFailedDeploymentCount = theRetryFailedDeploymentCountToBeSet;
-        return this;
-    }
-
-    /**
-     * @return the project
-     */
-    public MavenProject getProject()
-    {
-        return project;
-    }
-
-    /**
-     * @param theProjectToBeSet the {link {@link MavenProject project} to set
-     * @return {@link ProjectDeployerRequest} for chaining.
-     */
-    public ProjectDeployerRequest setProject( MavenProject theProjectToBeSet )
-    {
-        this.project = theProjectToBeSet;
-        return this;
-    }
-
-    /**
-     * @return the altDeploymentRepository
-     */
-    public String getAltDeploymentRepository()
-    {
-        return altDeploymentRepository;
-    }
-
-    /**
-     * @param theAltDeploymentRepositoryToBeSet the altDeploymentRepository to set
-     * @return {@link ProjectDeployerRequest} for chaining.
-     */
-    public ProjectDeployerRequest setAltDeploymentRepository( String theAltDeploymentRepositoryToBeSet )
-    {
-        this.altDeploymentRepository = theAltDeploymentRepositoryToBeSet;
-        return this;
-    }
-
-    /**
-     * @return the altSnapshotDeploymentRepository
-     */
-    public String getAltSnapshotDeploymentRepository()
-    {
-        return altSnapshotDeploymentRepository;
-    }
-
-    /**
-     * @param theAltSnapshotDeploymentRepositoryToBeSet the altSnapshotDeploymentRepository to set
-     * @return {@link ProjectDeployerRequest} for chaining.
-     */
-    public ProjectDeployerRequest setAltSnapshotDeploymentRepository( String theAltSnapshotDeploymentRepositoryToBeSet )
-    {
-        this.altSnapshotDeploymentRepository = theAltSnapshotDeploymentRepositoryToBeSet;
-        return this;
-    }
-
-    /**
-     * @return the altReleaseDeploymentRepository
-     */
-    public String getAltReleaseDeploymentRepository()
-    {
-        return altReleaseDeploymentRepository;
-    }
-
-    /**
-     * @param theAltReleaseDeploymentRepositoryToBeSet the altReleaseDeploymentRepository to set
-     * @return {@link ProjectDeployerRequest} for chaining.
-     */
-    public ProjectDeployerRequest setAltReleaseDeploymentRepository( String theAltReleaseDeploymentRepositoryToBeSet )
-    {
-        this.altReleaseDeploymentRepository = theAltReleaseDeploymentRepositoryToBeSet;
-        return this;
-    }
-}
diff --git a/maven-3.0.x/src/main/java/org/apache/maven/shared/transfer/project/deploy/internal/DefaultProjectDeployer.java b/maven-3.0.x/src/main/java/org/apache/maven/shared/transfer/project/deploy/internal/DefaultProjectDeployer.java
deleted file mode 100644
index 16d1d1b..0000000
--- a/maven-3.0.x/src/main/java/org/apache/maven/shared/transfer/project/deploy/internal/DefaultProjectDeployer.java
+++ /dev/null
@@ -1,185 +0,0 @@
-package org.apache.maven.shared.transfer.project.deploy.internal;
-
-/*
- * 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.
- */
-
-import java.io.File;
-import java.util.ArrayList;
-import java.util.Collection;
-import java.util.List;
-
-import org.apache.maven.artifact.Artifact;
-import org.apache.maven.artifact.repository.ArtifactRepository;
-import org.apache.maven.project.ProjectBuildingRequest;
-import org.apache.maven.project.artifact.ProjectArtifactMetadata;
-import org.apache.maven.shared.transfer.artifact.deploy.ArtifactDeployer;
-import org.apache.maven.shared.transfer.artifact.deploy.ArtifactDeployerException;
-import org.apache.maven.shared.transfer.project.NoFileAssignedException;
-import org.apache.maven.shared.transfer.project.deploy.ProjectDeployer;
-import org.apache.maven.shared.transfer.project.deploy.ProjectDeployerRequest;
-import org.apache.maven.shared.transfer.repository.RepositoryManager;
-import org.codehaus.plexus.component.annotations.Component;
-import org.codehaus.plexus.component.annotations.Requirement;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-
-/**
- * This will deploy a whole project into the appropriate remote repository.
- * 
- * @author Karl Heinz Marbaise <a href="mailto:khmarbaise@apache.org">khmarbaise@apache.org</a> Most of the code is
- *         taken from maven-deploy-plugin.
- */
-@Component( role = ProjectDeployer.class )
-class DefaultProjectDeployer
-    implements ProjectDeployer
-{
-    private static final Logger LOGGER = LoggerFactory.getLogger( DefaultProjectDeployer.class );
-
-    @Requirement
-    private ArtifactDeployer deployer;
-
-    @Requirement
-    private RepositoryManager repositoryManager;
-
-    /**
-     * {@inheritDoc}
-     */
-    public void deploy( ProjectBuildingRequest buildingRequest, ProjectDeployerRequest projectDeployerRequest,
-                        ArtifactRepository artifactRepository )
-        throws NoFileAssignedException, IllegalArgumentException, ArtifactDeployerException
-    {
-        validateParameters( buildingRequest, projectDeployerRequest, artifactRepository );
-
-        Artifact artifact = projectDeployerRequest.getProject().getArtifact();
-        String packaging = projectDeployerRequest.getProject().getPackaging();
-        File pomFile = projectDeployerRequest.getProject().getFile();
-
-        List<Artifact> attachedArtifacts = projectDeployerRequest.getProject().getAttachedArtifacts();
-
-        // Deploy the POM
-        boolean isPomArtifact = "pom".equals( packaging );
-        if ( isPomArtifact )
-        {
-            artifact.setFile( pomFile );
-        }
-        else
-        {
-            ProjectArtifactMetadata metadata = new ProjectArtifactMetadata( artifact, pomFile );
-            artifact.addMetadata( metadata );
-        }
-
-        // What consequence does this have?
-        // artifact.setRelease( true );
-
-        artifact.setRepository( artifactRepository );
-
-        int retryFailedDeploymentCount = projectDeployerRequest.getRetryFailedDeploymentCount();
-
-        List<Artifact> deployableArtifacts = new ArrayList<>();
-        if ( isPomArtifact )
-        {
-            deployableArtifacts.add( artifact );
-        }
-        else
-        {
-            File file = artifact.getFile();
-
-            if ( file != null && file.isFile() )
-            {
-                deployableArtifacts.add( artifact );
-            }
-            else if ( !attachedArtifacts.isEmpty() )
-            {
-                // TODO: Reconsider this exception? Better Exception type?
-                throw new NoFileAssignedException( "The packaging plugin for this project did not assign "
-                    + "a main file to the project but it has attachments. Change packaging to 'pom'." );
-            }
-            else
-            {
-                // TODO: Reconsider this exception? Better Exception type?
-                throw new NoFileAssignedException( "The packaging for this project did not assign "
-                    + "a file to the build artifact" );
-            }
-        }
-
-        deployableArtifacts.addAll( attachedArtifacts );
-
-        deploy( buildingRequest, deployableArtifacts, artifactRepository, retryFailedDeploymentCount );
-    }
-
-    private void validateParameters( ProjectBuildingRequest buildingRequest,
-                                     ProjectDeployerRequest projectDeployerRequest,
-                                     ArtifactRepository artifactRepository )
-    {
-        if ( buildingRequest == null )
-        {
-            throw new IllegalArgumentException( "The parameter buildingRequest is not allowed to be null." );
-        }
-        if ( projectDeployerRequest == null )
-        {
-            throw new IllegalArgumentException( "The parameter projectDeployerRequest is not allowed to be null." );
-        }
-        if ( artifactRepository == null )
-        {
-            throw new IllegalArgumentException( "The parameter artifactRepository is not allowed to be null." );
-        }
-    }
-
-    private void deploy( ProjectBuildingRequest request, Collection<Artifact> artifacts,
-                         ArtifactRepository deploymentRepository, int retryFailedDeploymentCount )
-        throws ArtifactDeployerException
-    {
-
-        // for now retry means redeploy the complete artifacts collection
-        int retryFailedDeploymentCounter = Math.max( 1, Math.min( 10, retryFailedDeploymentCount ) );
-        ArtifactDeployerException exception = null;
-        for ( int count = 0; count < retryFailedDeploymentCounter; count++ )
-        {
-            try
-            {
-                if ( count > 0 )
-                {
-                    LOGGER.info( "Retrying deployment attempt " + ( count + 1 ) + " of "
-                        + retryFailedDeploymentCounter );
-                }
-
-                deployer.deploy( request, deploymentRepository, artifacts );
-                exception = null;
-                break;
-            }
-            catch ( ArtifactDeployerException e )
-            {
-                if ( count + 1 < retryFailedDeploymentCounter )
-                {
-                    LOGGER.warn( "Encountered issue during deployment: " + e.getLocalizedMessage() );
-                    LOGGER.debug( e.getMessage() );
-                }
-                if ( exception == null )
-                {
-                    exception = e;
-                }
-            }
-        }
-        if ( exception != null )
-        {
-            throw exception;
-        }
-    }
-
-}
diff --git a/maven-3.0.x/src/main/java/org/apache/maven/shared/transfer/project/install/ProjectInstaller.java b/maven-3.0.x/src/main/java/org/apache/maven/shared/transfer/project/install/ProjectInstaller.java
deleted file mode 100644
index 40e2f63..0000000
--- a/maven-3.0.x/src/main/java/org/apache/maven/shared/transfer/project/install/ProjectInstaller.java
+++ /dev/null
@@ -1,80 +0,0 @@
-package org.apache.maven.shared.transfer.project.install;
-
-/*
- * 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.
- */
-
-import java.io.IOException;
-
-import org.apache.maven.project.ProjectBuildingRequest;
-import org.apache.maven.shared.transfer.artifact.install.ArtifactInstallerException;
-import org.apache.maven.shared.transfer.project.NoFileAssignedException;
-
-/**
- * This defines the interface to install a single Maven Project.
- * 
- * @author Karl Heinz Marbaise <a href="mailto:khmarbaise@apache.org">khmarbaise@apache.org</a>
- */
-public interface ProjectInstaller
-{
-    /**
-     * This will install a single project which may contain several artifacts. Those artifacts will be installed into
-     * the appropriate repository.
-     * 
-     * <pre class="java">
-     *  &#64;Parameter( defaultValue = "${session}", required = true, readonly = true )
-     *  private MavenSession session;
-     *  &#64;Parameter( defaultValue = "${project}", required = true, readonly = true )
-     *  private MavenProject project;
-     *  ..
-     *  &#64;Component
-     *  private ProjectInstaller installer;
-     *  ...
-     *  public void execute()
-     *  {
-     *    ProjectInstallerRequest pir =
-     *      new ProjectInstallerRequest()
-     *         .setProject( mavenProject );
-     * 
-     *    installer.install( session.getProjectBuildingRequest(), pir );
-     *  }
-     * </pre>
-     * 
-     * To set a different local repository than the current one in the Maven session, you can inject an instance of the
-     * <code>RepositoryManager</code> and set the path to the local repository, called <code>localRepositoryPath</code>,
-     * as such:
-     * 
-     * <pre class="java">
-     * &#64;Component
-     * private RepositoryManager repositoryManager;
-     * 
-     * buildingRequest = repositoryManager.setLocalRepositoryBasedir( buildingRequest, localRepositoryPath );
-     * </pre>
-     * 
-     * @param projectBuildingRequest {@link ProjectBuildingRequest}
-     * @param projectInstallerRequest {@link ProjectInstallerRequest}
-     * @throws IOException In case of problems related to checksums.
-     * @throws ArtifactInstallerException In case of problems to install artifacts.
-     * @throws NoFileAssignedException If no file has been assigned to the project.
-     * @throws IllegalArgumentException in case of parameter <code>projectBuildingRequest</code> is <code>null</code> or
-     *             parameter <code>projectInstallerRequest</code> is <code>null</code>.
-     */
-    void install( ProjectBuildingRequest projectBuildingRequest, ProjectInstallerRequest projectInstallerRequest )
-        throws IOException, ArtifactInstallerException, NoFileAssignedException;
-
-}
diff --git a/maven-3.0.x/src/main/java/org/apache/maven/shared/transfer/project/install/ProjectInstallerRequest.java b/maven-3.0.x/src/main/java/org/apache/maven/shared/transfer/project/install/ProjectInstallerRequest.java
deleted file mode 100644
index 07cc6cd..0000000
--- a/maven-3.0.x/src/main/java/org/apache/maven/shared/transfer/project/install/ProjectInstallerRequest.java
+++ /dev/null
@@ -1,51 +0,0 @@
-package org.apache.maven.shared.transfer.project.install;
-
-/*
- * 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.
- */
-
-import org.apache.maven.project.MavenProject;
-
-/**
- * @author Robert Scholte
- */
-public class ProjectInstallerRequest
-{
-    // From InstallMojo
-
-    private MavenProject project;
-
-    /**
-     * @return the project
-     */
-    public MavenProject getProject()
-    {
-        return project;
-    }
-
-    /**
-     * @param theProjectToBeSet the project to set
-     * @return {@link ProjectInstallerRequest} for chaining.
-     */
-    public ProjectInstallerRequest setProject( MavenProject theProjectToBeSet )
-    {
-        this.project = theProjectToBeSet;
-        return this;
-    }
-
-}
diff --git a/maven-3.0.x/src/main/java/org/apache/maven/shared/transfer/project/install/internal/DefaultProjectInstaller.java b/maven-3.0.x/src/main/java/org/apache/maven/shared/transfer/project/install/internal/DefaultProjectInstaller.java
deleted file mode 100644
index 675b55c..0000000
--- a/maven-3.0.x/src/main/java/org/apache/maven/shared/transfer/project/install/internal/DefaultProjectInstaller.java
+++ /dev/null
@@ -1,176 +0,0 @@
-package org.apache.maven.shared.transfer.project.install.internal;
-
-/*
- * 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.
- */
-
-import java.io.File;
-import java.io.IOException;
-import java.util.Collection;
-import java.util.Collections;
-import java.util.LinkedHashSet;
-import java.util.List;
-
-import org.apache.maven.artifact.Artifact;
-import org.apache.maven.artifact.metadata.ArtifactMetadata;
-import org.apache.maven.project.MavenProject;
-import org.apache.maven.project.ProjectBuildingRequest;
-import org.apache.maven.project.artifact.ProjectArtifact;
-import org.apache.maven.project.artifact.ProjectArtifactMetadata;
-import org.apache.maven.shared.transfer.artifact.install.ArtifactInstaller;
-import org.apache.maven.shared.transfer.artifact.install.ArtifactInstallerException;
-import org.apache.maven.shared.transfer.project.NoFileAssignedException;
-import org.apache.maven.shared.transfer.project.install.ProjectInstaller;
-import org.apache.maven.shared.transfer.project.install.ProjectInstallerRequest;
-import org.apache.maven.shared.transfer.repository.RepositoryManager;
-import org.codehaus.plexus.component.annotations.Component;
-import org.codehaus.plexus.component.annotations.Requirement;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-
-/**
- * This will install a whole project into the appropriate repository.
- * 
- * @author Karl Heinz Marbaise <a href="mailto:khmarbaise@apache.org">khmarbaise@apache.org</a>
- */
-@Component( role = ProjectInstaller.class )
-class DefaultProjectInstaller
-    implements ProjectInstaller
-{
-
-    private static final Logger LOGGER = LoggerFactory.getLogger( DefaultProjectInstaller.class );
-
-    @Requirement
-    private ArtifactInstaller installer;
-
-    @Requirement
-    private RepositoryManager repositoryManager;
-
-    /**
-     * {@inheritDoc}
-     */
-    @Override
-    public void install( ProjectBuildingRequest buildingRequest, ProjectInstallerRequest installerRequest )
-        throws IOException, ArtifactInstallerException, NoFileAssignedException, IllegalArgumentException
-    {
-
-        validateParameters( buildingRequest, installerRequest );
-        MavenProject project = installerRequest.getProject();
-
-        Artifact artifact = project.getArtifact();
-        String packaging = project.getPackaging();
-        File pomFile = project.getFile();
-
-        List<Artifact> attachedArtifacts = project.getAttachedArtifacts();
-
-        // TODO: push into transformation
-        boolean isPomArtifact = "pom".equals( packaging );
-
-        ProjectArtifactMetadata metadata;
-
-        Collection<File> metadataFiles = new LinkedHashSet<>();
-
-        if ( isPomArtifact )
-        {
-            if ( pomFile != null )
-            {
-                installer.install( buildingRequest,
-                                   Collections.<Artifact>singletonList( new ProjectArtifact( project ) ) );
-                addMetaDataFilesForArtifact( buildingRequest, artifact, metadataFiles );
-            }
-        }
-        else
-        {
-            if ( pomFile != null )
-            {
-                metadata = new ProjectArtifactMetadata( artifact, pomFile );
-                artifact.addMetadata( metadata );
-            }
-
-            File file = artifact.getFile();
-
-            // Here, we have a temporary solution to MINSTALL-3 (isDirectory() is true if it went through compile
-            // but not package). We are designing in a proper solution for Maven 2.1
-            if ( file != null && file.isFile() )
-            {
-                installer.install( buildingRequest, Collections.singletonList( artifact ) );
-                addMetaDataFilesForArtifact( buildingRequest, artifact, metadataFiles );
-            }
-            else if ( !attachedArtifacts.isEmpty() )
-            {
-                throw new NoFileAssignedException( "The packaging plugin for this project did not assign "
-                    + "a main file to the project but it has attachments. Change packaging to 'pom'." );
-            }
-            else
-            {
-                // CHECKSTYLE_OFF: LineLength
-                throw new NoFileAssignedException( "The packaging for this project did not assign a file to the build artifact" );
-                // CHECKSTYLE_ON: LineLength
-            }
-        }
-
-        for ( Artifact attached : attachedArtifacts )
-        {
-            LOGGER.debug( "Installing artifact: {}", attached.getId() );
-            installer.install( buildingRequest, Collections.singletonList( attached ) );
-            addMetaDataFilesForArtifact( buildingRequest, attached, metadataFiles );
-        }
-
-    }
-
-    private void validateParameters( ProjectBuildingRequest buildingRequest, ProjectInstallerRequest installerRequest )
-    {
-        if ( buildingRequest == null )
-        {
-            throw new IllegalArgumentException( "The parameter buildingRequest is not allowed to be null." );
-        }
-        if ( installerRequest == null )
-        {
-            throw new IllegalArgumentException( "The parameter installerRequest is not allowed to be null." );
-        }
-    }
-
-    private void addMetaDataFilesForArtifact( ProjectBuildingRequest buildingRequest, Artifact artifact,
-            Collection<File> targetMetadataFiles )
-    {
-        Collection<ArtifactMetadata> metadatas = artifact.getMetadataList();
-        if ( metadatas != null )
-        {
-            for ( ArtifactMetadata metadata : metadatas )
-            {
-                File metadataFile = getLocalRepoFile( buildingRequest, metadata );
-                targetMetadataFiles.add( metadataFile );
-            }
-        }
-    }
-
-    /**
-     * Gets the path of the specified artifact metadata within the local repository. Note that the returned path need
-     * not exist (yet).
-     *
-     * @param buildingRequest The project building request, must not be <code>null</code>.
-     * @param metadata The artifact metadata whose local repo path should be determined, must not be <code>null</code>.
-     * @return The absolute path to the artifact metadata when installed, never <code>null</code>.
-     */
-    private File getLocalRepoFile( ProjectBuildingRequest buildingRequest, ArtifactMetadata metadata )
-    {
-        String path = repositoryManager.getPathForLocalMetadata( buildingRequest, metadata );
-        return new File( repositoryManager.getLocalRepositoryBasedir( buildingRequest ), path );
-    }
-
-}
diff --git a/maven-3.0.x/src/main/java/org/apache/maven/shared/transfer/repository/RepositoryManager.java b/maven-3.0.x/src/main/java/org/apache/maven/shared/transfer/repository/RepositoryManager.java
deleted file mode 100644
index a6588c2..0000000
--- a/maven-3.0.x/src/main/java/org/apache/maven/shared/transfer/repository/RepositoryManager.java
+++ /dev/null
@@ -1,72 +0,0 @@
-package org.apache.maven.shared.transfer.repository;
-
-/*
- * 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.
- */
-
-import java.io.File;
-
-import org.apache.maven.artifact.Artifact;
-import org.apache.maven.artifact.metadata.ArtifactMetadata;
-import org.apache.maven.project.ProjectBuildingRequest;
-import org.apache.maven.shared.transfer.artifact.ArtifactCoordinate;
-
-/**
- * 
- */
-public interface RepositoryManager
-{
-
-    /**
-     * @param buildingRequest {@link ProjectBuildingRequest}
-     * @param artifact {@link Artifact}
-     * @return the path of the local artifact.
-     */
-    String getPathForLocalArtifact( ProjectBuildingRequest buildingRequest, Artifact artifact );
-
-    /**
-     * @param buildingRequest {@link ProjectBuildingRequest}
-     * @param coordinate {@link ArtifactCoordinate}
-     * @return the path for the local artifact.
-     */
-    String getPathForLocalArtifact( ProjectBuildingRequest buildingRequest, ArtifactCoordinate coordinate );
-    
-    /**
-     * @param buildingRequest {@link ProjectBuildingRequest}
-     * @param metadata {@link ArtifactMetadata}
-     * @return the path of the local metadata.
-     */
-    String getPathForLocalMetadata( ProjectBuildingRequest buildingRequest, ArtifactMetadata metadata );
-
-    /**
-     * Create a new {@code ProjectBuildingRequest} with an adjusted repository session.
-     * 
-     * @param request the project building request
-     * @param basedir the base directory of the local repository
-     * @return a new project building request
-     */
-    ProjectBuildingRequest setLocalRepositoryBasedir( ProjectBuildingRequest request, File basedir );
-
-    /**
-     * Get the localRepositryBasedir as specified in the repository session of the request
-     * 
-     * @param request the build request
-     * @return the local repository base directory
-     */
-    File getLocalRepositoryBasedir( ProjectBuildingRequest request );
-}
diff --git a/maven-3.0.x/src/main/java/org/apache/maven/shared/transfer/repository/RepositoryManagerException.java b/maven-3.0.x/src/main/java/org/apache/maven/shared/transfer/repository/RepositoryManagerException.java
deleted file mode 100644
index ef5286c..0000000
--- a/maven-3.0.x/src/main/java/org/apache/maven/shared/transfer/repository/RepositoryManagerException.java
+++ /dev/null
@@ -1,40 +0,0 @@
-package org.apache.maven.shared.transfer.repository;
-
-/*
- * 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.
- */
-
-/**
- * 
- */
-public class RepositoryManagerException
-    extends Exception
-{
-
-    private static final long serialVersionUID = 8396752347704808545L;
-
-    /**
-     * @param message The message of the exception.
-     * @param cause {@link Throwable}
-     */
-    public RepositoryManagerException( String message, Throwable cause )
-    {
-        super( message, cause );
-    }
-
-}
diff --git a/maven-3.0.x/src/main/java/org/apache/maven/shared/transfer/repository/internal/DefaultRepositoryManager.java b/maven-3.0.x/src/main/java/org/apache/maven/shared/transfer/repository/internal/DefaultRepositoryManager.java
deleted file mode 100644
index c29cc08..0000000
--- a/maven-3.0.x/src/main/java/org/apache/maven/shared/transfer/repository/internal/DefaultRepositoryManager.java
+++ /dev/null
@@ -1,191 +0,0 @@
-package org.apache.maven.shared.transfer.repository.internal;
-
-/*
- * 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.
- */
-
-import java.io.File;
-
-import org.apache.maven.artifact.Artifact;
-import org.apache.maven.artifact.metadata.ArtifactMetadata;
-import org.apache.maven.project.ProjectBuildingRequest;
-import org.apache.maven.project.artifact.ProjectArtifactMetadata;
-import org.apache.maven.shared.transfer.artifact.ArtifactCoordinate;
-import org.apache.maven.shared.transfer.artifact.DefaultArtifactCoordinate;
-import org.apache.maven.shared.transfer.repository.RepositoryManager;
-import org.apache.maven.shared.transfer.repository.RepositoryManagerException;
-import org.codehaus.plexus.PlexusConstants;
-import org.codehaus.plexus.PlexusContainer;
-import org.codehaus.plexus.component.annotations.Component;
-import org.codehaus.plexus.component.repository.exception.ComponentLookupException;
-import org.codehaus.plexus.context.Context;
-import org.codehaus.plexus.context.ContextException;
-import org.codehaus.plexus.personality.plexus.lifecycle.phase.Contextualizable;
-
-/**
- * 
- */
-@Component( role = RepositoryManager.class )
-class DefaultRepositoryManager
-    implements RepositoryManager, Contextualizable 
-{
-    private PlexusContainer container;
-    
-    @Override
-    public String getPathForLocalArtifact( ProjectBuildingRequest buildingRequest, Artifact artifact )
-    {
-        try
-        {
-            return getMavenRepositoryManager( buildingRequest ).getPathForLocalArtifact( artifact );
-        }
-        catch ( ComponentLookupException | RepositoryManagerException e )
-        {
-            throw new IllegalStateException( e.getMessage(), e );
-        }
-    }
-
-    @Override
-    public String getPathForLocalArtifact( ProjectBuildingRequest buildingRequest, ArtifactCoordinate coor )
-    {
-        try
-        {
-            return getMavenRepositoryManager( buildingRequest ).getPathForLocalArtifact( coor );
-        }
-        catch ( ComponentLookupException | RepositoryManagerException e )
-        {
-            throw new IllegalStateException( e.getMessage(), e );
-        }
-    }
-
-    @Override
-    public String getPathForLocalMetadata( ProjectBuildingRequest buildingRequest, ArtifactMetadata metadata )
-    {
-        if ( metadata instanceof ProjectArtifactMetadata )
-        {
-            DefaultArtifactCoordinate pomCoordinate = new DefaultArtifactCoordinate();
-            pomCoordinate.setGroupId( metadata.getGroupId() );
-            pomCoordinate.setArtifactId( metadata.getArtifactId() );
-            pomCoordinate.setVersion( metadata.getBaseVersion() );
-            pomCoordinate.setExtension( "pom" );
-            return getPathForLocalArtifact( buildingRequest, pomCoordinate );
-        }
-
-        try
-        {
-            return getMavenRepositoryManager( buildingRequest ).getPathForLocalMetadata( metadata );
-        }
-        catch ( ComponentLookupException | RepositoryManagerException e )
-        {
-            throw new IllegalStateException( e.getMessage(), e );
-        }
-    }
-
-    @Override
-    public ProjectBuildingRequest setLocalRepositoryBasedir( ProjectBuildingRequest buildingRequest, File basedir )
-    {
-        try
-        {
-            return getMavenRepositoryManager( buildingRequest ).setLocalRepositoryBasedir( buildingRequest, basedir );
-        }
-        catch ( ComponentLookupException | RepositoryManagerException e )
-        {
-            throw new IllegalStateException( e.getMessage(), e );
-        }
-    }
-
-    @Override
-    public File getLocalRepositoryBasedir( ProjectBuildingRequest buildingRequest )
-    {
-        try
-        {
-            return getMavenRepositoryManager( buildingRequest ).getLocalRepositoryBasedir();
-        }
-        catch ( ComponentLookupException | RepositoryManagerException e )
-        {
-            throw new IllegalStateException( e.getMessage(), e );
-        }
-    }
-
-    /**
-     * @return true if the current Maven version is Maven 3.1.
-     */
-    private boolean isMaven31()
-    {
-        return canFindCoreClass( "org.eclipse.aether.artifact.Artifact" ); // Maven 3.1 specific
-    }
-
-    /**
-     * @return true if the current Maven version is Maven 3.0.2
-     */
-    private boolean isMaven302()
-    {
-        return canFindCoreClass( "org.sonatype.aether.spi.localrepo.LocalRepositoryManagerFactory" );
-    }
-
-    private boolean canFindCoreClass( String className )
-    {
-        try
-        {
-            Thread.currentThread().getContextClassLoader().loadClass( className );
-
-            return true;
-        }
-        catch ( ClassNotFoundException e )
-        {
-            return false;
-        }
-    }
-    
-    private MavenRepositoryManager getMavenRepositoryManager( ProjectBuildingRequest buildingRequest )
-        throws ComponentLookupException, RepositoryManagerException
-    {
-        if ( isMaven31() )
-        {
-            org.eclipse.aether.RepositorySystem m31RepositorySystem =
-                            container.lookup( org.eclipse.aether.RepositorySystem.class );
-
-            org.eclipse.aether.RepositorySystemSession session = Invoker.invoke( buildingRequest,
-                    "getRepositorySession" );
-
-            return new Maven31RepositoryManager( m31RepositorySystem, session );
-        }
-        else
-        {
-            org.sonatype.aether.RepositorySystem m30RepositorySystem =
-                container.lookup( org.sonatype.aether.RepositorySystem.class );
-
-            org.sonatype.aether.RepositorySystemSession session = Invoker.invoke( buildingRequest,
-                    "getRepositorySession" );
-            
-            if ( isMaven302() )
-            {
-                return new Maven302RepositoryManager( m30RepositorySystem, session );
-                
-            }
-            else
-            {
-                return new Maven30RepositoryManager( m30RepositorySystem, session );
-            }
-        }
-    }
-    
-    public void contextualize( Context context ) throws ContextException
-    {
-        container = (PlexusContainer) context.get( PlexusConstants.PLEXUS_KEY );
-    }
-}
diff --git a/maven-3.0.x/src/main/java/org/apache/maven/shared/transfer/repository/internal/Invoker.java b/maven-3.0.x/src/main/java/org/apache/maven/shared/transfer/repository/internal/Invoker.java
deleted file mode 100644
index 48342dc..0000000
--- a/maven-3.0.x/src/main/java/org/apache/maven/shared/transfer/repository/internal/Invoker.java
+++ /dev/null
@@ -1,79 +0,0 @@
-package org.apache.maven.shared.transfer.repository.internal;
-
-/*
- * 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.
- */
-
-import java.lang.reflect.InvocationTargetException;
-
-import org.apache.maven.shared.transfer.repository.RepositoryManagerException;
-
-/**
- * Invokes method on objects using reflection.
- */
-final class Invoker
-{
-    private Invoker()
-    {
-        // do not instantiate
-    }
-
-    public static <T> T invoke( Object object, String method )
-        throws RepositoryManagerException
-    {
-        try
-        {
-            @SuppressWarnings( "unchecked" )
-            T invoke = (T) object.getClass().getMethod( method ).invoke( object );
-            return invoke;
-        }
-        catch ( IllegalAccessException | InvocationTargetException | NoSuchMethodException e )
-        {
-            throw new RepositoryManagerException( e.getMessage(), e );
-        }
-    }
-
-    public static <T> T invoke( Object object, String method, Class<?> argClazz, Object arg )
-        throws RepositoryManagerException
-    {
-        try
-        {
-            final Class<?> objectClazz = object.getClass();
-            @SuppressWarnings( "unchecked" )
-            T invoke = (T) objectClazz.getMethod( method, argClazz ).invoke( object, arg );
-            return invoke;
-        }
-        catch ( IllegalAccessException | InvocationTargetException | NoSuchMethodException e )
-        {
-            throw new RepositoryManagerException( e.getMessage(), e );
-        }
-    }
-
-    public static Object invoke( Class<?> objectClazz, String staticMethod, Class<?> argClazz, Object arg )
-        throws RepositoryManagerException
-    {
-        try
-        {
-            return objectClazz.getMethod( staticMethod, argClazz ).invoke( null, arg );
-        }
-        catch ( IllegalAccessException | InvocationTargetException | NoSuchMethodException e )
-        {
-            throw new RepositoryManagerException( e.getMessage(), e );
-        }
-    }
-}
diff --git a/maven-3.0.x/src/main/java/org/apache/maven/shared/transfer/repository/internal/Maven302RepositoryManager.java b/maven-3.0.x/src/main/java/org/apache/maven/shared/transfer/repository/internal/Maven302RepositoryManager.java
index 29178f4..fe7a268 100644
--- a/maven-3.0.x/src/main/java/org/apache/maven/shared/transfer/repository/internal/Maven302RepositoryManager.java
+++ b/maven-3.0.x/src/main/java/org/apache/maven/shared/transfer/repository/internal/Maven302RepositoryManager.java
@@ -20,18 +20,24 @@ package org.apache.maven.shared.transfer.repository.internal;
  */
 
 import org.sonatype.aether.RepositorySystem;
-import org.sonatype.aether.RepositorySystemSession;
 import org.sonatype.aether.repository.LocalRepository;
 
+import javax.inject.Inject;
+import javax.inject.Named;
+import javax.inject.Singleton;
+
 /**
- * 
+ *
  */
-class Maven302RepositoryManager
-    extends Maven30RepositoryManager
+@Singleton
+@Named( "maven-3.0.2" )
+public class Maven302RepositoryManager
+        extends Maven30RepositoryManager
 {
-    Maven302RepositoryManager( RepositorySystem repositorySystem, RepositorySystemSession session )
+    @Inject
+    public Maven302RepositoryManager( RepositorySystem repositorySystem )
     {
-        super( repositorySystem, session );
+        super( repositorySystem );
     }
 
     /**
diff --git a/maven-3.0.x/src/main/java/org/apache/maven/shared/transfer/repository/internal/Maven30RepositoryManager.java b/maven-3.0.x/src/main/java/org/apache/maven/shared/transfer/repository/internal/Maven30RepositoryManager.java
index b7b9214..f1b7c1c 100644
--- a/maven-3.0.x/src/main/java/org/apache/maven/shared/transfer/repository/internal/Maven30RepositoryManager.java
+++ b/maven-3.0.x/src/main/java/org/apache/maven/shared/transfer/repository/internal/Maven30RepositoryManager.java
@@ -19,14 +19,12 @@ package org.apache.maven.shared.transfer.repository.internal;
  * under the License.
  */
 
-import java.io.File;
-
 import org.apache.maven.RepositoryUtils;
 import org.apache.maven.artifact.metadata.ArtifactMetadata;
 import org.apache.maven.project.DefaultProjectBuildingRequest;
 import org.apache.maven.project.ProjectBuildingRequest;
 import org.apache.maven.shared.transfer.artifact.ArtifactCoordinate;
-import org.apache.maven.shared.transfer.repository.RepositoryManagerException;
+import org.apache.maven.shared.transfer.support.DelegateSupport;
 import org.sonatype.aether.RepositorySystem;
 import org.sonatype.aether.RepositorySystemSession;
 import org.sonatype.aether.artifact.Artifact;
@@ -39,77 +37,71 @@ import org.sonatype.aether.util.DefaultRepositorySystemSession;
 import org.sonatype.aether.util.artifact.DefaultArtifact;
 import org.sonatype.aether.util.metadata.DefaultMetadata;
 
+import javax.inject.Inject;
+import javax.inject.Named;
+import javax.inject.Singleton;
+import java.io.File;
+import java.util.Objects;
+
 /**
- * 
+ *
  */
-class Maven30RepositoryManager
-    implements MavenRepositoryManager
+@Singleton
+@Named
+public class Maven30RepositoryManager
+        extends DelegateSupport
+        implements RepositoryManagerDelegate
 {
     private final RepositorySystem repositorySystem;
 
-    private final RepositorySystemSession session;
-    
-    Maven30RepositoryManager( RepositorySystem repositorySystem, RepositorySystemSession session )
+    @Inject
+    public Maven30RepositoryManager( RepositorySystem repositorySystem )
     {
-        this.repositorySystem = repositorySystem;
-        this.session = session;
+        this.repositorySystem = Objects.requireNonNull( repositorySystem );
     }
 
     @Override
-    public String getPathForLocalArtifact( org.apache.maven.artifact.Artifact mavenArtifact )
+    public String getPathForLocalArtifact( ProjectBuildingRequest buildingRequest,
+                                           org.apache.maven.artifact.Artifact mavenArtifact )
     {
-        Artifact aetherArtifact;
-
-        // LRM.getPathForLocalArtifact() won't throw an Exception, so translate reflection error to RuntimeException
-        try
-        {
-            aetherArtifact = (Artifact) Invoker.invoke( RepositoryUtils.class, "toArtifact",
-                                                        org.apache.maven.artifact.Artifact.class, mavenArtifact );
-        }
-        catch ( RepositoryManagerException e )
-        {
-            throw new RuntimeException( e.getMessage(), e );
-        }
+        Artifact aetherArtifact = RepositoryUtils.toArtifact( mavenArtifact );
 
-        return session.getLocalRepositoryManager().getPathForLocalArtifact( aetherArtifact );
+        return buildingRequest.getRepositorySession().getLocalRepositoryManager().getPathForLocalArtifact(
+                aetherArtifact );
     }
 
     @Override
-    public String getPathForLocalArtifact( ArtifactCoordinate coordinate )
+    public String getPathForLocalArtifact( ProjectBuildingRequest buildingRequest,
+                                           ArtifactCoordinate coordinate )
     {
         Artifact aetherArtifact = toArtifact( coordinate );
 
         // LRM.getPathForLocalArtifact() won't throw an Exception, so translate reflection error to RuntimeException
 
-        return session.getLocalRepositoryManager().getPathForLocalArtifact( aetherArtifact );
+        return buildingRequest.getRepositorySession().getLocalRepositoryManager().getPathForLocalArtifact(
+                aetherArtifact );
     }
 
     @Override
-    public String getPathForLocalMetadata( ArtifactMetadata metadata )
+    public String getPathForLocalMetadata( ProjectBuildingRequest buildingRequest,
+                                           ArtifactMetadata metadata )
     {
-        Metadata aetherMetadata =
-            new DefaultMetadata( metadata.getGroupId(),
-                                 metadata.storedInGroupDirectory() ? null : metadata.getArtifactId(),
-                                 metadata.storedInArtifactVersionDirectory() ? metadata.getBaseVersion() : null,
-                                 "maven-metadata.xml", Nature.RELEASE_OR_SNAPSHOT );
+        Metadata aetherMetadata = new DefaultMetadata( metadata.getGroupId(),
+                metadata.storedInGroupDirectory() ? null : metadata.getArtifactId(),
+                metadata.storedInArtifactVersionDirectory() ? metadata.getBaseVersion() : null, "maven-metadata.xml",
+                Nature.RELEASE_OR_SNAPSHOT );
 
-        return session.getLocalRepositoryManager().getPathForLocalMetadata( aetherMetadata );
+        return buildingRequest.getRepositorySession().getLocalRepositoryManager().getPathForLocalMetadata(
+                aetherMetadata );
     }
-    
+
     @Override
-    public ProjectBuildingRequest setLocalRepositoryBasedir( ProjectBuildingRequest buildingRequest, File basedir )
+    public ProjectBuildingRequest setLocalRepositoryBasedir( ProjectBuildingRequest buildingRequest,
+                                                             File basedir )
     {
         ProjectBuildingRequest newRequest = new DefaultProjectBuildingRequest( buildingRequest );
 
-        RepositorySystemSession session;
-        try
-        {
-            session = Invoker.invoke( buildingRequest, "getRepositorySession" );
-        }
-        catch ( RepositoryManagerException e )
-        {
-            throw new RuntimeException( e.getMessage(), e );
-        }
+        RepositorySystemSession session = buildingRequest.getRepositorySession();
 
         // "clone" session and replace localRepository
         DefaultRepositorySystemSession newSession = new DefaultRepositorySystemSession( session );
@@ -120,27 +112,20 @@ class Maven30RepositoryManager
         // keep same repositoryType
         String repositoryType = resolveRepositoryType( session.getLocalRepository() );
 
-        LocalRepositoryManager localRepositoryManager =
-            repositorySystem.newLocalRepositoryManager( new LocalRepository( basedir, repositoryType ) );
+        LocalRepositoryManager localRepositoryManager = repositorySystem.newLocalRepositoryManager(
+                new LocalRepository( basedir, repositoryType ) );
 
         newSession.setLocalRepositoryManager( localRepositoryManager );
 
-        try
-        {
-            Invoker.invoke( newRequest, "setRepositorySession", RepositorySystemSession.class, newSession );
-        }
-        catch ( RepositoryManagerException e )
-        {
-            throw new RuntimeException( e.getMessage(), e );
-        }
+        newRequest.setRepositorySession( newSession );
 
         return newRequest;
     }
 
     @Override
-    public File getLocalRepositoryBasedir()
+    public File getLocalRepositoryBasedir( ProjectBuildingRequest buildingRequest )
     {
-        return session.getLocalRepository().getBasedir();
+        return buildingRequest.getRepositorySession().getLocalRepository().getBasedir();
     }
 
     /**
@@ -163,9 +148,8 @@ class Maven30RepositoryManager
             return null;
         }
 
-        Artifact result =
-            new DefaultArtifact( coordinate.getGroupId(), coordinate.getArtifactId(), coordinate.getClassifier(),
-                                 coordinate.getExtension(), coordinate.getVersion() );
+        Artifact result = new DefaultArtifact( coordinate.getGroupId(), coordinate.getArtifactId(),
+                coordinate.getClassifier(), coordinate.getExtension(), coordinate.getVersion() );
 
         return result;
     }
diff --git a/maven-3.0.x/src/main/java/org/apache/maven/shared/transfer/repository/internal/Maven31RepositoryManager.java b/maven-3.0.x/src/main/java/org/apache/maven/shared/transfer/repository/internal/Maven31RepositoryManager.java
deleted file mode 100644
index 6f486a0..0000000
--- a/maven-3.0.x/src/main/java/org/apache/maven/shared/transfer/repository/internal/Maven31RepositoryManager.java
+++ /dev/null
@@ -1,181 +0,0 @@
-package org.apache.maven.shared.transfer.repository.internal;
-
-/*
- * 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.
- */
-
-import java.io.File;
-
-import org.apache.maven.RepositoryUtils;
-import org.apache.maven.artifact.metadata.ArtifactMetadata;
-import org.apache.maven.project.DefaultProjectBuildingRequest;
-import org.apache.maven.project.ProjectBuildingRequest;
-import org.apache.maven.shared.transfer.artifact.ArtifactCoordinate;
-import org.apache.maven.shared.transfer.repository.RepositoryManagerException;
-import org.eclipse.aether.DefaultRepositoryCache;
-import org.eclipse.aether.DefaultRepositorySystemSession;
-import org.eclipse.aether.RepositorySystem;
-import org.eclipse.aether.RepositorySystemSession;
-import org.eclipse.aether.artifact.Artifact;
-import org.eclipse.aether.artifact.DefaultArtifact;
-import org.eclipse.aether.metadata.DefaultMetadata;
-import org.eclipse.aether.metadata.Metadata;
-import org.eclipse.aether.metadata.Metadata.Nature;
-import org.eclipse.aether.repository.LocalRepository;
-import org.eclipse.aether.repository.LocalRepositoryManager;
-
-/**
- * 
- */
-class Maven31RepositoryManager
-    implements MavenRepositoryManager
-{
-    private final RepositorySystem repositorySystem;
-
-    private final RepositorySystemSession session;
-
-    Maven31RepositoryManager( RepositorySystem repositorySystem, 
-                              RepositorySystemSession session )
-    {
-        this.repositorySystem = repositorySystem;
-        this.session = session;
-    }
-
-    @Override
-    public String getPathForLocalArtifact( org.apache.maven.artifact.Artifact mavenArtifact )
-    {
-        Artifact aetherArtifact;
-
-        // LRM.getPathForLocalArtifact() won't throw an Exception, so translate reflection error to RuntimeException
-        try
-        {
-            aetherArtifact = (Artifact) Invoker.invoke( RepositoryUtils.class, "toArtifact",
-                                                        org.apache.maven.artifact.Artifact.class, mavenArtifact );
-        }
-        catch ( RepositoryManagerException e )
-        {
-            throw new RuntimeException( e.getMessage(), e );
-        }
-
-        return session.getLocalRepositoryManager().getPathForLocalArtifact( aetherArtifact );
-    }
-
-    @Override
-    public String getPathForLocalArtifact( ArtifactCoordinate coordinate )
-    {
-        Artifact aetherArtifact = toArtifact( coordinate );
-
-        return session.getLocalRepositoryManager().getPathForLocalArtifact( aetherArtifact );
-    }
-    
-    @Override
-    public String getPathForLocalMetadata( ArtifactMetadata metadata )
-    {
-        Metadata aetherMetadata =
-            new DefaultMetadata( metadata.getGroupId(),
-                                 metadata.storedInGroupDirectory() ? null : metadata.getArtifactId(),
-                                 metadata.storedInArtifactVersionDirectory() ? metadata.getBaseVersion() : null,
-                                 "maven-metadata.xml", Nature.RELEASE_OR_SNAPSHOT );
-
-        return session.getLocalRepositoryManager().getPathForLocalMetadata( aetherMetadata );
-    }
-
-    @Override
-    public ProjectBuildingRequest setLocalRepositoryBasedir( ProjectBuildingRequest buildingRequest, File basedir )
-    {
-        ProjectBuildingRequest newRequest = new DefaultProjectBuildingRequest( buildingRequest );
-
-        RepositorySystemSession session;
-        try
-        {
-            session = Invoker.invoke( buildingRequest, "getRepositorySession" );
-        }
-        catch ( RepositoryManagerException e )
-        {
-            throw new RuntimeException( e.getMessage(), e );
-        }
-
-        // "clone" session and replace localRepository
-        DefaultRepositorySystemSession newSession = new DefaultRepositorySystemSession( session );
-
-        // Clear cache, since we're using a new local repository
-        newSession.setCache( new DefaultRepositoryCache() );
-
-        // keep same repositoryType
-        String repositoryType = resolveRepositoryType( session.getLocalRepository() );
-
-        LocalRepositoryManager localRepositoryManager =
-            repositorySystem.newLocalRepositoryManager( newSession, new LocalRepository( basedir, repositoryType ) );
-
-        newSession.setLocalRepositoryManager( localRepositoryManager );
-
-        try
-        {
-            Invoker.invoke( newRequest, "setRepositorySession", RepositorySystemSession.class, newSession );
-        }
-        catch ( RepositoryManagerException e )
-        {
-            throw new RuntimeException( e.getMessage(), e );
-        }
-
-        return newRequest;
-    }
-
-    @Override
-    public File getLocalRepositoryBasedir()
-    {
-        return session.getLocalRepository().getBasedir();
-    }
-
-    /**
-     * @param localRepository {@link LocalRepository}
-     * @return the resolved type.
-     */
-    protected String resolveRepositoryType( LocalRepository localRepository )
-    {
-        String repositoryType;
-        if ( "enhanced".equals( localRepository.getContentType() ) )
-        {
-            repositoryType = "default";
-        }
-        else
-        {
-            // this should be "simple"
-            repositoryType = localRepository.getContentType();
-        }
-        return repositoryType;
-    }
-
-    /**
-     * @param coordinate {@link ArtifactCoordinate}
-     * @return {@link Artifact}
-     */
-    protected Artifact toArtifact( ArtifactCoordinate coordinate )
-    {
-        if ( coordinate == null )
-        {
-            return null;
-        }
-
-        Artifact result =
-            new DefaultArtifact( coordinate.getGroupId(), coordinate.getArtifactId(), coordinate.getClassifier(),
-                                 coordinate.getExtension(), coordinate.getVersion() );
-
-        return result;
-    }
-}
diff --git a/maven-3.0.x/src/main/java/org/apache/maven/shared/transfer/repository/internal/MavenRepositoryManager.java b/maven-3.0.x/src/main/java/org/apache/maven/shared/transfer/repository/internal/MavenRepositoryManager.java
deleted file mode 100644
index e494b15..0000000
--- a/maven-3.0.x/src/main/java/org/apache/maven/shared/transfer/repository/internal/MavenRepositoryManager.java
+++ /dev/null
@@ -1,67 +0,0 @@
-package org.apache.maven.shared.transfer.repository.internal;
-
-/*
- * 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.
- */
-
-import java.io.File;
-
-import org.apache.maven.artifact.Artifact;
-import org.apache.maven.artifact.metadata.ArtifactMetadata;
-import org.apache.maven.project.ProjectBuildingRequest;
-import org.apache.maven.shared.transfer.artifact.ArtifactCoordinate;
-
-/**
- * 
- * @author Robert Scholte
- */
-interface MavenRepositoryManager
-{
-    /**
-     * @param artifact {@link Artifact}
-     * @return the path of the local artifact.
-     */
-    String getPathForLocalArtifact( Artifact artifact );
-
-    /**
-     * @param coordinate {@link ArtifactCoordinate}
-     * @return the path for the local artifact.
-     */
-    String getPathForLocalArtifact( ArtifactCoordinate coordinate );
-    
-    /**
-     * @param metadata {@link ArtifactMetadata}
-     * @return the path of the local metadata.
-     */
-    String getPathForLocalMetadata( ArtifactMetadata metadata );
-
-    /**
-     * Create a new {@code ProjectBuildingRequest} with an adjusted repository session.
-     * 
-     * @param basedir the base directory of the local repository
-     * @return a new project building request
-     */
-    ProjectBuildingRequest setLocalRepositoryBasedir( ProjectBuildingRequest request, File basedir );
-
-    /**
-     * Get the localRepositryBasedir as specified in the repository session of the request
-     * 
-     * @return the local repository base directory
-     */
-    File getLocalRepositoryBasedir();
-}
diff --git a/maven-3.0.x/src/test/java/org/apache/maven/shared/transfer/artifact/DefaultArtifactCoordinateTest.java b/maven-3.0.x/src/test/java/org/apache/maven/shared/transfer/artifact/DefaultArtifactCoordinateTest.java
deleted file mode 100644
index 5e3923d..0000000
--- a/maven-3.0.x/src/test/java/org/apache/maven/shared/transfer/artifact/DefaultArtifactCoordinateTest.java
+++ /dev/null
@@ -1,50 +0,0 @@
-package org.apache.maven.shared.transfer.artifact;
-
-/*
- * 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.
- */
-
-import static org.junit.Assert.*;
-
-import org.apache.maven.shared.transfer.artifact.DefaultArtifactCoordinate;
-import org.junit.Test;
-
-public class DefaultArtifactCoordinateTest
-{
-    @Test
-    public void testToStringWithoutType()
-    {
-        DefaultArtifactCoordinate coordinate = new DefaultArtifactCoordinate();
-        coordinate.setGroupId( "GROUPID" );
-        coordinate.setArtifactId( "ARTIFACTID" );
-        coordinate.setVersion( "VERSION" );
-        assertEquals( "GROUPID:ARTIFACTID:jar:VERSION", coordinate.toString() );
-    }
-
-    @Test
-    public void testToStringWithClassifier()
-    {
-        DefaultArtifactCoordinate coordinate = new DefaultArtifactCoordinate();
-        coordinate.setGroupId( "GROUPID" );
-        coordinate.setArtifactId( "ARTIFACTID" );
-        coordinate.setVersion( "VERSION" );
-        coordinate.setClassifier( "CLASSIFIER" );
-        coordinate.setExtension( "EXTENSION" );
-        assertEquals( "GROUPID:ARTIFACTID:EXTENSION:CLASSIFIER:VERSION", coordinate.toString() );
-    }
-}
diff --git a/maven-3.0.x/src/test/java/org/apache/maven/shared/transfer/artifact/deploy/internal/DefaultArtifactDeployerTest.java b/maven-3.0.x/src/test/java/org/apache/maven/shared/transfer/artifact/deploy/internal/DefaultArtifactDeployerTest.java
deleted file mode 100644
index 14ce5c4..0000000
--- a/maven-3.0.x/src/test/java/org/apache/maven/shared/transfer/artifact/deploy/internal/DefaultArtifactDeployerTest.java
+++ /dev/null
@@ -1,117 +0,0 @@
-package org.apache.maven.shared.transfer.artifact.deploy.internal;
-
-/*
- * 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.
- */
-
-import static org.mockito.Mockito.mock;
-
-import java.util.Collections;
-
-import org.apache.maven.artifact.Artifact;
-import org.apache.maven.project.ProjectBuildingRequest;
-import org.apache.maven.shared.transfer.artifact.deploy.ArtifactDeployer;
-import org.apache.maven.shared.transfer.artifact.deploy.ArtifactDeployerException;
-import org.apache.maven.shared.transfer.artifact.deploy.internal.DefaultArtifactDeployer;
-import org.junit.Before;
-import org.junit.Rule;
-import org.junit.Test;
-import org.junit.rules.ExpectedException;
-
-/**
- * Check the parameter contracts which have been made based on the interface {@link ArtifactDeployer}.
- * 
- * @author Karl Heinz Marbaise <a href="mailto:khmarbaise@apache.org">khmabaise@apache.org</a>
- */
-public class DefaultArtifactDeployerTest
-{
-    @Rule
-    public ExpectedException thrown = ExpectedException.none();
-    
-    private ArtifactDeployer dap;
-    
-    @Before
-    public void setUp()
-    {
-        dap = new DefaultArtifactDeployer();
-    }
-
-    @Test
-    public void deployShouldReturnIllegalArgumentExceptionForFirstParameterWithNull()
-        throws ArtifactDeployerException
-    {
-        thrown.expect( IllegalArgumentException.class );
-        thrown.expectMessage( "The parameter request is not allowed to be null." );
-        dap.deploy( null, Collections.<Artifact>emptyList() );
-    }
-
-    @Test
-    public void deployShouldReturnIllegalArgumentExceptionForSecondParameterWithNull()
-        throws ArtifactDeployerException
-    {
-        ProjectBuildingRequest pbr = mock( ProjectBuildingRequest.class );
-
-        thrown.expect( IllegalArgumentException.class );
-        thrown.expectMessage( "The parameter mavenArtifacts is not allowed to be null." );
-        dap.deploy( pbr, null );
-    }
-
-    @Test
-    public void deployShouldReturnIllegalArgumentExceptionForSecondParameterWithEmpty()
-        throws ArtifactDeployerException
-    {
-        ProjectBuildingRequest pbr = mock( ProjectBuildingRequest.class );
-
-        thrown.expect( IllegalArgumentException.class );
-        thrown.expectMessage( "The collection mavenArtifacts is not allowed to be empty." );
-        dap.deploy( pbr, Collections.<Artifact>emptyList() );
-    }
-
-
-    @Test
-    public void deploy3ParametersShouldReturnIllegalArgumentExceptionForFirstParameterWithNull()
-        throws ArtifactDeployerException
-    {
-        thrown.expect( IllegalArgumentException.class );
-        thrown.expectMessage( "The parameter request is not allowed to be null." );
-        dap.deploy( null, null, Collections.<Artifact>emptyList() );
-    }
-
-    @Test
-    public void deploy3ParametersShouldReturnIllegalArgumentExceptionForSecondParameterWithNull()
-        throws ArtifactDeployerException
-    {
-        ProjectBuildingRequest pbr = mock( ProjectBuildingRequest.class );
-
-        thrown.expect( IllegalArgumentException.class );
-        thrown.expectMessage( "The parameter mavenArtifacts is not allowed to be null." );
-        dap.deploy( pbr, null, null );
-    }
-
-    @Test
-    public void deploy3ParametersShouldReturnIllegalArgumentExceptionForSecondParameterWithEmpty()
-        throws ArtifactDeployerException
-    {
-        ProjectBuildingRequest pbr = mock( ProjectBuildingRequest.class );
-
-        thrown.expect( IllegalArgumentException.class );
-        thrown.expectMessage( "The collection mavenArtifacts is not allowed to be empty." );
-        dap.deploy( pbr, null, Collections.<Artifact>emptyList() );
-    }
-
-}
diff --git a/maven-3.0.x/src/test/java/org/apache/maven/shared/transfer/artifact/install/internal/DefaultArtifactInstallerTest.java b/maven-3.0.x/src/test/java/org/apache/maven/shared/transfer/artifact/install/internal/DefaultArtifactInstallerTest.java
deleted file mode 100644
index 2980330..0000000
--- a/maven-3.0.x/src/test/java/org/apache/maven/shared/transfer/artifact/install/internal/DefaultArtifactInstallerTest.java
+++ /dev/null
@@ -1,137 +0,0 @@
-package org.apache.maven.shared.transfer.artifact.install.internal;
-
-/*
- * 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.
- */
-
-import static org.mockito.Mockito.mock;
-import static org.mockito.Mockito.when;
-
-import java.io.File;
-import java.util.Collections;
-import java.util.List;
-
-import org.apache.maven.artifact.Artifact;
-import org.apache.maven.project.ProjectBuildingRequest;
-import org.apache.maven.shared.transfer.artifact.install.ArtifactInstaller;
-import org.apache.maven.shared.transfer.artifact.install.ArtifactInstallerException;
-import org.apache.maven.shared.transfer.artifact.install.internal.DefaultArtifactInstaller;
-import org.junit.Rule;
-import org.junit.Test;
-import org.junit.rules.ExpectedException;
-
-/**
- * Check the parameter contracts which have been made based on the interface {@link ArtifactInstaller}.
- * 
- * @author Karl Heinz Marbaise <a href="mailto:khmarbaise@apache.org">khmabaise@apache.org</a>
- */
-public class DefaultArtifactInstallerTest
-{
-    @Rule
-    public ExpectedException thrown = ExpectedException.none();
-
-    @Test
-    public void installShouldReturnIllegalArgumentExceptionForFirstParameterWithNull() throws IllegalArgumentException, ArtifactInstallerException
-    {
-        DefaultArtifactInstaller dai = new DefaultArtifactInstaller();
-
-        thrown.expect( IllegalArgumentException.class );
-        thrown.expectMessage( "The parameter request is not allowed to be null." );
-        dai.install( null, Collections.<Artifact>emptyList() );
-    }
-
-    @Test
-    public void installShouldReturnIllegalArgumentExceptionForSecondParameterWithNull()
-        throws ArtifactInstallerException
-    {
-        DefaultArtifactInstaller dai = new DefaultArtifactInstaller();
-
-        thrown.expect( IllegalArgumentException.class );
-        thrown.expectMessage( "The parameter mavenArtifacts is not allowed to be null." );
-        ProjectBuildingRequest pbr = mock( ProjectBuildingRequest.class );
-        dai.install( pbr, null );
-    }
-
-    @Test
-    public void installShouldReturnIllegalArgumentExceptionForSecondParameterWithEmpty()
-        throws ArtifactInstallerException
-    {
-        DefaultArtifactInstaller dai = new DefaultArtifactInstaller();
-
-        thrown.expect( IllegalArgumentException.class );
-        thrown.expectMessage( "The collection mavenArtifacts is not allowed to be empty." );
-        ProjectBuildingRequest pbr = mock( ProjectBuildingRequest.class );
-        dai.install( pbr, Collections.<Artifact>emptyList() );
-    }
-
-    @Test
-    public void installWith3ParametersShouldReturnIllegalArgumentExceptionForFirstParameterWithNull()
-        throws ArtifactInstallerException
-    {
-        DefaultArtifactInstaller dai = new DefaultArtifactInstaller();
-
-        thrown.expect( IllegalArgumentException.class );
-        thrown.expectMessage( "The parameter request is not allowed to be null." );
-        File localRepository = mock( File.class );
-        dai.install( null, localRepository, Collections.<Artifact>emptyList() );
-    }
-
-    @Test
-    public void installWith3ParametersShouldReturnIllegalArgumentExceptionForSecondParameterWithNull()
-        throws ArtifactInstallerException
-    {
-        DefaultArtifactInstaller dai = new DefaultArtifactInstaller();
-
-        thrown.expect( IllegalArgumentException.class );
-        thrown.expectMessage( "The parameter localRepository is not allowed to be null." );
-
-        List<Artifact> singleEntryList = Collections.singletonList( mock( Artifact.class ) );
-        ProjectBuildingRequest pbr = mock( ProjectBuildingRequest.class );
-        dai.install( pbr, null, singleEntryList );
-    }
-
-    @Test
-    public void installWith3ParametersShouldReturnIllegalArgumentExceptionForSecondParameterNotADirectory()
-        throws ArtifactInstallerException
-    {
-        DefaultArtifactInstaller dai = new DefaultArtifactInstaller();
-
-        thrown.expect( IllegalArgumentException.class );
-        thrown.expectMessage( "The parameter localRepository must be a directory." );
-        ProjectBuildingRequest pbr = mock( ProjectBuildingRequest.class );
-        List<Artifact> singleEntryList = Collections.singletonList( mock( Artifact.class ) );
-
-        File localRepository = mock( File.class );
-        when( localRepository.isDirectory() ).thenReturn( false );
-        dai.install( pbr, localRepository, singleEntryList );
-    }
-
-    @Test
-    public void installWith3ParametersShouldReturnIllegalArgumentExceptionForThirdParameterWithNull()
-        throws ArtifactInstallerException
-    {
-        DefaultArtifactInstaller dai = new DefaultArtifactInstaller();
-
-        thrown.expect( IllegalArgumentException.class );
-        thrown.expectMessage( "The parameter mavenArtifacts is not allowed to be null." );
-        ProjectBuildingRequest pbr = mock( ProjectBuildingRequest.class );
-        File localRepository = mock( File.class );
-        dai.install( pbr, localRepository, null );
-    }
-
-}
diff --git a/maven-3.0.x/src/test/java/org/apache/maven/shared/transfer/artifact/install/internal/Maven30ArtifactInstallerTest.java b/maven-3.0.x/src/test/java/org/apache/maven/shared/transfer/artifact/install/internal/Maven30ArtifactInstallerTest.java
index 19d1939..61ef91f 100644
--- a/maven-3.0.x/src/test/java/org/apache/maven/shared/transfer/artifact/install/internal/Maven30ArtifactInstallerTest.java
+++ b/maven-3.0.x/src/test/java/org/apache/maven/shared/transfer/artifact/install/internal/Maven30ArtifactInstallerTest.java
@@ -28,7 +28,8 @@ import org.apache.maven.artifact.DefaultArtifact;
 import org.apache.maven.artifact.handler.DefaultArtifactHandler;
 import org.apache.maven.project.DefaultProjectBuildingRequest;
 import org.apache.maven.repository.internal.MavenRepositorySystemSession;
-import org.apache.maven.shared.transfer.artifact.install.internal.Maven30ArtifactInstaller;
+import org.apache.maven.shared.transfer.repository.RepositoryManager;
+import org.apache.maven.shared.transfer.repository.internal.Maven30RepositoryManager;
 import org.codehaus.plexus.PlexusTestCase;
 import org.sonatype.aether.RepositorySystem;
 import org.sonatype.aether.impl.internal.SimpleLocalRepositoryManager;
... 31021 lines suppressed ...