You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@maven.apache.org by sl...@apache.org on 2020/12/26 15:08:37 UTC

[maven-artifact-transfer] branch MSHARED-944 updated (68dbc45 -> e751e3e)

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

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


 discard 68dbc45  [MSHARED-944] Cleanup - remove reflections, use injection
     new e751e3e  [MSHARED-944] Cleanup - remove reflections, use injection

This update added new revisions after undoing existing revisions.
That is to say, some revisions that were in the old version of the
branch are not in the new version.  This situation occurs
when a user --force pushes a change and generates a repository
containing something like this:

 * -- * -- B -- O -- O -- O   (68dbc45)
            \
             N -- N -- N   refs/heads/MSHARED-944 (e751e3e)

You should already have received notification emails for all of the O
revisions, and so the following emails describe only the N revisions
from the common base, B.

Any revisions marked "omit" are not gone; other references still
refer to them.  Any revisions marked "discard" are gone forever.

The 1 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.


Summary of changes:
 .../collection/internal/Maven31DependencyNodeAdapter.java     |  7 +++----
 .../resolve/internal/DefaultDependencyResolver.java           |  1 -
 .../project/deploy/internal/DefaultProjectDeployer.java       | 11 +++++------
 3 files changed, 8 insertions(+), 11 deletions(-)


[maven-artifact-transfer] 01/01: [MSHARED-944] Cleanup - remove reflections, use injection

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

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

commit e751e3e8ed137f3987a1c3aed15a6720f6e8e771
Author: Sylwester Lachiewicz <sl...@apache.org>
AuthorDate: Sat Dec 26 15:55:47 2020 +0100

    [MSHARED-944] Cleanup - remove reflections, use injection
---
 .../deploy/internal/DefaultArtifactDeployer.java   | 54 ++----------
 .../transfer/artifact/deploy/internal/Invoker.java | 66 ---------------
 .../deploy/internal/Maven31ArtifactDeployer.java   |  7 +-
 .../install/internal/DefaultArtifactInstaller.java | 56 +++----------
 .../artifact/install/internal/Invoker.java         | 65 ---------------
 .../install/internal/Maven31ArtifactInstaller.java |  3 +-
 .../resolve/internal/DefaultArtifactResolver.java  | 59 ++-----------
 .../artifact/resolve/internal/Invoker.java         | 67 ---------------
 .../resolve/internal/Maven31ArtifactResolver.java  | 18 ++--
 .../resolve/internal/Maven31ArtifactResult.java    | 12 +--
 .../internal/DefaultDependencyCollector.java       | 76 ++++-------------
 .../transfer/collection/internal/Invoker.java      | 96 ----------------------
 .../internal/Maven31DependencyCollector.java       | 25 +-----
 .../internal/Maven31DependencyNodeAdapter.java     | 17 +---
 .../internal/DefaultDependencyCollector.java       | 74 ++++-------------
 .../dependencies/collect/internal/Invoker.java     | 93 ---------------------
 .../internal/Maven31DependencyCollector.java       | 24 ++----
 .../internal/Maven31DependencyNodeAdapter.java     | 39 ++-------
 .../internal/DefaultDependencyResolver.java        | 77 ++++-------------
 .../dependencies/resolve/internal/Invoker.java     | 95 ---------------------
 .../resolve/internal/Maven31ArtifactResult.java    | 15 +---
 .../internal/Maven31DependencyResolver.java        | 38 ++-------
 .../deploy/internal/DefaultProjectDeployer.java    | 14 ++--
 .../internal/DefaultRepositoryManager.java         | 75 +++--------------
 .../transfer/repository/internal/Invoker.java      | 79 ------------------
 .../internal/Maven31RepositoryManager.java         | 48 ++---------
 26 files changed, 138 insertions(+), 1154 deletions(-)

diff --git a/src/main/java/org/apache/maven/shared/transfer/artifact/deploy/internal/DefaultArtifactDeployer.java b/src/main/java/org/apache/maven/shared/transfer/artifact/deploy/internal/DefaultArtifactDeployer.java
index e51e784..3170123 100644
--- a/src/main/java/org/apache/maven/shared/transfer/artifact/deploy/internal/DefaultArtifactDeployer.java
+++ b/src/main/java/org/apache/maven/shared/transfer/artifact/deploy/internal/DefaultArtifactDeployer.java
@@ -19,31 +19,25 @@ package org.apache.maven.shared.transfer.artifact.deploy.internal;
  * 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;
+import org.codehaus.plexus.component.annotations.Requirement;
 import org.eclipse.aether.RepositorySystem;
-import org.eclipse.aether.RepositorySystemSession;
+
+import java.util.Collection;
 
 /**
  *
  */
 @Component( role = ArtifactDeployer.class )
-class DefaultArtifactDeployer implements ArtifactDeployer, Contextualizable
+class DefaultArtifactDeployer implements ArtifactDeployer
 {
-
-    private PlexusContainer container;
+    @Requirement
+    RepositorySystem repositorySystem;
 
     @Override
     public void deploy( ProjectBuildingRequest request, Collection<Artifact> mavenArtifacts )
@@ -51,14 +45,7 @@ class DefaultArtifactDeployer implements ArtifactDeployer, Contextualizable
     {
         validateParameters( request, mavenArtifacts );
 
-        try
-        {
-            getMavenArtifactDeployer( request ).deploy( mavenArtifacts );
-        }
-        catch ( ComponentLookupException e )
-        {
-            throw new ArtifactDeployerException( e.getMessage(), e );
-        }
+        getMavenArtifactDeployer( request ).deploy( mavenArtifacts );
     }
 
     @Override
@@ -66,14 +53,7 @@ class DefaultArtifactDeployer implements ArtifactDeployer, Contextualizable
             Collection<Artifact> mavenArtifacts ) throws ArtifactDeployerException
     {
         validateParameters( request, mavenArtifacts );
-        try
-        {
-            getMavenArtifactDeployer( request ).deploy( remoteRepository, mavenArtifacts );
-        }
-        catch ( ComponentLookupException e )
-        {
-            throw new ArtifactDeployerException( e.getMessage(), e );
-        }
+        getMavenArtifactDeployer( request ).deploy( remoteRepository, mavenArtifacts );
     }
 
     private void validateParameters( ProjectBuildingRequest request, Collection<Artifact> mavenArtifacts )
@@ -92,24 +72,8 @@ class DefaultArtifactDeployer implements ArtifactDeployer, Contextualizable
         }
     }
 
-    /**
-     * 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
     {
-        RepositorySystem repositorySystem = container.lookup( RepositorySystem.class );
-
-        RepositorySystemSession session = Invoker.invoke( buildingRequest, "getRepositorySession" );
-
-        return new Maven31ArtifactDeployer( repositorySystem, session );
+        return new Maven31ArtifactDeployer( repositorySystem, buildingRequest.getRepositorySession() );
     }
 }
diff --git a/src/main/java/org/apache/maven/shared/transfer/artifact/deploy/internal/Invoker.java b/src/main/java/org/apache/maven/shared/transfer/artifact/deploy/internal/Invoker.java
deleted file mode 100644
index 485e58d..0000000
--- a/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/src/main/java/org/apache/maven/shared/transfer/artifact/deploy/internal/Maven31ArtifactDeployer.java b/src/main/java/org/apache/maven/shared/transfer/artifact/deploy/internal/Maven31ArtifactDeployer.java
index ed61b12..c69f59e 100644
--- a/src/main/java/org/apache/maven/shared/transfer/artifact/deploy/internal/Maven31ArtifactDeployer.java
+++ b/src/main/java/org/apache/maven/shared/transfer/artifact/deploy/internal/Maven31ArtifactDeployer.java
@@ -41,7 +41,6 @@ import org.eclipse.aether.util.artifact.SubArtifact;
  */
 class Maven31ArtifactDeployer implements MavenArtifactDeployer
 {
-
     private final RepositorySystem repositorySystem;
 
     private final RepositorySystemSession session;
@@ -76,8 +75,7 @@ class Maven31ArtifactDeployer implements MavenArtifactDeployer
         // 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;
@@ -129,8 +127,7 @@ class Maven31ArtifactDeployer implements MavenArtifactDeployer
     private RemoteRepository getRemoteRepository( RepositorySystemSession session, ArtifactRepository remoteRepository )
             throws ArtifactDeployerException
     {
-        RemoteRepository aetherRepo = Invoker.invoke( RepositoryUtils.class, "toRepo", ArtifactRepository.class,
-                remoteRepository );
+        RemoteRepository aetherRepo = RepositoryUtils.toRepo( remoteRepository );
 
         if ( aetherRepo.getAuthentication() == null || aetherRepo.getProxy() == null )
         {
diff --git a/src/main/java/org/apache/maven/shared/transfer/artifact/install/internal/DefaultArtifactInstaller.java b/src/main/java/org/apache/maven/shared/transfer/artifact/install/internal/DefaultArtifactInstaller.java
index bd963a7..d6de637 100644
--- a/src/main/java/org/apache/maven/shared/transfer/artifact/install/internal/DefaultArtifactInstaller.java
+++ b/src/main/java/org/apache/maven/shared/transfer/artifact/install/internal/DefaultArtifactInstaller.java
@@ -19,49 +19,36 @@ package org.apache.maven.shared.transfer.artifact.install.internal;
  * 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;
 import org.eclipse.aether.RepositorySystem;
-import org.eclipse.aether.RepositorySystemSession;
+
+import java.io.File;
+import java.util.Collection;
 
 /**
  *
  */
 @Component( role = ArtifactInstaller.class )
-class DefaultArtifactInstaller implements ArtifactInstaller, Contextualizable
+class DefaultArtifactInstaller implements ArtifactInstaller
 {
-    private PlexusContainer container;
-
     @Requirement
     private RepositoryManager repositoryManager;
 
+    @Requirement
+    private RepositorySystem repositorySystem;
+
     @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 );
-        }
+        getMavenArtifactInstaller( request ).install( mavenArtifacts );
     }
 
     @Override
@@ -83,14 +70,7 @@ class DefaultArtifactInstaller implements ArtifactInstaller, Contextualizable
         // 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 );
-        }
+        getMavenArtifactInstaller( newRequest ).install( mavenArtifacts );
     }
 
     private void validateParameters( ProjectBuildingRequest request, Collection<Artifact> mavenArtifacts )
@@ -109,24 +89,8 @@ class DefaultArtifactInstaller implements ArtifactInstaller, Contextualizable
         }
     }
 
-    /**
-     * 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
     {
-        RepositorySystem repositorySystem = container.lookup( RepositorySystem.class );
-
-        RepositorySystemSession session = Invoker.invoke( buildingRequest, "getRepositorySession" );
-
-        return new Maven31ArtifactInstaller( repositorySystem, session );
+        return new Maven31ArtifactInstaller( repositorySystem, buildingRequest.getRepositorySession() );
     }
 }
diff --git a/src/main/java/org/apache/maven/shared/transfer/artifact/install/internal/Invoker.java b/src/main/java/org/apache/maven/shared/transfer/artifact/install/internal/Invoker.java
deleted file mode 100644
index eb8c69e..0000000
--- a/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/src/main/java/org/apache/maven/shared/transfer/artifact/install/internal/Maven31ArtifactInstaller.java b/src/main/java/org/apache/maven/shared/transfer/artifact/install/internal/Maven31ArtifactInstaller.java
index aa15504..e188646 100644
--- a/src/main/java/org/apache/maven/shared/transfer/artifact/install/internal/Maven31ArtifactInstaller.java
+++ b/src/main/java/org/apache/maven/shared/transfer/artifact/install/internal/Maven31ArtifactInstaller.java
@@ -61,8 +61,7 @@ class Maven31ArtifactInstaller
         // 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() )
diff --git a/src/main/java/org/apache/maven/shared/transfer/artifact/resolve/internal/DefaultArtifactResolver.java b/src/main/java/org/apache/maven/shared/transfer/artifact/resolve/internal/DefaultArtifactResolver.java
index c6d1407..5486667 100644
--- a/src/main/java/org/apache/maven/shared/transfer/artifact/resolve/internal/DefaultArtifactResolver.java
+++ b/src/main/java/org/apache/maven/shared/transfer/artifact/resolve/internal/DefaultArtifactResolver.java
@@ -19,8 +19,6 @@ 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.artifact.Artifact;
 import org.apache.maven.project.ProjectBuildingRequest;
@@ -28,39 +26,25 @@ 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;
+import org.codehaus.plexus.component.annotations.Requirement;
 import org.eclipse.aether.RepositorySystem;
-import org.eclipse.aether.RepositorySystemSession;
-import org.eclipse.aether.repository.RemoteRepository;
-
 
 /**
  *
  */
 @Component( role = ArtifactResolver.class, hint = "default" )
-class DefaultArtifactResolver implements ArtifactResolver, Contextualizable
+class DefaultArtifactResolver implements ArtifactResolver
 {
-    private PlexusContainer container;
+    @Requirement
+    RepositorySystem repositorySystem;
 
     @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 );
-        }
+        return getMavenArtifactResolver( buildingRequest ).resolveArtifact( mavenArtifact );
     }
 
     @Override
@@ -68,14 +52,7 @@ class DefaultArtifactResolver implements ArtifactResolver, Contextualizable
             throws ArtifactResolverException, IllegalArgumentException
     {
         validateParameters( buildingRequest, coordinate );
-        try
-        {
-            return getMavenArtifactResolver( buildingRequest ).resolveArtifact( coordinate );
-        }
-        catch ( ComponentLookupException e )
-        {
-            throw new ArtifactResolverException( e.getMessage(), e );
-        }
+        return getMavenArtifactResolver( buildingRequest ).resolveArtifact( coordinate );
     }
 
     private void validateParameters( ProjectBuildingRequest buildingRequest, Artifact mavenArtifact )
@@ -102,28 +79,10 @@ class DefaultArtifactResolver implements ArtifactResolver, Contextualizable
         }
     }
 
-    /**
-     * 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
     {
-        RepositorySystem repositorySystem = container.lookup( RepositorySystem.class );
-
-        List<RemoteRepository> aetherRepositories = Invoker.invoke(
-                RepositoryUtils.class, "toRepos", List.class, buildingRequest.getRemoteRepositories() );
-
-        RepositorySystemSession session = Invoker.invoke( buildingRequest, "getRepositorySession" );
-
-        return new Maven31ArtifactResolver( repositorySystem, aetherRepositories, session );
-
+        return new Maven31ArtifactResolver( repositorySystem,
+                RepositoryUtils.toRepos( buildingRequest.getRemoteRepositories() ),
+                buildingRequest.getRepositorySession() );
     }
 }
diff --git a/src/main/java/org/apache/maven/shared/transfer/artifact/resolve/internal/Invoker.java b/src/main/java/org/apache/maven/shared/transfer/artifact/resolve/internal/Invoker.java
deleted file mode 100644
index 329e2c6..0000000
--- a/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/src/main/java/org/apache/maven/shared/transfer/artifact/resolve/internal/Maven31ArtifactResolver.java b/src/main/java/org/apache/maven/shared/transfer/artifact/resolve/internal/Maven31ArtifactResolver.java
index 9ef5658..5eca53b 100644
--- a/src/main/java/org/apache/maven/shared/transfer/artifact/resolve/internal/Maven31ArtifactResolver.java
+++ b/src/main/java/org/apache/maven/shared/transfer/artifact/resolve/internal/Maven31ArtifactResolver.java
@@ -24,6 +24,7 @@ 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.apache.maven.shared.transfer.artifact.resolve.ArtifactResult;
 import org.eclipse.aether.RepositorySystem;
 import org.eclipse.aether.RepositorySystemSession;
 import org.eclipse.aether.artifact.Artifact;
@@ -56,20 +57,14 @@ class Maven31ArtifactResolver
     }
 
     @Override
-    public org.apache.maven.shared.transfer.artifact.resolve.ArtifactResult resolveArtifact(
+    public 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 );
+        return resolveArtifact( RepositoryUtils.toArtifact( mavenArtifact ) );
     }
 
     @Override
-    // CHECKSTYLE_OFF: LineLength
-    public org.apache.maven.shared.transfer.artifact.resolve.ArtifactResult resolveArtifact( ArtifactCoordinate coordinate )
-                                                                                        throws ArtifactResolverException
-    // CHECKSTYLE_ON: LineLength
+    public ArtifactResult resolveArtifact( ArtifactCoordinate coordinate ) throws ArtifactResolverException
     {
         Artifact aetherArtifact =
             new DefaultArtifact( coordinate.getGroupId(), coordinate.getArtifactId(), coordinate.getClassifier(),
@@ -78,10 +73,7 @@ class Maven31ArtifactResolver
         return resolveArtifact( aetherArtifact );
     }
 
-    // CHECKSTYLE_OFF: LineLength
-    private org.apache.maven.shared.transfer.artifact.resolve.ArtifactResult resolveArtifact( Artifact aetherArtifact )
-                                                                                         throws ArtifactResolverException
-    // CHECKSTYLE_ON: LineLength
+    private ArtifactResult resolveArtifact( Artifact aetherArtifact ) throws ArtifactResolverException
     {
         try
         {
diff --git a/src/main/java/org/apache/maven/shared/transfer/artifact/resolve/internal/Maven31ArtifactResult.java b/src/main/java/org/apache/maven/shared/transfer/artifact/resolve/internal/Maven31ArtifactResult.java
index 7b56826..6600c24 100644
--- a/src/main/java/org/apache/maven/shared/transfer/artifact/resolve/internal/Maven31ArtifactResult.java
+++ b/src/main/java/org/apache/maven/shared/transfer/artifact/resolve/internal/Maven31ArtifactResult.java
@@ -20,9 +20,7 @@ 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.eclipse.aether.resolution.ArtifactResult;
-import org.eclipse.aether.artifact.Artifact;
 
 /**
  * {@link org.apache.maven.shared.transfer.artifact.resolve.ArtifactResult} wrapper for {@link ArtifactResult}
@@ -46,14 +44,6 @@ class Maven31ArtifactResult
     @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/src/main/java/org/apache/maven/shared/transfer/collection/internal/DefaultDependencyCollector.java b/src/main/java/org/apache/maven/shared/transfer/collection/internal/DefaultDependencyCollector.java
index df2a248..457e2b5 100644
--- a/src/main/java/org/apache/maven/shared/transfer/collection/internal/DefaultDependencyCollector.java
+++ b/src/main/java/org/apache/maven/shared/transfer/collection/internal/DefaultDependencyCollector.java
@@ -19,9 +19,6 @@ package org.apache.maven.shared.transfer.collection.internal;
  * 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;
@@ -31,16 +28,11 @@ 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;
+import org.codehaus.plexus.component.annotations.Requirement;
 import org.eclipse.aether.RepositorySystem;
-import org.eclipse.aether.RepositorySystemSession;
-import org.eclipse.aether.repository.RemoteRepository;
+
+import java.util.Objects;
 
 /**
  * This DependencyCollector passes the request to the proper Maven 3.x implementation
@@ -48,9 +40,13 @@ import org.eclipse.aether.repository.RemoteRepository;
  * @author Robert Scholte
  */
 @Component( role = DependencyCollector.class, hint = "default" )
-class DefaultDependencyCollector implements DependencyCollector, Contextualizable
+class DefaultDependencyCollector implements DependencyCollector
 {
-    private PlexusContainer container;
+    @Requirement
+    ArtifactHandlerManager artifactHandlerManager;
+
+    @Requirement
+    RepositorySystem repositorySystem;
 
     @Override
     public CollectResult collectDependencies( ProjectBuildingRequest buildingRequest, Dependency root )
@@ -58,14 +54,7 @@ class DefaultDependencyCollector implements DependencyCollector, Contextualizabl
     {
         validateParameters( buildingRequest, root );
 
-        try
-        {
-            return getMavenDependencyCollector( buildingRequest ).collectDependencies( root );
-        }
-        catch ( ComponentLookupException e )
-        {
-            throw new DependencyCollectionException( e.getMessage(), e );
-        }
+        return getMavenDependencyCollector( buildingRequest ).collectDependencies( root );
     }
 
     @Override
@@ -74,14 +63,7 @@ class DefaultDependencyCollector implements DependencyCollector, Contextualizabl
     {
         validateParameters( buildingRequest, root );
 
-        try
-        {
-            return getMavenDependencyCollector( buildingRequest ).collectDependencies( root );
-        }
-        catch ( ComponentLookupException e )
-        {
-            throw new DependencyCollectionException( e.getMessage(), e );
-        }
+        return getMavenDependencyCollector( buildingRequest ).collectDependencies( root );
     }
 
     @Override
@@ -90,14 +72,7 @@ class DefaultDependencyCollector implements DependencyCollector, Contextualizabl
     {
         validateParameters( buildingRequest, root );
 
-        try
-        {
-            return getMavenDependencyCollector( buildingRequest ).collectDependencies( root );
-        }
-        catch ( ComponentLookupException e )
-        {
-            throw new DependencyCollectionException( e.getMessage(), e );
-        }
+        return getMavenDependencyCollector( buildingRequest ).collectDependencies( root );
     }
 
   private void validateParameters( ProjectBuildingRequest buildingRequest, DependableCoordinate root )
@@ -131,31 +106,10 @@ class DefaultDependencyCollector implements DependencyCollector, Contextualizabl
     Objects.requireNonNull( root, "The parameter root is not allowed to be null." );
   }
 
-    /**
-     * 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 );
-
-        RepositorySystem m31RepositorySystem = container.lookup( RepositorySystem.class );
-
-        RepositorySystemSession session = Invoker.invoke( buildingRequest, "getRepositorySession" );
-
-        List<RemoteRepository> aetherRepositories = Invoker.invoke(
-                RepositoryUtils.class, "toRepos", List.class, buildingRequest.getRemoteRepositories() );
-
-        return new Maven31DependencyCollector( m31RepositorySystem, artifactHandlerManager, session,
-                aetherRepositories );
+        return new Maven31DependencyCollector( repositorySystem, artifactHandlerManager,
+                buildingRequest.getRepositorySession(),
+                RepositoryUtils.toRepos( buildingRequest.getRemoteRepositories() ) );
     }
-
 }
diff --git a/src/main/java/org/apache/maven/shared/transfer/collection/internal/Invoker.java b/src/main/java/org/apache/maven/shared/transfer/collection/internal/Invoker.java
deleted file mode 100644
index 642c4b6..0000000
--- a/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/src/main/java/org/apache/maven/shared/transfer/collection/internal/Maven31DependencyCollector.java b/src/main/java/org/apache/maven/shared/transfer/collection/internal/Maven31DependencyCollector.java
index 43846ab..36425f4 100644
--- a/src/main/java/org/apache/maven/shared/transfer/collection/internal/Maven31DependencyCollector.java
+++ b/src/main/java/org/apache/maven/shared/transfer/collection/internal/Maven31DependencyCollector.java
@@ -39,6 +39,8 @@ import org.eclipse.aether.collection.CollectRequest;
 import org.eclipse.aether.graph.Dependency;
 import org.eclipse.aether.repository.RemoteRepository;
 
+import static org.apache.maven.RepositoryUtils.toDependency;
+
 /**
  * Maven 3.1+ implementation of the {@link DependencyCollector}
  * 
@@ -70,13 +72,8 @@ class Maven31DependencyCollector
     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 ) );
-
+        request.setRoot( toDependency( root, RepositoryUtils.newArtifactTypeRegistry( artifactHandlerManager ) ) );
         return collectDependencies( request );
     }
 
@@ -112,9 +109,7 @@ class Maven31DependencyCollector
         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() )
@@ -153,16 +148,4 @@ class Maven31DependencyCollector
             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/src/main/java/org/apache/maven/shared/transfer/collection/internal/Maven31DependencyNodeAdapter.java b/src/main/java/org/apache/maven/shared/transfer/collection/internal/Maven31DependencyNodeAdapter.java
index eae1542..563cb31 100644
--- a/src/main/java/org/apache/maven/shared/transfer/collection/internal/Maven31DependencyNodeAdapter.java
+++ b/src/main/java/org/apache/maven/shared/transfer/collection/internal/Maven31DependencyNodeAdapter.java
@@ -19,17 +19,16 @@ 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.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;
 
+import java.util.ArrayList;
+import java.util.List;
+
 /**
  * DependencyCollectorNode wrapper around {@link org.eclipse.aether.graph.DependencyNode}
  *
@@ -150,14 +149,6 @@ class Maven31DependencyNodeAdapter implements DependencyNode
 
     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 );
-        }
+        return RepositoryUtils.toArtifact( aetherArtifact );
     }
 }
diff --git a/src/main/java/org/apache/maven/shared/transfer/dependencies/collect/internal/DefaultDependencyCollector.java b/src/main/java/org/apache/maven/shared/transfer/dependencies/collect/internal/DefaultDependencyCollector.java
index 160dca3..2f5a22a 100644
--- a/src/main/java/org/apache/maven/shared/transfer/dependencies/collect/internal/DefaultDependencyCollector.java
+++ b/src/main/java/org/apache/maven/shared/transfer/dependencies/collect/internal/DefaultDependencyCollector.java
@@ -19,8 +19,6 @@ package org.apache.maven.shared.transfer.dependencies.collect.internal;
  * 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;
@@ -30,16 +28,9 @@ 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;
+import org.codehaus.plexus.component.annotations.Requirement;
 import org.eclipse.aether.RepositorySystem;
-import org.eclipse.aether.RepositorySystemSession;
-import org.eclipse.aether.repository.RemoteRepository;
 
 /**
  * This DependencyCollector passes the request to the proper Maven 3.x implementation
@@ -47,9 +38,14 @@ import org.eclipse.aether.repository.RemoteRepository;
  * @author Robert Scholte
  */
 @Component( role = DependencyCollector.class, hint = "default" )
-class DefaultDependencyCollector implements DependencyCollector, Contextualizable
+class DefaultDependencyCollector implements DependencyCollector
 {
-    private PlexusContainer container;
+
+    @Requirement
+    ArtifactHandlerManager artifactHandlerManager;
+
+    @Requirement
+    RepositorySystem repositorySystem;
 
     @Override
     public CollectorResult collectDependencies( ProjectBuildingRequest buildingRequest, Dependency root )
@@ -57,14 +53,7 @@ class DefaultDependencyCollector implements DependencyCollector, Contextualizabl
     {
         validateParameters( buildingRequest, root );
 
-        try
-        {
-            return getMavenDependencyCollector( buildingRequest ).collectDependencies( root );
-        }
-        catch ( ComponentLookupException e )
-        {
-            throw new DependencyCollectorException( e.getMessage(), e );
-        }
+        return getMavenDependencyCollector( buildingRequest ).collectDependencies( root );
     }
 
     @Override
@@ -73,14 +62,7 @@ class DefaultDependencyCollector implements DependencyCollector, Contextualizabl
     {
         validateParameters( buildingRequest, root );
 
-        try
-        {
-            return getMavenDependencyCollector( buildingRequest ).collectDependencies( root );
-        }
-        catch ( ComponentLookupException e )
-        {
-            throw new DependencyCollectorException( e.getMessage(), e );
-        }
+        return getMavenDependencyCollector( buildingRequest ).collectDependencies( root );
     }
 
     @Override
@@ -89,14 +71,7 @@ class DefaultDependencyCollector implements DependencyCollector, Contextualizabl
     {
         validateParameters( buildingRequest, root );
 
-        try
-        {
-            return getMavenDependencyCollector( buildingRequest ).collectDependencies( root );
-        }
-        catch ( ComponentLookupException e )
-        {
-            throw new DependencyCollectorException( e.getMessage(), e );
-        }
+        return getMavenDependencyCollector( buildingRequest ).collectDependencies( root );
     }
 
     private void validateParameters( ProjectBuildingRequest buildingRequest, DependableCoordinate root )
@@ -133,32 +108,11 @@ class DefaultDependencyCollector implements DependencyCollector, Contextualizabl
         }
     }
 
-    /**
-     * 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 );
-
-        RepositorySystem m31RepositorySystem = container.lookup( RepositorySystem.class );
-
-        RepositorySystemSession session = Invoker.invoke( buildingRequest, "getRepositorySession" );
-
-        List<RemoteRepository> aetherRepositories = Invoker.invoke(
-                RepositoryUtils.class, "toRepos", List.class, buildingRequest.getRemoteRepositories() );
-
-        return new Maven31DependencyCollector( m31RepositorySystem, artifactHandlerManager, session,
-                aetherRepositories );
-
+        return new Maven31DependencyCollector( repositorySystem, artifactHandlerManager,
+                buildingRequest.getRepositorySession(),
+                RepositoryUtils.toRepos( buildingRequest.getRemoteRepositories() ) );
     }
 
 }
diff --git a/src/main/java/org/apache/maven/shared/transfer/dependencies/collect/internal/Invoker.java b/src/main/java/org/apache/maven/shared/transfer/dependencies/collect/internal/Invoker.java
deleted file mode 100644
index 45872e9..0000000
--- a/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/src/main/java/org/apache/maven/shared/transfer/dependencies/collect/internal/Maven31DependencyCollector.java b/src/main/java/org/apache/maven/shared/transfer/dependencies/collect/internal/Maven31DependencyCollector.java
index 50f3700..924637a 100644
--- a/src/main/java/org/apache/maven/shared/transfer/dependencies/collect/internal/Maven31DependencyCollector.java
+++ b/src/main/java/org/apache/maven/shared/transfer/dependencies/collect/internal/Maven31DependencyCollector.java
@@ -19,9 +19,6 @@ 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;
@@ -40,6 +37,11 @@ import org.eclipse.aether.collection.DependencyCollectionException;
 import org.eclipse.aether.graph.Dependency;
 import org.eclipse.aether.repository.RemoteRepository;
 
+import java.util.ArrayList;
+import java.util.List;
+
+import static org.apache.maven.RepositoryUtils.toDependency;
+
 /**
  * Maven 3.1+ implementation of the {@link DependencyCollector}
  *
@@ -65,22 +67,11 @@ class Maven31DependencyCollector implements MavenDependencyCollector
         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 );
+        ArtifactTypeRegistry typeRegistry = RepositoryUtils.newArtifactTypeRegistry( artifactHandlerManager );
 
         CollectRequest request = new CollectRequest();
         request.setRoot( toDependency( root, typeRegistry ) );
@@ -118,8 +109,7 @@ class Maven31DependencyCollector 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() )
diff --git a/src/main/java/org/apache/maven/shared/transfer/dependencies/collect/internal/Maven31DependencyNodeAdapter.java b/src/main/java/org/apache/maven/shared/transfer/dependencies/collect/internal/Maven31DependencyNodeAdapter.java
index f0cccc4..d5584dc 100644
--- a/src/main/java/org/apache/maven/shared/transfer/dependencies/collect/internal/Maven31DependencyNodeAdapter.java
+++ b/src/main/java/org/apache/maven/shared/transfer/dependencies/collect/internal/Maven31DependencyNodeAdapter.java
@@ -19,17 +19,18 @@ 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.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;
 
+import java.util.ArrayList;
+import java.util.List;
+import java.util.Objects;
+
+import static org.apache.maven.RepositoryUtils.toArtifact;
+
 /**
  * DependencyCollectorNode wrapper around {@link org.eclipse.aether.graph.DependencyNode}
  *
@@ -52,7 +53,7 @@ class Maven31DependencyNodeAdapter implements DependencyNode
     @Override
     public Artifact getArtifact()
     {
-        return getArtifact( dependencyNode.getArtifact() );
+        return toArtifact( dependencyNode.getArtifact() );
     }
 
     @Override
@@ -134,30 +135,6 @@ class Maven31DependencyNodeAdapter implements DependencyNode
         }
 
         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 );
-        }
+        return Objects.equals( dependencyNode, other.dependencyNode );
     }
 }
diff --git a/src/main/java/org/apache/maven/shared/transfer/dependencies/resolve/internal/DefaultDependencyResolver.java b/src/main/java/org/apache/maven/shared/transfer/dependencies/resolve/internal/DefaultDependencyResolver.java
index 5d51e97..b3787f7 100644
--- a/src/main/java/org/apache/maven/shared/transfer/dependencies/resolve/internal/DefaultDependencyResolver.java
+++ b/src/main/java/org/apache/maven/shared/transfer/dependencies/resolve/internal/DefaultDependencyResolver.java
@@ -19,9 +19,6 @@ package org.apache.maven.shared.transfer.dependencies.resolve.internal;
  * 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;
@@ -32,24 +29,23 @@ 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;
+import org.codehaus.plexus.component.annotations.Requirement;
 import org.eclipse.aether.RepositorySystem;
-import org.eclipse.aether.RepositorySystemSession;
-import org.eclipse.aether.repository.RemoteRepository;
+
+import java.util.Collection;
 
 /**
  *
  */
 @Component( role = DependencyResolver.class, hint = "default" )
-class DefaultDependencyResolver implements DependencyResolver, Contextualizable
+class DefaultDependencyResolver implements DependencyResolver
 {
-    private PlexusContainer container;
+    @Requirement
+    ArtifactHandlerManager artifactHandlerManager;
+
+    @Requirement
+    RepositorySystem repositorySystem;
 
     @Override
     public Iterable<ArtifactResult> resolveDependencies( ProjectBuildingRequest buildingRequest,
@@ -58,15 +54,8 @@ class DefaultDependencyResolver implements DependencyResolver, Contextualizable
     {
         validateBuildingRequest( buildingRequest );
 
-        try
-        {
-            return getMavenDependencyResolver( buildingRequest ).resolveDependencies( coordinates, managedDependencies,
-                    filter );
-        }
-        catch ( ComponentLookupException e )
-        {
-            throw new DependencyResolverException( e.getMessage(), e );
-        }
+        return getMavenDependencyResolver( buildingRequest )
+                .resolveDependencies( coordinates, managedDependencies, filter );
     }
 
     @Override
@@ -74,14 +63,7 @@ class DefaultDependencyResolver implements DependencyResolver, Contextualizable
             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 );
-        }
+        return getMavenDependencyResolver( buildingRequest ).resolveDependencies( coordinate, filter );
     }
 
     @Override
@@ -89,25 +71,7 @@ class DefaultDependencyResolver implements DependencyResolver, Contextualizable
             TransformableFilter filter ) throws DependencyResolverException
     {
         validateParameters( buildingRequest, model );
-        try
-        {
-            return getMavenDependencyResolver( buildingRequest ).resolveDependencies( model, filter );
-        }
-        catch ( ComponentLookupException e )
-        {
-            throw new DependencyResolverException( e.getMessage(), e );
-        }
-    }
-
-    /**
-     * 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 );
+        return getMavenDependencyResolver( buildingRequest ).resolveDependencies( model, filter );
     }
 
     private void validateParameters( ProjectBuildingRequest buildingRequest, DependableCoordinate coordinate )
@@ -130,19 +94,10 @@ class DefaultDependencyResolver implements DependencyResolver, Contextualizable
     }
 
     private MavenDependencyResolver getMavenDependencyResolver( ProjectBuildingRequest buildingRequest )
-            throws ComponentLookupException, DependencyResolverException
     {
-        ArtifactHandlerManager artifactHandlerManager = container.lookup( ArtifactHandlerManager.class );
-
-        RepositorySystem m31RepositorySystem = container.lookup( RepositorySystem.class );
-
-        RepositorySystemSession session = Invoker.invoke( buildingRequest, "getRepositorySession" );
-
-        List<RemoteRepository> aetherRepositories = Invoker.invoke(
-                RepositoryUtils.class, "toRepos", List.class, buildingRequest.getRemoteRepositories() );
-
-        return new Maven31DependencyResolver( m31RepositorySystem, artifactHandlerManager, session,
-                aetherRepositories );
+        return new Maven31DependencyResolver( repositorySystem, artifactHandlerManager,
+                buildingRequest.getRepositorySession(),
+                RepositoryUtils.toRepos( buildingRequest.getRemoteRepositories() ) );
     }
 
     private void validateBuildingRequest( ProjectBuildingRequest buildingRequest )
diff --git a/src/main/java/org/apache/maven/shared/transfer/dependencies/resolve/internal/Invoker.java b/src/main/java/org/apache/maven/shared/transfer/dependencies/resolve/internal/Invoker.java
deleted file mode 100644
index dc7ad4c..0000000
--- a/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/src/main/java/org/apache/maven/shared/transfer/dependencies/resolve/internal/Maven31ArtifactResult.java b/src/main/java/org/apache/maven/shared/transfer/dependencies/resolve/internal/Maven31ArtifactResult.java
index fe26ce4..db9c206 100644
--- a/src/main/java/org/apache/maven/shared/transfer/dependencies/resolve/internal/Maven31ArtifactResult.java
+++ b/src/main/java/org/apache/maven/shared/transfer/dependencies/resolve/internal/Maven31ArtifactResult.java
@@ -20,9 +20,8 @@ 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.apache.maven.artifact.Artifact;
 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}
@@ -44,16 +43,8 @@ class Maven31ArtifactResult
     }
 
     @Override
-    public org.apache.maven.artifact.Artifact getArtifact()
+    public 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/src/main/java/org/apache/maven/shared/transfer/dependencies/resolve/internal/Maven31DependencyResolver.java b/src/main/java/org/apache/maven/shared/transfer/dependencies/resolve/internal/Maven31DependencyResolver.java
index ea35bc5..8c04e58 100644
--- a/src/main/java/org/apache/maven/shared/transfer/dependencies/resolve/internal/Maven31DependencyResolver.java
+++ b/src/main/java/org/apache/maven/shared/transfer/dependencies/resolve/internal/Maven31DependencyResolver.java
@@ -93,22 +93,11 @@ class Maven31DependencyResolver implements MavenDependencyResolver
         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
+            DependableCoordinate coordinate, TransformableFilter dependencyFilter ) throws DependencyResolverException
     {
-        ArtifactTypeRegistry typeRegistry = createTypeRegistry();
+        ArtifactTypeRegistry typeRegistry = RepositoryUtils.newArtifactTypeRegistry( artifactHandlerManager );
 
         Dependency aetherRoot = toDependency( coordinate, typeRegistry );
 
@@ -117,18 +106,9 @@ class Maven31DependencyResolver implements MavenDependencyResolver
         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
+            TransformableFilter dependencyFilter ) throws DependencyResolverException
     {
         // Are there examples where packaging and type are NOT in sync
         ArtifactHandler artifactHandler = artifactHandlerManager.getArtifactHandler( model.getPackaging() );
@@ -156,36 +136,30 @@ class Maven31DependencyResolver implements MavenDependencyResolver
     /**
      * @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();
+        ArtifactTypeRegistry typeRegistry = RepositoryUtils.newArtifactTypeRegistry( artifactHandlerManager );
 
         List<Dependency> aetherDependencies = new ArrayList<>( mavenDependencies.size() );
 
         for ( org.apache.maven.model.Dependency mavenDependency : mavenDependencies )
         {
-            aetherDependencies.add( toDependency( mavenDependency, typeRegistry ) );
+            aetherDependencies.add( RepositoryUtils.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
     {
 
@@ -198,10 +172,8 @@ class Maven31DependencyResolver implements MavenDependencyResolver
         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
         {
diff --git a/src/main/java/org/apache/maven/shared/transfer/project/deploy/internal/DefaultProjectDeployer.java b/src/main/java/org/apache/maven/shared/transfer/project/deploy/internal/DefaultProjectDeployer.java
index 16d1d1b..d655b00 100644
--- a/src/main/java/org/apache/maven/shared/transfer/project/deploy/internal/DefaultProjectDeployer.java
+++ b/src/main/java/org/apache/maven/shared/transfer/project/deploy/internal/DefaultProjectDeployer.java
@@ -19,11 +19,6 @@ package org.apache.maven.shared.transfer.project.deploy.internal;
  * 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;
@@ -33,12 +28,16 @@ import org.apache.maven.shared.transfer.artifact.deploy.ArtifactDeployerExceptio
 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;
 
+import java.io.File;
+import java.util.ArrayList;
+import java.util.Collection;
+import java.util.List;
+
 /**
  * This will deploy a whole project into the appropriate remote repository.
  * 
@@ -54,9 +53,6 @@ class DefaultProjectDeployer
     @Requirement
     private ArtifactDeployer deployer;
 
-    @Requirement
-    private RepositoryManager repositoryManager;
-
     /**
      * {@inheritDoc}
      */
diff --git a/src/main/java/org/apache/maven/shared/transfer/repository/internal/DefaultRepositoryManager.java b/src/main/java/org/apache/maven/shared/transfer/repository/internal/DefaultRepositoryManager.java
index c1ee372..f5e3105 100644
--- a/src/main/java/org/apache/maven/shared/transfer/repository/internal/DefaultRepositoryManager.java
+++ b/src/main/java/org/apache/maven/shared/transfer/repository/internal/DefaultRepositoryManager.java
@@ -19,8 +19,6 @@ package org.apache.maven.shared.transfer.repository.internal;
  * 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;
@@ -28,50 +26,32 @@ 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;
+import org.codehaus.plexus.component.annotations.Requirement;
 import org.eclipse.aether.RepositorySystem;
-import org.eclipse.aether.RepositorySystemSession;
+
+import java.io.File;
 
 /**
  * 
  */
 @Component( role = RepositoryManager.class )
 class DefaultRepositoryManager
-    implements RepositoryManager, Contextualizable 
+    implements RepositoryManager
 {
-    private PlexusContainer container;
+    @Requirement
+    RepositorySystem repositorySystem;
     
     @Override
     public String getPathForLocalArtifact( ProjectBuildingRequest buildingRequest, Artifact artifact )
     {
-        try
-        {
-            return getMavenRepositoryManager( buildingRequest ).getPathForLocalArtifact( artifact );
-        }
-        catch ( ComponentLookupException | RepositoryManagerException e )
-        {
-            throw new IllegalStateException( e.getMessage(), e );
-        }
+        return getMavenRepositoryManager( buildingRequest ).getPathForLocalArtifact( artifact );
     }
 
     @Override
     public String getPathForLocalArtifact( ProjectBuildingRequest buildingRequest, ArtifactCoordinate coor )
     {
-        try
-        {
-            return getMavenRepositoryManager( buildingRequest ).getPathForLocalArtifact( coor );
-        }
-        catch ( ComponentLookupException | RepositoryManagerException e )
-        {
-            throw new IllegalStateException( e.getMessage(), e );
-        }
+        return getMavenRepositoryManager( buildingRequest ).getPathForLocalArtifact( coor );
     }
 
     @Override
@@ -87,54 +67,23 @@ class DefaultRepositoryManager
             return getPathForLocalArtifact( buildingRequest, pomCoordinate );
         }
 
-        try
-        {
-            return getMavenRepositoryManager( buildingRequest ).getPathForLocalMetadata( metadata );
-        }
-        catch ( ComponentLookupException | RepositoryManagerException e )
-        {
-            throw new IllegalStateException( e.getMessage(), e );
-        }
+        return getMavenRepositoryManager( buildingRequest ).getPathForLocalMetadata( metadata );
     }
 
     @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 );
-        }
+        return getMavenRepositoryManager( buildingRequest ).setLocalRepositoryBasedir( buildingRequest, basedir );
     }
 
     @Override
     public File getLocalRepositoryBasedir( ProjectBuildingRequest buildingRequest )
     {
-        try
-        {
-            return getMavenRepositoryManager( buildingRequest ).getLocalRepositoryBasedir();
-        }
-        catch ( ComponentLookupException | RepositoryManagerException e )
-        {
-            throw new IllegalStateException( e.getMessage(), e );
-        }
+        return getMavenRepositoryManager( buildingRequest ).getLocalRepositoryBasedir();
     }
     
     private MavenRepositoryManager getMavenRepositoryManager( ProjectBuildingRequest buildingRequest )
-        throws ComponentLookupException, RepositoryManagerException
-    {
-        RepositorySystem m31RepositorySystem = container.lookup( RepositorySystem.class );
-
-        RepositorySystemSession session = Invoker.invoke( buildingRequest, "getRepositorySession" );
-
-        return new Maven31RepositoryManager( m31RepositorySystem, session );
-    }
-    
-    public void contextualize( Context context ) throws ContextException
     {
-        container = (PlexusContainer) context.get( PlexusConstants.PLEXUS_KEY );
+        return new Maven31RepositoryManager( repositorySystem, buildingRequest.getRepositorySession() );
     }
 }
diff --git a/src/main/java/org/apache/maven/shared/transfer/repository/internal/Invoker.java b/src/main/java/org/apache/maven/shared/transfer/repository/internal/Invoker.java
deleted file mode 100644
index 48342dc..0000000
--- a/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/src/main/java/org/apache/maven/shared/transfer/repository/internal/Maven31RepositoryManager.java b/src/main/java/org/apache/maven/shared/transfer/repository/internal/Maven31RepositoryManager.java
index 8ca19c6..f7f6ecb 100644
--- a/src/main/java/org/apache/maven/shared/transfer/repository/internal/Maven31RepositoryManager.java
+++ b/src/main/java/org/apache/maven/shared/transfer/repository/internal/Maven31RepositoryManager.java
@@ -19,14 +19,11 @@ 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.eclipse.aether.DefaultRepositoryCache;
 import org.eclipse.aether.DefaultRepositorySystemSession;
 import org.eclipse.aether.RepositorySystem;
@@ -39,6 +36,8 @@ import org.eclipse.aether.metadata.Metadata.Nature;
 import org.eclipse.aether.repository.LocalRepository;
 import org.eclipse.aether.repository.LocalRepositoryManager;
 
+import java.io.File;
+
 /**
  * 
  */
@@ -49,8 +48,7 @@ class Maven31RepositoryManager
 
     private final RepositorySystemSession session;
 
-    Maven31RepositoryManager( RepositorySystem repositorySystem, 
-                              RepositorySystemSession session )
+    Maven31RepositoryManager( RepositorySystem repositorySystem, RepositorySystemSession session )
     {
         this.repositorySystem = repositorySystem;
         this.session = session;
@@ -59,28 +57,14 @@ class Maven31RepositoryManager
     @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 );
+        return session.getLocalRepositoryManager()
+                .getPathForLocalArtifact( RepositoryUtils.toArtifact( mavenArtifact ) );
     }
 
     @Override
     public String getPathForLocalArtifact( ArtifactCoordinate coordinate )
     {
-        Artifact aetherArtifact = toArtifact( coordinate );
-
-        return session.getLocalRepositoryManager().getPathForLocalArtifact( aetherArtifact );
+        return session.getLocalRepositoryManager().getPathForLocalArtifact( toArtifact( coordinate ) );
     }
     
     @Override
@@ -100,15 +84,7 @@ class Maven31RepositoryManager
     {
         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 );
@@ -123,15 +99,7 @@ class Maven31RepositoryManager
             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 );
-        }
+        newRequest.setRepositorySession( newSession );
 
         return newRequest;
     }