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 14:59:35 UTC

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

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 68dbc45bb38ae120a05cddf79d7d51a4e2cf0ad3
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     | 10 +--
 .../internal/DefaultDependencyCollector.java       | 74 ++++-------------
 .../dependencies/collect/internal/Invoker.java     | 93 ---------------------
 .../internal/Maven31DependencyCollector.java       | 24 ++----
 .../internal/Maven31DependencyNodeAdapter.java     | 39 ++-------
 .../internal/DefaultDependencyResolver.java        | 76 ++++-------------
 .../dependencies/resolve/internal/Invoker.java     | 95 ---------------------
 .../resolve/internal/Maven31ArtifactResult.java    | 15 +---
 .../internal/Maven31DependencyResolver.java        | 38 ++-------
 .../deploy/internal/DefaultProjectDeployer.java    |  3 -
 .../internal/DefaultRepositoryManager.java         | 75 +++--------------
 .../transfer/repository/internal/Invoker.java      | 79 ------------------
 .../internal/Maven31RepositoryManager.java         | 48 ++---------
 26 files changed, 130 insertions(+), 1143 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..6b00e04 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
@@ -150,14 +150,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..6fed90a 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,24 @@ 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.component.annotations.Requirement;
 import org.codehaus.plexus.personality.plexus.lifecycle.phase.Contextualizable;
 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 +55,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 +64,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 +72,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 +95,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..f2af2cd 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
@@ -54,9 +54,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;
     }