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

sjaranowski pushed a commit to branch SUREFIRE-2154
in repository https://gitbox.apache.org/repos/asf/maven-surefire.git

commit cf6befcc75fae959311d324ba788e35dc21bfc29
Author: Slawomir Jaranowski <[email protected]>
AuthorDate: Tue Mar 7 09:00:00 2023 +0100

    [SUREFIRE-2154] Get rid of localRepository from surefire mojo parameter
    
    - not use org.apache.maven.artifact.repository.ArtifactRepository
    - use resolver API
---
 maven-surefire-common/pom.xml                      |    4 +
 .../plugin/surefire/AbstractSurefireMojo.java      |  135 +--
 .../surefire/SurefireDependencyResolver.java       |  181 ++--
 .../surefire/SurefireExecutionParameters.java      |    6 +-
 .../surefire/booterclient/ChecksumCalculator.java  |    5 -
 .../plugin/surefire/AbstractSurefireMojoTest.java  | 1023 ++++----------------
 .../surefire/SurefireDependencyResolverTest.java   |  231 ++---
 7 files changed, 383 insertions(+), 1202 deletions(-)

diff --git a/maven-surefire-common/pom.xml b/maven-surefire-common/pom.xml
index 82abed614..9e80c91bf 100644
--- a/maven-surefire-common/pom.xml
+++ b/maven-surefire-common/pom.xml
@@ -160,6 +160,10 @@
           </execution>
         </executions>
       </plugin>
+      <plugin>
+        <groupId>org.eclipse.sisu</groupId>
+        <artifactId>sisu-maven-plugin</artifactId>
+      </plugin>
     </plugins>
   </build>
 </project>
diff --git 
a/maven-surefire-common/src/main/java/org/apache/maven/plugin/surefire/AbstractSurefireMojo.java
 
b/maven-surefire-common/src/main/java/org/apache/maven/plugin/surefire/AbstractSurefireMojo.java
index 2c0365627..4286b90ba 100644
--- 
a/maven-surefire-common/src/main/java/org/apache/maven/plugin/surefire/AbstractSurefireMojo.java
+++ 
b/maven-surefire-common/src/main/java/org/apache/maven/plugin/surefire/AbstractSurefireMojo.java
@@ -35,6 +35,7 @@ import java.util.LinkedHashSet;
 import java.util.List;
 import java.util.Map;
 import java.util.Map.Entry;
+import java.util.Optional;
 import java.util.Properties;
 import java.util.Set;
 import java.util.SortedSet;
@@ -45,8 +46,6 @@ import java.util.zip.ZipFile;
 import org.apache.maven.artifact.Artifact;
 import org.apache.maven.artifact.DefaultArtifact;
 import org.apache.maven.artifact.handler.ArtifactHandler;
-import org.apache.maven.artifact.repository.ArtifactRepository;
-import org.apache.maven.artifact.resolver.ResolutionErrorHandler;
 import org.apache.maven.artifact.resolver.filter.ArtifactFilter;
 import org.apache.maven.artifact.resolver.filter.ScopeArtifactFilter;
 import org.apache.maven.artifact.versioning.ArtifactVersion;
@@ -77,7 +76,6 @@ import org.apache.maven.plugin.surefire.util.DirectoryScanner;
 import org.apache.maven.plugins.annotations.Component;
 import org.apache.maven.plugins.annotations.Parameter;
 import org.apache.maven.project.MavenProject;
-import org.apache.maven.repository.RepositorySystem;
 import org.apache.maven.shared.artifact.filter.PatternIncludesArtifactFilter;
 import org.apache.maven.surefire.api.booter.ProviderParameterNames;
 import org.apache.maven.surefire.api.booter.Shutdown;
@@ -282,13 +280,6 @@ public abstract class AbstractSurefireMojo extends 
AbstractMojo implements Suref
     @Parameter(defaultValue = "${project.build.testSourceDirectory}")
     private File testSourceDirectory;
 
-    /**
-     * ArtifactRepository of the localRepository. To obtain the directory of 
localRepository in unit tests use
-     * System.getProperty("localRepository").
-     */
-    @Parameter(defaultValue = "${localRepository}", required = true, readonly 
= true)
-    private ArtifactRepository localRepository;
-
     /**
      * List of System properties to pass to a provider.
      *
@@ -635,17 +626,6 @@ public abstract class AbstractSurefireMojo extends 
AbstractMojo implements Suref
     @Parameter(property = "trimStackTrace", defaultValue = "false")
     private boolean trimStackTrace;
 
-    /**
-     * The remote plugin repositories declared in the POM.
-     *
-     * @since 2.2
-     */
-    @Parameter(defaultValue = "${project.pluginArtifactRepositories}", 
readonly = true, required = true)
-    private List<ArtifactRepository> remoteRepositories;
-
-    @Parameter(defaultValue = "${project.remoteArtifactRepositories}", 
required = true, readonly = true)
-    private List<ArtifactRepository> projectRemoteRepositories;
-
     /**
      * Flag to disable the generation of report files in xml format.
      * Deprecated since 3.0.0-M4.
@@ -771,15 +751,9 @@ public abstract class AbstractSurefireMojo extends 
AbstractMojo implements Suref
     @Component
     private LocationManager locationManager;
 
-    @Component
-    private RepositorySystem repositorySystem;
-
     @Component
     private ProviderDetector providerDetector;
 
-    @Component
-    private ResolutionErrorHandler resolutionErrorHandler;
-
     private Toolchain toolchain;
 
     private int effectiveForkCount = -1;
@@ -855,6 +829,7 @@ public abstract class AbstractSurefireMojo extends 
AbstractMojo implements Suref
         return "**/*$*";
     }
 
+    @Component(role = SurefireDependencyResolver.class)
     private SurefireDependencyResolver surefireDependencyResolver;
 
     private TestListResolver specificTests;
@@ -905,6 +880,10 @@ public abstract class AbstractSurefireMojo extends 
AbstractMojo implements Suref
         this.logger = logger;
     }
 
+    void setSurefireDependencyResolver(SurefireDependencyResolver 
surefireDependencyResolver) {
+        this.surefireDependencyResolver = surefireDependencyResolver;
+    }
+
     @Nonnull
     protected final PluginConsoleLogger getConsoleLogger() {
         if (consoleLogger == null) {
@@ -952,15 +931,6 @@ public abstract class AbstractSurefireMojo extends 
AbstractMojo implements Suref
     }
 
     private void setupStuff() throws MojoFailureException {
-        surefireDependencyResolver = new SurefireDependencyResolver(
-                getRepositorySystem(),
-                getConsoleLogger(),
-                getLocalRepository(),
-                getRemoteRepositories(),
-                getProjectRemoteRepositories(),
-                resolutionErrorHandler,
-                getPluginName(),
-                getSession().isOffline());
 
         if (getBooterArtifact() == null) {
             throw new RuntimeException("Unable to locate surefire-booter in 
the list of plugin artifacts");
@@ -1125,7 +1095,7 @@ public abstract class AbstractSurefireMojo extends 
AbstractMojo implements Suref
                 getSystemProperties(), getSystemPropertyVariables(), 
getUserProperties(), sysProps);
 
         result.setProperty("basedir", getBasedir().getAbsolutePath());
-        result.setProperty("localRepository", 
getLocalRepository().getBasedir());
+        result.setProperty("localRepository", getLocalRepositoryPath());
         if (isForking()) {
             for (Object o : 
result.propertiesThatCannotBeSetASystemProperties()) {
                 if (getArgLine() == null || !getArgLine().contains("-D" + o + 
"=")) {
@@ -1269,14 +1239,6 @@ public abstract class AbstractSurefireMojo extends 
AbstractMojo implements Suref
         logDebugOrCliShowErrors(capitalizeFirstLetter(getPluginName()) + " 
report directory: " + getReportsDirectory());
     }
 
-    public RepositorySystem getRepositorySystem() {
-        return repositorySystem;
-    }
-
-    public void setRepositorySystem(RepositorySystem repositorySystem) {
-        this.repositorySystem = repositorySystem;
-    }
-
     private boolean existsModuleDescriptor(ResolvePathResultWrapper 
resolvedJavaModularityResult) {
         return resolvedJavaModularityResult.getResolvePathResult() != null;
     }
@@ -2467,7 +2429,7 @@ public abstract class AbstractSurefireMojo extends 
AbstractMojo implements Suref
         checksum.add(getSkipAfterFailureCount());
         checksum.add(getShutdown());
         checksum.add(getExcludes());
-        checksum.add(getLocalRepository());
+        checksum.add(getLocalRepositoryPath());
         checksum.add(getSystemProperties());
         checksum.add(getSystemPropertyVariables());
         checksum.add(getSystemPropertiesFile());
@@ -2505,8 +2467,6 @@ public abstract class AbstractSurefireMojo extends 
AbstractMojo implements Suref
         checksum.add(getParallel());
         checksum.add(isParallelOptimized());
         checksum.add(isTrimStackTrace());
-        checksum.add(getRemoteRepositories());
-        checksum.add(getProjectRemoteRepositories());
         checksum.add(isDisableXmlReport());
         checksum.add(isUseSystemClassLoader());
         checksum.add(isUseManifestOnlyJar());
@@ -2610,13 +2570,9 @@ public abstract class AbstractSurefireMojo extends 
AbstractMojo implements Suref
         Classpath existing = 
classpathCache.getCachedClassPath(surefireArtifact.getArtifactId());
         if (existing == null) {
             List<String> items = new ArrayList<>();
-            Set<Artifact> booterArtifacts = surefireDependencyResolver
-                    .resolvePluginArtifact(surefireArtifact)
-                    .getArtifacts();
+            Set<Artifact> booterArtifacts = 
surefireDependencyResolver.resolveArtifacts(
+                    session.getRepositorySession(), 
project.getRemotePluginRepositories(), surefireArtifact);
             for (Artifact artifact : booterArtifacts) {
-                getConsoleLogger()
-                        .debug("Adding to " + getPluginName() + " booter test 
classpath: "
-                                + artifact.getFile().getAbsolutePath() + " 
Scope: " + artifact.getScope());
                 items.add(artifact.getFile().getAbsolutePath());
             }
             existing = new Classpath(items);
@@ -2797,7 +2753,8 @@ public abstract class AbstractSurefireMojo extends 
AbstractMojo implements Suref
         public Set<Artifact> getProviderClasspath() throws 
MojoExecutionException {
             Artifact surefireArtifact = getBooterArtifact();
             String version = surefireArtifact.getBaseVersion();
-            return 
surefireDependencyResolver.getProviderClasspath("surefire-testng", version);
+            return surefireDependencyResolver.getProviderClasspath(
+                    session.getRepositorySession(), 
project.getRemotePluginRepositories(), "surefire-testng", version);
         }
     }
 
@@ -2828,7 +2785,8 @@ public abstract class AbstractSurefireMojo extends 
AbstractMojo implements Suref
             // add the JUnit provider as default - it doesn't require JUnit to 
be present,
             // since it supports POJO tests.
             String version = getBooterArtifact().getBaseVersion();
-            return 
surefireDependencyResolver.getProviderClasspath("surefire-junit3", version);
+            return surefireDependencyResolver.getProviderClasspath(
+                    session.getRepositorySession(), 
project.getRemotePluginRepositories(), "surefire-junit3", version);
         }
     }
 
@@ -2866,7 +2824,8 @@ public abstract class AbstractSurefireMojo extends 
AbstractMojo implements Suref
         @Nonnull
         public Set<Artifact> getProviderClasspath() throws 
MojoExecutionException {
             String version = getBooterArtifact().getBaseVersion();
-            return 
surefireDependencyResolver.getProviderClasspath("surefire-junit4", version);
+            return surefireDependencyResolver.getProviderClasspath(
+                    session.getRepositorySession(), 
project.getRemotePluginRepositories(), "surefire-junit4", version);
         }
     }
 
@@ -2915,13 +2874,19 @@ public abstract class AbstractSurefireMojo extends 
AbstractMojo implements Suref
         @Nonnull
         public Set<Artifact> getProviderClasspath() throws 
MojoExecutionException {
             String surefireVersion = getBooterArtifact().getBaseVersion();
-            Map<String, Artifact> providerArtifacts =
-                    
surefireDependencyResolver.getProviderClasspathAsMap("surefire-junit-platform", 
surefireVersion);
+            Map<String, Artifact> providerArtifacts = 
surefireDependencyResolver.getProviderClasspathAsMap(
+                    session.getRepositorySession(),
+                    project.getRemotePluginRepositories(),
+                    "surefire-junit-platform",
+                    surefireVersion);
             Map<String, Artifact> testDeps = 
testClasspath.getTestDependencies();
 
             Plugin plugin = getPluginDescriptor().getPlugin();
-            Map<String, Artifact> pluginDeps =
-                    
surefireDependencyResolver.resolvePluginDependencies(plugin, 
getPluginArtifactMap());
+            Map<String, Artifact> pluginDeps = 
surefireDependencyResolver.resolvePluginDependencies(
+                    session.getRepositorySession(),
+                    project.getRemotePluginRepositories(),
+                    plugin,
+                    getPluginArtifactMap());
 
             if (hasDependencyPlatformEngine(pluginDeps)) {
                 providerArtifacts.putAll(pluginDeps);
@@ -3006,8 +2971,8 @@ public abstract class AbstractSurefireMojo extends 
AbstractMojo implements Suref
             ArtifactHandler handler = 
junitPlatformArtifact.getArtifactHandler();
             Artifact artifact = new DefaultArtifact(g, a, v, null, t, c, 
handler);
             getConsoleLogger().debug("Resolving artifact " + g + ":" + a + ":" 
+ v);
-            Set<Artifact> r =
-                    
surefireDependencyResolver.resolveProjectArtifact(artifact).getArtifacts();
+            Set<Artifact> r = surefireDependencyResolver.resolveArtifacts(
+                    session.getRepositorySession(), 
project.getRemoteProjectRepositories(), artifact);
             getConsoleLogger().debug("Resolved artifact " + g + ":" + a + ":" 
+ v + " to " + r);
             return r;
         }
@@ -3071,7 +3036,8 @@ public abstract class AbstractSurefireMojo extends 
AbstractMojo implements Suref
         @Nonnull
         public Set<Artifact> getProviderClasspath() throws 
MojoExecutionException {
             String version = getBooterArtifact().getBaseVersion();
-            return 
surefireDependencyResolver.getProviderClasspath("surefire-junit47", version);
+            return surefireDependencyResolver.getProviderClasspath(
+                    session.getRepositorySession(), 
project.getRemotePluginRepositories(), "surefire-junit47", version);
         }
     }
 
@@ -3118,8 +3084,11 @@ public abstract class AbstractSurefireMojo extends 
AbstractMojo implements Suref
         @Nonnull
         public Set<Artifact> getProviderClasspath() throws 
MojoExecutionException {
             Plugin plugin = getPluginDescriptor().getPlugin();
-            Map<String, Artifact> providerArtifacts =
-                    
surefireDependencyResolver.resolvePluginDependencies(plugin, 
getPluginArtifactMap());
+            Map<String, Artifact> providerArtifacts = 
surefireDependencyResolver.resolvePluginDependencies(
+                    session.getRepositorySession(),
+                    project.getRemotePluginRepositories(),
+                    plugin,
+                    getPluginArtifactMap());
             return new LinkedHashSet<>(providerArtifacts.values());
         }
     }
@@ -3140,13 +3109,11 @@ public abstract class AbstractSurefireMojo extends 
AbstractMojo implements Suref
     }
 
     @Override
-    public ArtifactRepository getLocalRepository() {
-        return localRepository;
-    }
-
-    @Override
-    public void setLocalRepository(ArtifactRepository localRepository) {
-        this.localRepository = localRepository;
+    public String getLocalRepositoryPath() {
+        return Optional.ofNullable(
+                        
session.getRepositorySession().getLocalRepository().getBasedir())
+                .map(File::getAbsolutePath)
+                .orElse(".");
     }
 
     public Properties getSystemProperties() {
@@ -3383,24 +3350,6 @@ public abstract class AbstractSurefireMojo extends 
AbstractMojo implements Suref
         this.trimStackTrace = trimStackTrace;
     }
 
-    public List<ArtifactRepository> getProjectRemoteRepositories() {
-        return projectRemoteRepositories;
-    }
-
-    @SuppressWarnings("UnusedDeclaration")
-    public void setProjectRemoteRepositories(List<ArtifactRepository> 
projectRemoteRepositories) {
-        this.projectRemoteRepositories = projectRemoteRepositories;
-    }
-
-    public List<ArtifactRepository> getRemoteRepositories() {
-        return remoteRepositories;
-    }
-
-    @SuppressWarnings("UnusedDeclaration")
-    public void setRemoteRepositories(List<ArtifactRepository> 
remoteRepositories) {
-        this.remoteRepositories = remoteRepositories;
-    }
-
     public boolean isDisableXmlReport() {
         return disableXmlReport;
     }
@@ -3556,10 +3505,6 @@ public abstract class AbstractSurefireMojo extends 
AbstractMojo implements Suref
         this.tempDir = tempDir;
     }
 
-    public void setResolutionErrorHandler(ResolutionErrorHandler 
resolutionErrorHandler) {
-        this.resolutionErrorHandler = resolutionErrorHandler;
-    }
-
     private static final class ClasspathCache {
         private final Map<String, Classpath> classpaths = new HashMap<>(4);
 
diff --git 
a/maven-surefire-common/src/main/java/org/apache/maven/plugin/surefire/SurefireDependencyResolver.java
 
b/maven-surefire-common/src/main/java/org/apache/maven/plugin/surefire/SurefireDependencyResolver.java
index 9af9db278..50439facd 100644
--- 
a/maven-surefire-common/src/main/java/org/apache/maven/plugin/surefire/SurefireDependencyResolver.java
+++ 
b/maven-surefire-common/src/main/java/org/apache/maven/plugin/surefire/SurefireDependencyResolver.java
@@ -20,6 +20,9 @@ package org.apache.maven.plugin.surefire;
 
 import javax.annotation.Nonnull;
 import javax.annotation.Nullable;
+import javax.inject.Inject;
+import javax.inject.Named;
+import javax.inject.Singleton;
 
 import java.util.Collection;
 import java.util.Iterator;
@@ -28,14 +31,10 @@ import java.util.LinkedHashSet;
 import java.util.List;
 import java.util.Map;
 import java.util.Set;
+import java.util.stream.Collectors;
 
+import org.apache.maven.RepositoryUtils;
 import org.apache.maven.artifact.Artifact;
-import org.apache.maven.artifact.repository.ArtifactRepository;
-import org.apache.maven.artifact.resolver.ArtifactResolutionException;
-import org.apache.maven.artifact.resolver.ArtifactResolutionRequest;
-import org.apache.maven.artifact.resolver.ArtifactResolutionResult;
-import org.apache.maven.artifact.resolver.ResolutionErrorHandler;
-import org.apache.maven.artifact.resolver.filter.ArtifactFilter;
 import org.apache.maven.artifact.versioning.DefaultArtifactVersion;
 import 
org.apache.maven.artifact.versioning.InvalidVersionSpecificationException;
 import org.apache.maven.artifact.versioning.OverConstrainedVersionException;
@@ -43,13 +42,17 @@ import org.apache.maven.artifact.versioning.VersionRange;
 import org.apache.maven.model.Dependency;
 import org.apache.maven.model.Plugin;
 import org.apache.maven.plugin.MojoExecutionException;
-import org.apache.maven.plugin.surefire.log.api.ConsoleLogger;
-import org.apache.maven.repository.RepositorySystem;
+import org.eclipse.aether.RepositorySystem;
+import org.eclipse.aether.RepositorySystemSession;
+import org.eclipse.aether.collection.CollectRequest;
+import org.eclipse.aether.repository.RemoteRepository;
+import org.eclipse.aether.resolution.ArtifactResult;
+import org.eclipse.aether.resolution.DependencyRequest;
+import org.eclipse.aether.resolution.DependencyResolutionException;
+import org.eclipse.aether.resolution.DependencyResult;
+import org.eclipse.aether.util.artifact.JavaScopes;
+import org.eclipse.aether.util.filter.DependencyFilterUtils;
 
-import static java.util.Arrays.asList;
-import static org.apache.maven.artifact.Artifact.SCOPE_COMPILE;
-import static org.apache.maven.artifact.Artifact.SCOPE_COMPILE_PLUS_RUNTIME;
-import static org.apache.maven.artifact.Artifact.SCOPE_RUNTIME;
 import static 
org.apache.maven.artifact.ArtifactUtils.artifactMapByVersionlessId;
 import static 
org.apache.maven.artifact.versioning.VersionRange.createFromVersionSpec;
 
@@ -59,7 +62,10 @@ import static 
org.apache.maven.artifact.versioning.VersionRange.createFromVersio
  * @author Stephen Connolly
  * @author Kristian Rosenvold
  */
-final class SurefireDependencyResolver {
+@Named
+@Singleton
+public class SurefireDependencyResolver {
+
     static final String PROVIDER_GROUP_ID = "org.apache.maven.surefire";
 
     private static final String[] PROVIDER_CLASSPATH_ORDER = {
@@ -80,37 +86,9 @@ final class SurefireDependencyResolver {
 
     private final RepositorySystem repositorySystem;
 
-    private final ConsoleLogger log;
-
-    private final ArtifactRepository localRepository;
-
-    private final List<ArtifactRepository> pluginRemoteRepositories;
-
-    private final List<ArtifactRepository> projectRemoteRepositories;
-
-    private final ResolutionErrorHandler resolutionErrorHandler;
-
-    private final String pluginName;
-
-    private final boolean offline;
-
-    SurefireDependencyResolver(
-            RepositorySystem repositorySystem,
-            ConsoleLogger log,
-            ArtifactRepository localRepository,
-            List<ArtifactRepository> pluginRemoteRepositories,
-            List<ArtifactRepository> projectRemoteRepositories,
-            ResolutionErrorHandler resolutionErrorHandler,
-            String pluginName,
-            boolean offline) {
+    @Inject
+    public SurefireDependencyResolver(RepositorySystem repositorySystem) {
         this.repositorySystem = repositorySystem;
-        this.log = log;
-        this.localRepository = localRepository;
-        this.pluginRemoteRepositories = pluginRemoteRepositories;
-        this.projectRemoteRepositories = projectRemoteRepositories;
-        this.resolutionErrorHandler = resolutionErrorHandler;
-        this.pluginName = pluginName;
-        this.offline = offline;
     }
 
     static boolean isWithinVersionSpec(@Nullable Artifact artifact, @Nonnull 
String versionSpec) {
@@ -129,15 +107,19 @@ final class SurefireDependencyResolver {
         }
     }
 
-    Map<String, Artifact> resolvePluginDependencies(Plugin plugin, Map<String, 
Artifact> pluginResolvedDependencies)
+    Map<String, Artifact> resolvePluginDependencies(
+            RepositorySystemSession session,
+            List<RemoteRepository> repositories,
+            Plugin plugin,
+            Map<String, Artifact> pluginResolvedDependencies)
             throws MojoExecutionException {
         Map<String, Artifact> resolved = new LinkedHashMap<>();
         Collection<Dependency> pluginDependencies = plugin.getDependencies();
 
         for (Dependency dependency : pluginDependencies) {
-            Artifact dependencyArtifact = 
repositorySystem.createDependencyArtifact(dependency);
-            ArtifactResolutionResult artifactResolutionResult = 
resolvePluginArtifact(dependencyArtifact);
-            for (Artifact artifact : artifactResolutionResult.getArtifacts()) {
+            Set<Artifact> artifacts = resolveDependencies(
+                    session, repositories, 
RepositoryUtils.toDependency(dependency, session.getArtifactTypeRegistry()));
+            for (Artifact artifact : artifacts) {
                 String key = artifact.getGroupId() + ":" + 
artifact.getArtifactId();
                 Artifact resolvedPluginDependency = 
pluginResolvedDependencies.get(key);
                 if (resolvedPluginDependency != null) {
@@ -148,69 +130,65 @@ final class SurefireDependencyResolver {
         return resolved;
     }
 
-    ArtifactResolutionResult resolvePluginArtifact(Artifact artifact) throws 
MojoExecutionException {
-        return resolvePluginArtifact(artifact, new RuntimeArtifactFilter());
-    }
-
-    ArtifactResolutionResult resolveProjectArtifact(Artifact artifact) throws 
MojoExecutionException {
-        return resolveProjectArtifact(artifact, new RuntimeArtifactFilter());
-    }
-
-    private ArtifactResolutionResult resolvePluginArtifact(Artifact artifact, 
ArtifactFilter filter)
+    public Set<Artifact> resolveArtifacts(
+            RepositorySystemSession session, List<RemoteRepository> 
repositories, Artifact artifact)
             throws MojoExecutionException {
-        return resolveArtifact(artifact, pluginRemoteRepositories, filter);
+        return resolveDependencies(session, repositories, 
RepositoryUtils.toDependency(artifact, null));
     }
 
-    private ArtifactResolutionResult resolveProjectArtifact(Artifact artifact, 
ArtifactFilter filter)
+    private Set<Artifact> resolveDependencies(
+            RepositorySystemSession session,
+            List<RemoteRepository> repositories,
+            org.eclipse.aether.graph.Dependency dependency)
             throws MojoExecutionException {
-        return resolveArtifact(artifact, projectRemoteRepositories, filter);
-    }
-
-    private ArtifactResolutionResult resolveArtifact(
-            Artifact artifact, List<ArtifactRepository> repositories, 
ArtifactFilter filter)
-            throws MojoExecutionException {
-        ArtifactResolutionRequest request = new ArtifactResolutionRequest()
-                .setOffline(offline)
-                .setArtifact(artifact)
-                .setLocalRepository(localRepository)
-                .setResolveTransitively(true)
-                .setCollectionFilter(filter)
-                .setRemoteRepositories(repositories);
 
-        ArtifactResolutionResult result = repositorySystem.resolve(request);
         try {
-            resolutionErrorHandler.throwErrors(request, result);
-        } catch (ArtifactResolutionException e) {
+
+            CollectRequest collectRequest = new CollectRequest();
+            collectRequest.setRoot(dependency);
+            collectRequest.setRepositories(repositories);
+
+            DependencyRequest request = new DependencyRequest();
+            request.setCollectRequest(collectRequest);
+            
request.setFilter(DependencyFilterUtils.classpathFilter(JavaScopes.RUNTIME));
+
+            DependencyResult dependencyResult = 
repositorySystem.resolveDependencies(session, request);
+            return dependencyResult.getArtifactResults().stream()
+                    .map(ArtifactResult::getArtifact)
+                    .map(RepositoryUtils::toArtifact)
+                    .collect(Collectors.toSet());
+
+        } catch (DependencyResolutionException e) {
             throw new MojoExecutionException(e.getMessage(), e);
         }
-
-        return result;
     }
 
     @Nonnull
-    Set<Artifact> getProviderClasspath(String providerArtifactId, String 
providerVersion)
+    Set<Artifact> getProviderClasspath(
+            RepositorySystemSession session,
+            List<RemoteRepository> repositories,
+            String providerArtifactId,
+            String providerVersion)
             throws MojoExecutionException {
         Dependency provider = toProviderDependency(providerArtifactId, 
providerVersion);
 
-        Artifact providerArtifact = 
repositorySystem.createDependencyArtifact(provider);
+        org.eclipse.aether.graph.Dependency dependency =
+                RepositoryUtils.toDependency(provider, 
session.getArtifactTypeRegistry());
 
-        ArtifactResolutionResult result = 
resolvePluginArtifact(providerArtifact);
+        Set<Artifact> result = resolveDependencies(session, repositories, 
dependency);
 
-        if (log.isDebugEnabled()) {
-            for (Artifact artifact : result.getArtifacts()) {
-                String artifactPath = artifact.getFile().getAbsolutePath();
-                String scope = artifact.getScope();
-                log.debug("Adding to " + pluginName + " test classpath: " + 
artifactPath + " Scope: " + scope);
-            }
-        }
-
-        return orderProviderArtifacts(result.getArtifacts());
+        return orderProviderArtifacts(result);
     }
 
     @Nonnull
-    Map<String, Artifact> getProviderClasspathAsMap(String providerArtifactId, 
String providerVersion)
+    Map<String, Artifact> getProviderClasspathAsMap(
+            RepositorySystemSession session,
+            List<RemoteRepository> repositories,
+            String providerArtifactId,
+            String providerVersion)
             throws MojoExecutionException {
-        return 
artifactMapByVersionlessId(getProviderClasspath(providerArtifactId, 
providerVersion));
+        return artifactMapByVersionlessId(
+                getProviderClasspath(session, repositories, 
providerArtifactId, providerVersion));
     }
 
     // FIXME
@@ -240,27 +218,4 @@ final class SurefireDependencyResolver {
         dependency.setType("jar");
         return dependency;
     }
-
-    static class RuntimeArtifactFilter implements ArtifactFilter {
-        private static final Collection<String> SCOPES =
-                asList(SCOPE_COMPILE, SCOPE_COMPILE_PLUS_RUNTIME, 
SCOPE_RUNTIME);
-
-        private final Artifact filter;
-
-        RuntimeArtifactFilter() {
-            this(null);
-        }
-
-        RuntimeArtifactFilter(Artifact filter) {
-            this.filter = filter;
-        }
-
-        @Override
-        public boolean include(Artifact artifact) {
-            String scope = artifact.getScope();
-            return (filter == null || artifact.equals(filter))
-                    && !artifact.isOptional()
-                    && (scope == null || SCOPES.contains(scope));
-        }
-    }
 }
diff --git 
a/maven-surefire-common/src/main/java/org/apache/maven/plugin/surefire/SurefireExecutionParameters.java
 
b/maven-surefire-common/src/main/java/org/apache/maven/plugin/surefire/SurefireExecutionParameters.java
index 2d4b83895..d69cb8828 100644
--- 
a/maven-surefire-common/src/main/java/org/apache/maven/plugin/surefire/SurefireExecutionParameters.java
+++ 
b/maven-surefire-common/src/main/java/org/apache/maven/plugin/surefire/SurefireExecutionParameters.java
@@ -21,8 +21,6 @@ package org.apache.maven.plugin.surefire;
 import java.io.File;
 import java.util.List;
 
-import org.apache.maven.artifact.repository.ArtifactRepository;
-
 /**
  * This interface contains all the common parameters that have different 
implementations in Surefire vs IntegrationTest
  *
@@ -73,9 +71,7 @@ public interface SurefireExecutionParameters {
 
     void setExcludes(List<String> excludes);
 
-    ArtifactRepository getLocalRepository();
-
-    void setLocalRepository(ArtifactRepository localRepository);
+    String getLocalRepositoryPath();
 
     boolean isPrintSummary();
 
diff --git 
a/maven-surefire-common/src/main/java/org/apache/maven/plugin/surefire/booterclient/ChecksumCalculator.java
 
b/maven-surefire-common/src/main/java/org/apache/maven/plugin/surefire/booterclient/ChecksumCalculator.java
index 498d6c95d..04ddf7bc0 100644
--- 
a/maven-surefire-common/src/main/java/org/apache/maven/plugin/surefire/booterclient/ChecksumCalculator.java
+++ 
b/maven-surefire-common/src/main/java/org/apache/maven/plugin/surefire/booterclient/ChecksumCalculator.java
@@ -26,7 +26,6 @@ import java.util.List;
 import java.util.Map;
 
 import org.apache.maven.artifact.Artifact;
-import org.apache.maven.artifact.repository.ArtifactRepository;
 
 import static java.nio.charset.StandardCharsets.UTF_8;
 
@@ -68,10 +67,6 @@ public class ChecksumCalculator {
         appendObject(workingDirectory);
     }
 
-    public void add(ArtifactRepository localRepository) {
-        appendObject(localRepository);
-    }
-
     public void add(List<?> items) {
         if (items != null) {
             for (Object item : items) {
diff --git 
a/maven-surefire-common/src/test/java/org/apache/maven/plugin/surefire/AbstractSurefireMojoTest.java
 
b/maven-surefire-common/src/test/java/org/apache/maven/plugin/surefire/AbstractSurefireMojoTest.java
index 76e372954..0fc3ccded 100644
--- 
a/maven-surefire-common/src/test/java/org/apache/maven/plugin/surefire/AbstractSurefireMojoTest.java
+++ 
b/maven-surefire-common/src/test/java/org/apache/maven/plugin/surefire/AbstractSurefireMojoTest.java
@@ -40,10 +40,6 @@ import org.apache.maven.artifact.Artifact;
 import org.apache.maven.artifact.DefaultArtifact;
 import org.apache.maven.artifact.handler.ArtifactHandler;
 import org.apache.maven.artifact.handler.DefaultArtifactHandler;
-import org.apache.maven.artifact.repository.ArtifactRepository;
-import org.apache.maven.artifact.resolver.ArtifactResolutionRequest;
-import org.apache.maven.artifact.resolver.ArtifactResolutionResult;
-import org.apache.maven.artifact.resolver.DefaultResolutionErrorHandler;
 import org.apache.maven.artifact.versioning.VersionRange;
 import org.apache.maven.execution.MavenSession;
 import org.apache.maven.model.Dependency;
@@ -54,8 +50,6 @@ import 
org.apache.maven.plugin.surefire.AbstractSurefireMojo.JUnitPlatformProvid
 import org.apache.maven.plugin.surefire.booterclient.Platform;
 import org.apache.maven.plugin.surefire.log.PluginConsoleLogger;
 import org.apache.maven.project.MavenProject;
-import org.apache.maven.project.ProjectBuildingRequest;
-import org.apache.maven.repository.RepositorySystem;
 import org.apache.maven.surefire.api.suite.RunResult;
 import org.apache.maven.surefire.api.util.DefaultScanResult;
 import org.apache.maven.surefire.api.util.SureFireFileManager;
@@ -81,8 +75,6 @@ import org.junit.rules.TemporaryFolder;
 import org.junit.runner.RunWith;
 import org.mockito.ArgumentCaptor;
 import org.mockito.Mock;
-import org.mockito.invocation.InvocationOnMock;
-import org.mockito.stubbing.Answer;
 import org.powermock.core.classloader.annotations.PowerMockIgnore;
 import org.powermock.core.classloader.annotations.PrepareForTest;
 import org.powermock.modules.junit4.PowerMockRunner;
@@ -95,6 +87,7 @@ import static java.util.Collections.emptyList;
 import static java.util.Collections.emptyMap;
 import static java.util.Collections.singleton;
 import static java.util.Collections.singletonList;
+import static 
org.apache.maven.artifact.ArtifactUtils.artifactMapByVersionlessId;
 import static 
org.apache.maven.artifact.versioning.VersionRange.createFromVersion;
 import static 
org.apache.maven.artifact.versioning.VersionRange.createFromVersionSpec;
 import static org.apache.maven.surefire.shared.lang3.JavaVersion.JAVA_9;
@@ -102,9 +95,9 @@ import static 
org.apache.maven.surefire.shared.lang3.JavaVersion.JAVA_RECENT;
 import static org.apache.maven.surefire.shared.lang3.SystemUtils.IS_OS_WINDOWS;
 import static org.assertj.core.api.Assertions.assertThat;
 import static 
org.codehaus.plexus.languages.java.jpms.ModuleNameSource.MODULEDESCRIPTOR;
-import static org.junit.Assert.fail;
 import static org.mockito.ArgumentMatchers.any;
 import static org.mockito.ArgumentMatchers.anyString;
+import static org.mockito.ArgumentMatchers.eq;
 import static org.mockito.Mockito.times;
 import static org.mockito.Mockito.verify;
 import static org.mockito.Mockito.when;
@@ -162,7 +155,6 @@ public class AbstractSurefireMojoTest {
         plugin.setVersion(mojoArtifact.getVersion());
         when(pluginDescriptor.getPlugin()).thenReturn(plugin);
         mojo.setPluginDescriptor(pluginDescriptor);
-        mojo.setResolutionErrorHandler(new DefaultResolutionErrorHandler());
     }
 
     @Test
@@ -857,143 +849,20 @@ public class AbstractSurefireMojoTest {
         TestClassPath testClasspathWrapper =
                 new TestClassPath(testArtifacts, classesDirectory, 
testClassesDirectory, null);
 
-        
mojo.setRemoteRepositories(Collections.<ArtifactRepository>emptyList());
-        
mojo.setProjectRemoteRepositories(Collections.<ArtifactRepository>emptyList());
-        RepositorySystem repositorySystem = mock(RepositorySystem.class);
+        SurefireDependencyResolver dependencyResolver = 
mock(SurefireDependencyResolver.class);
+        mojo.setSurefireDependencyResolver(dependencyResolver);
 
-        final Artifact surefireProvider = new DefaultArtifact(
-                "org.apache.maven.surefire",
-                "surefire-junit-platform",
-                surefireVersion,
-                null,
-                "jar",
-                null,
-                mock(ArtifactHandler.class));
-
-        final Artifact pluginDependency = new DefaultArtifact(
-                "org.junit.vintage",
-                "junit-vintage-engine",
-                createFromVersion("5.4.0"),
-                null,
-                "jar",
-                null,
-                mock(ArtifactHandler.class));
+        when(dependencyResolver.getProviderClasspathAsMap(any(), any(), 
anyString(), anyString()))
+                
.thenReturn(artifactMapByVersionlessId(createSurefireProviderResolutionResult(surefireVersion)));
 
-        
when(repositorySystem.createDependencyArtifact(any(Dependency.class))).thenAnswer(new
 Answer<Artifact>() {
-            @Override
-            public Artifact answer(InvocationOnMock invocation) {
-                Dependency dependency = (Dependency) 
invocation.getArguments()[0];
-                if 
(dependency.getArtifactId().equals("surefire-junit-platform")) {
-                    return surefireProvider;
-                } else if 
(dependency.getArtifactId().equals("junit-vintage-engine")) {
-                    return pluginDependency;
-                } else {
-                    fail(dependency.getGroupId() + ":" + 
dependency.getArtifactId());
-                    return null;
-                }
-            }
-        });
-
-        final ArtifactResolutionResult surefireProviderResolutionResult = 
mock(ArtifactResolutionResult.class);
-        final ArtifactResolutionResult pluginDependencyResolutionResult = 
mock(ArtifactResolutionResult.class);
-        when(repositorySystem.resolve(any(ArtifactResolutionRequest.class)))
-                .thenAnswer(new Answer<ArtifactResolutionResult>() {
-                    @Override
-                    public ArtifactResolutionResult answer(InvocationOnMock 
invocation) {
-                        ArtifactResolutionRequest req =
-                                (ArtifactResolutionRequest) 
invocation.getArguments()[0];
-                        Artifact artifact = req.getArtifact();
-                        if (artifact == surefireProvider) {
-                            return surefireProviderResolutionResult;
-                        } else if (artifact == pluginDependency) {
-                            return pluginDependencyResolutionResult;
-                        } else if 
("org.junit.platform".equals(artifact.getGroupId())
-                                && 
"junit-platform-launcher".equals(artifact.getArtifactId())
-                                && "1.4.0".equals(artifact.getVersion())) {
-                            return 
createExpectedJUnitPlatformLauncherResolutionResult();
-                        } else {
-                            fail(artifact.getGroupId() + ":" + 
artifact.getArtifactId());
-                            return null;
-                        }
-                    }
-                });
-
-        Artifact java5 = new DefaultArtifact(
-                "org.apache.maven.surefire",
-                "common-java5",
-                surefireVersion,
-                null,
-                "jar",
-                null,
-                mock(ArtifactHandler.class));
-        Artifact launcher = new DefaultArtifact(
-                "org.junit.platform",
-                "junit-platform-launcher",
-                createFromVersion("1.3.2"),
-                null,
-                "jar",
-                null,
-                mock(ArtifactHandler.class));
-        Artifact apiguardian = new DefaultArtifact(
-                "org.apiguardian",
-                "apiguardian-api",
-                createFromVersion("1.0.0"),
-                null,
-                "jar",
-                null,
-                mock(ArtifactHandler.class));
-        Artifact engine = new DefaultArtifact(
-                "org.junit.platform",
-                "junit-platform-engine",
-                createFromVersion("1.3.2"),
-                null,
-                "jar",
-                null,
-                mock(ArtifactHandler.class));
-        Artifact commons = new DefaultArtifact(
-                "org.junit.platform",
-                "junit-platform-commons",
-                createFromVersion("1.3.2"),
-                null,
-                "jar",
-                null,
-                mock(ArtifactHandler.class));
-        Artifact opentest4j = new DefaultArtifact(
-                "org.opentest4j",
-                "opentest4j",
-                createFromVersion("1.1.1"),
-                null,
-                "jar",
-                null,
-                mock(ArtifactHandler.class));
-        Set<Artifact> providerArtifacts = new HashSet<>();
-        providerArtifacts.add(surefireProvider);
-        providerArtifacts.add(java5);
-        providerArtifacts.add(launcher);
-        providerArtifacts.add(apiguardian);
-        providerArtifacts.add(engine);
-        providerArtifacts.add(commons);
-        providerArtifacts.add(opentest4j);
-
-        
when(surefireProviderResolutionResult.getArtifacts()).thenReturn(providerArtifacts);
+        when(dependencyResolver.resolveArtifacts(any(), any(), any()))
+                
.thenReturn(createExpectedJUnitPlatformLauncherResolutionResult());
 
         final Artifact pluginDep1 = new DefaultArtifact(
-                "org.junit.vintage",
-                "junit-vintage-engine",
-                createFromVersion("5.4.0"),
-                null,
-                "jar",
-                null,
-                mock(ArtifactHandler.class));
+                "org.junit.vintage", "junit-vintage-engine", 
createFromVersion("5.4.0"), null, "jar", "", null);
 
         final Artifact pluginDep2 = new DefaultArtifact(
-                "org.apiguardian",
-                "apiguardian-api",
-                createFromVersion("1.0.0"),
-                null,
-                "jar",
-                null,
-                mock(ArtifactHandler.class));
+                "org.apiguardian", "apiguardian-api", 
createFromVersion("1.0.0"), null, "jar", "", null);
 
         final Artifact pluginDep3 = new DefaultArtifact(
                 "org.junit.platform",
@@ -1036,7 +905,6 @@ public class AbstractSurefireMojoTest {
 
         addPluginDependencies(pluginDep1, pluginDep2, pluginDep3, pluginDep4, 
pluginDep5, pluginDep6, pluginDep7);
 
-        mojo.setRepositorySystem(repositorySystem);
         mojo.setLogger(mock(Logger.class));
 
         Set<Artifact> pluginDependencyArtifacts = new HashSet<>();
@@ -1047,17 +915,14 @@ public class AbstractSurefireMojoTest {
         pluginDependencyArtifacts.add(pluginDep5);
         pluginDependencyArtifacts.add(pluginDep6);
         pluginDependencyArtifacts.add(pluginDep7);
-        
when(pluginDependencyResolutionResult.getArtifacts()).thenReturn(pluginDependencyArtifacts);
-
-        invokeMethod(mojo, "setupStuff");
 
-        
when(mojo.getSession().getProjectBuildingRequest()).thenReturn(mock(ProjectBuildingRequest.class));
+        when(dependencyResolver.resolvePluginDependencies(any(), any(), any(), 
any()))
+                
.thenReturn(artifactMapByVersionlessId(pluginDependencyArtifacts));
 
         PluginDescriptor pluginDescriptor = mock(PluginDescriptor.class);
         mojo.setPluginDescriptor(pluginDescriptor);
         Plugin p = mock(Plugin.class);
         when(pluginDescriptor.getPlugin()).thenReturn(p);
-        
when(p.getDependencies()).thenReturn(singletonList(toDependency(pluginDependency)));
 
         Artifact junitPlatformArtifact = invokeMethod(mojo, 
"getJUnit5Artifact");
         
assertThat(junitPlatformArtifact.getGroupId()).isEqualTo("org.junit.platform");
@@ -1070,69 +935,22 @@ public class AbstractSurefireMojoTest {
         assertThat(prov.isApplicable()).isTrue();
 
         Artifact expectedProvider = new DefaultArtifact(
-                "org.apache.maven.surefire",
-                "surefire-junit-platform",
-                surefireVersion,
-                null,
-                "jar",
-                null,
-                mock(ArtifactHandler.class));
+                "org.apache.maven.surefire", "surefire-junit-platform", 
surefireVersion, null, "jar", "", null);
         Artifact expectedCommonJava5 = new DefaultArtifact(
-                "org.apache.maven.surefire",
-                "common-java5",
-                surefireVersion,
-                null,
-                "jar",
-                null,
-                mock(ArtifactHandler.class));
+                "org.apache.maven.surefire", "common-java5", surefireVersion, 
null, "jar", "", null);
         Artifact expectedLauncher = new DefaultArtifact(
-                "org.junit.platform",
-                "junit-platform-launcher",
-                createFromVersion("1.4.0"),
-                null,
-                "jar",
-                null,
-                mock(ArtifactHandler.class));
+                "org.junit.platform", "junit-platform-launcher", 
createFromVersion("1.4.0"), null, "jar", "", null);
         Artifact expectedApiguardian = new DefaultArtifact(
-                "org.apiguardian",
-                "apiguardian-api",
-                createFromVersion("1.0.0"),
-                null,
-                "jar",
-                null,
-                mock(ArtifactHandler.class));
+                "org.apiguardian", "apiguardian-api", 
createFromVersion("1.0.0"), null, "jar", "", null);
         Artifact expectedJUnit5Engine = new DefaultArtifact(
-                "org.junit.platform",
-                "junit-platform-engine",
-                createFromVersion("1.4.0"),
-                null,
-                "jar",
-                null,
-                mock(ArtifactHandler.class));
-        Artifact expectedOpentest4j = new DefaultArtifact(
-                "org.opentest4j",
-                "opentest4j",
-                createFromVersion("1.1.1"),
-                null,
-                "jar",
-                null,
-                mock(ArtifactHandler.class));
+                "org.junit.platform", "junit-platform-engine", 
createFromVersion("1.4.0"), null, "jar", "", null);
+        Artifact expectedOpentest4j =
+                new DefaultArtifact("org.opentest4j", "opentest4j", 
createFromVersion("1.1.1"), null, "jar", "", null);
         Artifact expectedPlatformCommons = new DefaultArtifact(
-                "org.junit.platform",
-                "junit-platform-commons",
-                createFromVersion("1.4.0"),
-                null,
-                "jar",
-                null,
-                mock(ArtifactHandler.class));
+                "org.junit.platform", "junit-platform-commons", 
createFromVersion("1.4.0"), null, "jar", "", null);
         Artifact expectedEngine = new DefaultArtifact(
-                "org.junit.vintage",
-                "junit-vintage-engine",
-                createFromVersion("5.4.0"),
-                null,
-                "jar",
-                null,
-                mock(ArtifactHandler.class));
+                "org.junit.vintage", "junit-vintage-engine", 
createFromVersion("5.4.0"), null, "jar", "", null);
+
         assertThat(prov.getProviderClasspath())
                 .hasSize(8)
                 .containsOnly(
@@ -1239,109 +1057,16 @@ public class AbstractSurefireMojoTest {
         TestClassPath testClasspathWrapper =
                 new TestClassPath(testArtifacts, classesDirectory, 
testClassesDirectory, null);
 
-        
mojo.setRemoteRepositories(Collections.<ArtifactRepository>emptyList());
-        
mojo.setProjectRemoteRepositories(Collections.<ArtifactRepository>emptyList());
-        RepositorySystem repositorySystem = mock(RepositorySystem.class);
-        final Artifact surefireProvider = new DefaultArtifact(
-                "org.apache.maven.surefire",
-                "surefire-junit-platform",
-                surefireVersion,
-                null,
-                "jar",
-                null,
-                mock(ArtifactHandler.class));
-        
when(repositorySystem.createDependencyArtifact(any(Dependency.class))).thenAnswer(new
 Answer<Artifact>() {
-            @Override
-            public Artifact answer(InvocationOnMock invocation) {
-                Dependency provider = (Dependency) 
invocation.getArguments()[0];
-                
assertThat(provider.getGroupId()).isEqualTo("org.apache.maven.surefire");
-                
assertThat(provider.getArtifactId()).isEqualTo("surefire-junit-platform");
-                return surefireProvider;
-            }
-        });
-        final ArtifactResolutionResult surefireProviderResolutionResult = 
mock(ArtifactResolutionResult.class);
-        when(repositorySystem.resolve(any(ArtifactResolutionRequest.class)))
-                .thenAnswer(new Answer<ArtifactResolutionResult>() {
-                    @Override
-                    public ArtifactResolutionResult answer(InvocationOnMock 
invocation) {
-                        ArtifactResolutionRequest req =
-                                (ArtifactResolutionRequest) 
invocation.getArguments()[0];
-                        Artifact resolvable = req.getArtifact();
-                        if (resolvable == surefireProvider) {
-                            return surefireProviderResolutionResult;
-                        } else if 
("org.junit.platform".equals(resolvable.getGroupId())
-                                && 
"junit-platform-launcher".equals(resolvable.getArtifactId())
-                                && "1.4.0".equals(resolvable.getVersion())) {
-                            return 
createExpectedJUnitPlatformLauncherResolutionResult();
-                        } else {
-                            fail(resolvable.getGroupId() + ":" + 
resolvable.getArtifactId());
-                            return null;
-                        }
-                    }
-                });
+        SurefireDependencyResolver dependencyResolver = 
mock(SurefireDependencyResolver.class);
+        mojo.setSurefireDependencyResolver(dependencyResolver);
 
-        Artifact java5 = new DefaultArtifact(
-                "org.apache.maven.surefire",
-                "common-java5",
-                surefireVersion,
-                null,
-                "jar",
-                null,
-                mock(ArtifactHandler.class));
-        Artifact launcher = new DefaultArtifact(
-                "org.junit.platform",
-                "junit-platform-launcher",
-                createFromVersion("1.3.2"),
-                null,
-                "jar",
-                null,
-                mock(ArtifactHandler.class));
-        Artifact apiguardian = new DefaultArtifact(
-                "org.apiguardian",
-                "apiguardian-api",
-                createFromVersion("1.0.0"),
-                null,
-                "jar",
-                null,
-                mock(ArtifactHandler.class));
-        Artifact engine = new DefaultArtifact(
-                "org.junit.platform",
-                "junit-platform-engine",
-                createFromVersion("1.3.2"),
-                null,
-                "jar",
-                null,
-                mock(ArtifactHandler.class));
-        Artifact commons = new DefaultArtifact(
-                "org.junit.platform",
-                "junit-platform-commons",
-                createFromVersion("1.3.2"),
-                null,
-                "jar",
-                null,
-                mock(ArtifactHandler.class));
-        Artifact opentest4j = new DefaultArtifact(
-                "org.opentest4j",
-                "opentest4j",
-                createFromVersion("1.1.1"),
-                null,
-                "jar",
-                null,
-                mock(ArtifactHandler.class));
-        Set<Artifact> providerArtifacts = new HashSet<>();
-        providerArtifacts.add(surefireProvider);
-        providerArtifacts.add(java5);
-        providerArtifacts.add(launcher);
-        providerArtifacts.add(apiguardian);
-        providerArtifacts.add(engine);
-        providerArtifacts.add(commons);
-        providerArtifacts.add(opentest4j);
-        
when(surefireProviderResolutionResult.getArtifacts()).thenReturn(providerArtifacts);
+        when(dependencyResolver.getProviderClasspathAsMap(any(), any(), 
anyString(), anyString()))
+                
.thenReturn(artifactMapByVersionlessId(createSurefireProviderResolutionResult(surefireVersion)));
 
-        mojo.setRepositorySystem(repositorySystem);
-        mojo.setLogger(mock(Logger.class));
+        when(dependencyResolver.resolveArtifacts(any(), any(), any()))
+                
.thenReturn(createExpectedJUnitPlatformLauncherResolutionResult());
 
-        invokeMethod(mojo, "setupStuff");
+        mojo.setLogger(mock(Logger.class));
 
         PluginDescriptor pluginDescriptor = mock(PluginDescriptor.class);
         mojo.setPluginDescriptor(pluginDescriptor);
@@ -1360,29 +1085,11 @@ public class AbstractSurefireMojoTest {
         assertThat(prov.isApplicable()).isTrue();
 
         Artifact expectedProvider = new DefaultArtifact(
-                "org.apache.maven.surefire",
-                "surefire-junit-platform",
-                surefireVersion,
-                null,
-                "jar",
-                null,
-                mock(ArtifactHandler.class));
+                "org.apache.maven.surefire", "surefire-junit-platform", 
surefireVersion, null, "jar", "", null);
         Artifact expectedCommonJava5 = new DefaultArtifact(
-                "org.apache.maven.surefire",
-                "common-java5",
-                surefireVersion,
-                null,
-                "jar",
-                null,
-                mock(ArtifactHandler.class));
+                "org.apache.maven.surefire", "common-java5", surefireVersion, 
null, "jar", "", null);
         Artifact expectedLauncher = new DefaultArtifact(
-                "org.junit.platform",
-                "junit-platform-launcher",
-                createFromVersion("1.4.0"),
-                null,
-                "jar",
-                null,
-                mock(ArtifactHandler.class));
+                "org.junit.platform", "junit-platform-launcher", 
createFromVersion("1.4.0"), null, "jar", "", null);
         assertThat(prov.getProviderClasspath())
                 .hasSize(3)
                 .containsOnly(expectedProvider, expectedCommonJava5, 
expectedLauncher);
@@ -1441,54 +1148,19 @@ public class AbstractSurefireMojoTest {
         TestClassPath testClasspathWrapper =
                 new TestClassPath(testArtifacts, classesDirectory, 
testClassesDirectory, null);
 
-        
mojo.setRemoteRepositories(Collections.<ArtifactRepository>emptyList());
-        
mojo.setProjectRemoteRepositories(Collections.<ArtifactRepository>emptyList());
-        RepositorySystem repositorySystem = mock(RepositorySystem.class);
-        final Artifact surefireProvider = new DefaultArtifact(
-                "org.apache.maven.surefire",
-                "surefire-junit-platform",
-                surefireVersion,
-                null,
-                "jar",
-                null,
-                mock(ArtifactHandler.class));
-        
when(repositorySystem.createDependencyArtifact(any(Dependency.class))).thenAnswer(new
 Answer<Artifact>() {
-            @Override
-            public Artifact answer(InvocationOnMock invocation) {
-                Dependency provider = (Dependency) 
invocation.getArguments()[0];
-                
assertThat(provider.getGroupId()).isEqualTo("org.apache.maven.surefire");
-                
assertThat(provider.getArtifactId()).isEqualTo("surefire-junit-platform");
-                return surefireProvider;
-            }
-        });
-
-        when(repositorySystem.resolve(any(ArtifactResolutionRequest.class)))
-                .thenAnswer(new Answer<ArtifactResolutionResult>() {
-                    @Override
-                    public ArtifactResolutionResult answer(InvocationOnMock 
invocation) {
-                        ArtifactResolutionRequest req =
-                                (ArtifactResolutionRequest) 
invocation.getArguments()[0];
-                        Artifact resolvable = req.getArtifact();
-                        if (resolvable == surefireProvider) {
-                            return 
createSurefireProviderResolutionResult(surefireVersion);
-                        } else if 
("org.junit.platform".equals(resolvable.getGroupId())
-                                && 
"junit-platform-launcher".equals(resolvable.getArtifactId())
-                                && "1.4.0".equals(resolvable.getVersion())) {
-                            return 
createExpectedJUnitPlatformLauncherResolutionResult();
-                        } else {
-                            fail(resolvable.getGroupId() + ":" + 
resolvable.getArtifactId());
-                            return null;
-                        }
-                    }
-                });
-
-        mojo.setRepositorySystem(repositorySystem);
+        SurefireDependencyResolver dependencyResolver = 
mock(SurefireDependencyResolver.class);
+        mojo.setSurefireDependencyResolver(dependencyResolver);
+
+        when(dependencyResolver.getProviderClasspathAsMap(any(), any(), 
anyString(), anyString()))
+                
.thenReturn(artifactMapByVersionlessId(createSurefireProviderResolutionResult(surefireVersion)));
+
+        when(dependencyResolver.resolveArtifacts(any(), any(), any()))
+                
.thenReturn(createExpectedJUnitPlatformLauncherResolutionResult());
+
         mojo.setLogger(mock(Logger.class));
 
         invokeMethod(mojo, "setupStuff");
 
-        
when(mojo.getSession().getProjectBuildingRequest()).thenReturn(mock(ProjectBuildingRequest.class));
-
         PluginDescriptor pluginDescriptor = mock(PluginDescriptor.class);
         mojo.setPluginDescriptor(pluginDescriptor);
         Plugin p = mock(Plugin.class);
@@ -1508,45 +1180,15 @@ public class AbstractSurefireMojoTest {
         Set<Artifact> resolvedProviderArtifacts = prov.getProviderClasspath();
 
         Artifact provider = new DefaultArtifact(
-                "org.apache.maven.surefire",
-                "surefire-junit-platform",
-                surefireVersion,
-                null,
-                "jar",
-                null,
-                mock(ArtifactHandler.class));
+                "org.apache.maven.surefire", "surefire-junit-platform", 
surefireVersion, null, "jar", "", null);
         Artifact java5 = new DefaultArtifact(
-                "org.apache.maven.surefire",
-                "common-java5",
-                surefireVersion,
-                null,
-                "jar",
-                null,
-                mock(ArtifactHandler.class));
+                "org.apache.maven.surefire", "common-java5", surefireVersion, 
null, "jar", "", null);
         Artifact launcher = new DefaultArtifact(
-                "org.junit.platform",
-                "junit-platform-launcher",
-                createFromVersion("1.4.0"),
-                null,
-                "jar",
-                null,
-                mock(ArtifactHandler.class));
+                "org.junit.platform", "junit-platform-launcher", 
createFromVersion("1.4.0"), null, "jar", "", null);
         Artifact engine = new DefaultArtifact(
-                "org.junit.platform",
-                "junit-platform-engine",
-                createFromVersion("1.4.0"),
-                null,
-                "jar",
-                null,
-                mock(ArtifactHandler.class));
-        Artifact opentest4j = new DefaultArtifact(
-                "org.opentest4j",
-                "opentest4j",
-                createFromVersion("1.1.1"),
-                null,
-                "jar",
-                null,
-                mock(ArtifactHandler.class));
+                "org.junit.platform", "junit-platform-engine", 
createFromVersion("1.4.0"), null, "jar", "", null);
+        Artifact opentest4j =
+                new DefaultArtifact("org.opentest4j", "opentest4j", 
createFromVersion("1.1.1"), null, "jar", "", null);
         
assertThat(resolvedProviderArtifacts).hasSize(5).containsOnly(provider, java5, 
launcher, engine, opentest4j);
 
         assertThat(testClasspathWrapper.getTestDependencies())
@@ -1620,48 +1262,15 @@ public class AbstractSurefireMojoTest {
         TestClassPath testClasspathWrapper =
                 new TestClassPath(testArtifacts, classesDirectory, 
testClassesDirectory, null);
 
-        
mojo.setRemoteRepositories(Collections.<ArtifactRepository>emptyList());
-        
mojo.setProjectRemoteRepositories(Collections.<ArtifactRepository>emptyList());
-        RepositorySystem repositorySystem = mock(RepositorySystem.class);
-        final Artifact surefireProvider = new DefaultArtifact(
-                "org.apache.maven.surefire",
-                "surefire-junit-platform",
-                surefireVersion,
-                null,
-                "jar",
-                null,
-                mock(ArtifactHandler.class));
-        
when(repositorySystem.createDependencyArtifact(any(Dependency.class))).thenAnswer(new
 Answer<Artifact>() {
-            @Override
-            public Artifact answer(InvocationOnMock invocation) {
-                Dependency provider = (Dependency) 
invocation.getArguments()[0];
-                
assertThat(provider.getGroupId()).isEqualTo("org.apache.maven.surefire");
-                
assertThat(provider.getArtifactId()).isEqualTo("surefire-junit-platform");
-                return surefireProvider;
-            }
-        });
-
-        when(repositorySystem.resolve(any(ArtifactResolutionRequest.class)))
-                .thenAnswer(new Answer<ArtifactResolutionResult>() {
-                    @Override
-                    public ArtifactResolutionResult answer(InvocationOnMock 
invocation) {
-                        ArtifactResolutionRequest req =
-                                (ArtifactResolutionRequest) 
invocation.getArguments()[0];
-                        Artifact resolvable = req.getArtifact();
-                        if (resolvable == surefireProvider) {
-                            return 
createSurefireProviderResolutionResult(surefireVersion);
-                        } else if 
("org.junit.platform".equals(resolvable.getGroupId())
-                                && 
"junit-platform-launcher".equals(resolvable.getArtifactId())
-                                && "1.4.0".equals(resolvable.getVersion())) {
-                            return 
createExpectedJUnitPlatformLauncherResolutionResult();
-                        } else {
-                            fail(resolvable.getGroupId() + ":" + 
resolvable.getArtifactId());
-                            return null;
-                        }
-                    }
-                });
-
-        mojo.setRepositorySystem(repositorySystem);
+        SurefireDependencyResolver dependencyResolver = 
mock(SurefireDependencyResolver.class);
+        mojo.setSurefireDependencyResolver(dependencyResolver);
+
+        when(dependencyResolver.getProviderClasspathAsMap(any(), any(), 
anyString(), anyString()))
+                
.thenReturn(artifactMapByVersionlessId(createSurefireProviderResolutionResult(surefireVersion)));
+
+        when(dependencyResolver.resolveArtifacts(any(), any(), any()))
+                
.thenReturn(createExpectedJUnitPlatformLauncherResolutionResult());
+
         mojo.setLogger(mock(Logger.class));
 
         invokeMethod(mojo, "setupStuff");
@@ -1676,24 +1285,16 @@ public class AbstractSurefireMojoTest {
 
         assertThat(prov.isApplicable()).isTrue();
 
-        Set<Artifact> resolvedProviderArtifacts = prov.getProviderClasspath();
+        Artifact surefireProvider = new DefaultArtifact(
+                "org.apache.maven.surefire", "surefire-junit-platform", 
surefireVersion, null, "jar", "", null);
 
         Artifact java5 = new DefaultArtifact(
-                "org.apache.maven.surefire",
-                "common-java5",
-                surefireVersion,
-                null,
-                "jar",
-                null,
-                mock(ArtifactHandler.class));
+                "org.apache.maven.surefire", "common-java5", surefireVersion, 
null, "jar", "", null);
         Artifact launcher = new DefaultArtifact(
-                "org.junit.platform",
-                "junit-platform-launcher",
-                createFromVersion("1.4.0"),
-                null,
-                "jar",
-                null,
-                mock(ArtifactHandler.class));
+                "org.junit.platform", "junit-platform-launcher", 
createFromVersion("1.4.0"), null, "jar", "", null);
+
+        Set<Artifact> resolvedProviderArtifacts = prov.getProviderClasspath();
+
         
assertThat(resolvedProviderArtifacts).hasSize(3).containsOnly(surefireProvider, 
java5, launcher);
 
         assertThat(testClasspathWrapper.getTestDependencies())
@@ -1766,60 +1367,40 @@ public class AbstractSurefireMojoTest {
 
         File testClassesDirectory = new File("target/test-classes");
 
-        TestClassPath testClasspathWrapper =
-                new TestClassPath(testArtifacts, classesDirectory, 
testClassesDirectory, null);
+        TestClassPath testClasspathWrapper =
+                new TestClassPath(testArtifacts, classesDirectory, 
testClassesDirectory, null);
+
+        SurefireDependencyResolver dependencyResolver = 
mock(SurefireDependencyResolver.class);
+        mojo.setSurefireDependencyResolver(dependencyResolver);
+
+        when(dependencyResolver.getProviderClasspathAsMap(any(), any(), 
anyString(), anyString()))
+                
.thenReturn(artifactMapByVersionlessId(createSurefireProviderResolutionResult(surefireVersion)));
+
+        Artifact jUnitPlatformLauncherArtifact = new DefaultArtifact(
+                "org.junit.platform",
+                "junit-platform-launcher",
+                createFromVersion("1.4.0"),
+                null,
+                "jar",
+                null,
+                mock(ArtifactHandler.class));
+
+        when(dependencyResolver.resolveArtifacts(any(), any(), 
eq(jUnitPlatformLauncherArtifact)))
+                
.thenReturn(createExpectedJUnitPlatformLauncherResolutionResult());
 
-        
mojo.setRemoteRepositories(Collections.<ArtifactRepository>emptyList());
-        
mojo.setProjectRemoteRepositories(Collections.<ArtifactRepository>emptyList());
-        RepositorySystem repositorySystem = mock(RepositorySystem.class);
-        final Artifact surefireProvider = new DefaultArtifact(
-                "org.apache.maven.surefire",
-                "surefire-junit-platform",
-                surefireVersion,
+        Artifact jupiterEngineArtifact = new DefaultArtifact(
+                "org.junit.jupiter",
+                "junit-jupiter-engine",
+                createFromVersion("5.4.0"),
                 null,
                 "jar",
                 null,
                 mock(ArtifactHandler.class));
-        
when(repositorySystem.createDependencyArtifact(any(Dependency.class))).thenAnswer(new
 Answer<Artifact>() {
-            @Override
-            public Artifact answer(InvocationOnMock invocation) {
-                Dependency provider = (Dependency) 
invocation.getArguments()[0];
-                
assertThat(provider.getGroupId()).isEqualTo("org.apache.maven.surefire");
-                
assertThat(provider.getArtifactId()).isEqualTo("surefire-junit-platform");
-                return surefireProvider;
-            }
-        });
-
-        when(repositorySystem.resolve(any(ArtifactResolutionRequest.class)))
-                .thenAnswer(new Answer<ArtifactResolutionResult>() {
-                    @Override
-                    public ArtifactResolutionResult answer(InvocationOnMock 
invocation) {
-                        ArtifactResolutionRequest req =
-                                (ArtifactResolutionRequest) 
invocation.getArguments()[0];
-                        Artifact resolvable = req.getArtifact();
-                        if (resolvable == surefireProvider) {
-                            return 
createSurefireProviderResolutionResult(surefireVersion);
-                        } else if 
("org.junit.platform".equals(resolvable.getGroupId())
-                                && 
"junit-platform-launcher".equals(resolvable.getArtifactId())
-                                && "1.4.0".equals(resolvable.getVersion())) {
-                            return 
createExpectedJUnitPlatformLauncherResolutionResult();
-                        } else if 
("org.junit.jupiter".equals(resolvable.getGroupId())
-                                && 
"junit-jupiter-engine".equals(resolvable.getArtifactId())
-                                && "5.4.0".equals(resolvable.getVersion())) {
-                            return createJupiterEngineResolutionResult();
-                        } else {
-                            fail(resolvable.getGroupId() + ":" + 
resolvable.getArtifactId());
-                            return null;
-                        }
-                    }
-                });
-
-        mojo.setRepositorySystem(repositorySystem);
-        mojo.setLogger(mock(Logger.class));
 
-        invokeMethod(mojo, "setupStuff");
+        when(dependencyResolver.resolveArtifacts(any(), any(), 
eq(jupiterEngineArtifact)))
+                .thenReturn(createJupiterEngineResolutionResult());
 
-        
when(mojo.getSession().getProjectBuildingRequest()).thenReturn(mock(ProjectBuildingRequest.class));
+        mojo.setLogger(mock(Logger.class));
 
         PluginDescriptor pluginDescriptor = mock(PluginDescriptor.class);
         mojo.setPluginDescriptor(pluginDescriptor);
@@ -1837,40 +1418,26 @@ public class AbstractSurefireMojoTest {
 
         assertThat(prov.isApplicable()).isTrue();
 
-        Set<Artifact> resolvedProviderArtifacts = prov.getProviderClasspath();
+        final Artifact surefireProvider = new DefaultArtifact(
+                "org.apache.maven.surefire", "surefire-junit-platform", 
surefireVersion, null, "jar", "", null);
 
         Artifact java5 = new DefaultArtifact(
-                "org.apache.maven.surefire",
-                "common-java5",
-                surefireVersion,
-                null,
-                "jar",
-                null,
-                mock(ArtifactHandler.class));
+                "org.apache.maven.surefire", "common-java5", surefireVersion, 
null, "jar", "", null);
         Artifact launcher = new DefaultArtifact(
-                "org.junit.platform",
-                "junit-platform-launcher",
-                createFromVersion("1.4.0"),
-                null,
-                "jar",
-                null,
-                mock(ArtifactHandler.class));
+                "org.junit.platform", "junit-platform-launcher", 
createFromVersion("1.4.0"), null, "jar", "", null);
         Artifact jupiterEngine = new DefaultArtifact(
                 "org.junit.jupiter",
-                "junit-jupiter-engine",
+                "junit-jupiter-engine", ///// <------
                 createFromVersion("5.4.0"),
                 null,
                 "jar",
-                null,
-                mock(ArtifactHandler.class));
+                "",
+                null);
         Artifact platformEngine = new DefaultArtifact(
-                "org.junit.platform",
-                "junit-platform-engine",
-                createFromVersion("1.4.0"),
-                null,
-                "jar",
-                null,
-                mock(ArtifactHandler.class));
+                "org.junit.platform", "junit-platform-engine", 
createFromVersion("1.4.0"), null, "jar", "", null);
+
+        Set<Artifact> resolvedProviderArtifacts = prov.getProviderClasspath();
+
         assertThat(resolvedProviderArtifacts)
                 .hasSize(5)
                 .containsOnly(surefireProvider, java5, launcher, 
jupiterEngine, platformEngine);
@@ -1968,51 +1535,16 @@ public class AbstractSurefireMojoTest {
         TestClassPath testClasspathWrapper =
                 new TestClassPath(testArtifacts, classesDirectory, 
testClassesDirectory, null);
 
-        
mojo.setRemoteRepositories(Collections.<ArtifactRepository>emptyList());
-        
mojo.setProjectRemoteRepositories(Collections.<ArtifactRepository>emptyList());
-        RepositorySystem repositorySystem = mock(RepositorySystem.class);
-        final Artifact surefireProvider = new DefaultArtifact(
-                "org.apache.maven.surefire",
-                "surefire-junit-platform",
-                surefireVersion,
-                null,
-                "jar",
-                null,
-                mock(ArtifactHandler.class));
-        
when(repositorySystem.createDependencyArtifact(any(Dependency.class))).thenAnswer(new
 Answer<Artifact>() {
-            @Override
-            public Artifact answer(InvocationOnMock invocation) {
-                Dependency provider = (Dependency) 
invocation.getArguments()[0];
-                
assertThat(provider.getGroupId()).isEqualTo("org.apache.maven.surefire");
-                
assertThat(provider.getArtifactId()).isEqualTo("surefire-junit-platform");
-                return surefireProvider;
-            }
-        });
-
-        when(repositorySystem.resolve(any(ArtifactResolutionRequest.class)))
-                .thenAnswer(new Answer<ArtifactResolutionResult>() {
-                    @Override
-                    public ArtifactResolutionResult answer(InvocationOnMock 
invocation) {
-                        ArtifactResolutionRequest req =
-                                (ArtifactResolutionRequest) 
invocation.getArguments()[0];
-                        Artifact resolvable = req.getArtifact();
-                        if (resolvable == surefireProvider) {
-                            return 
createSurefireProviderResolutionResult(surefireVersion);
-                        } else if 
("org.junit.platform".equals(resolvable.getGroupId())
-                                && 
"junit-platform-launcher".equals(resolvable.getArtifactId())
-                                && "1.4.0".equals(resolvable.getVersion())) {
-                            return 
createExpectedJUnitPlatformLauncherResolutionResult();
-                        } else {
-                            fail(resolvable.getGroupId() + ":" + 
resolvable.getArtifactId());
-                            return null;
-                        }
-                    }
-                });
-
-        mojo.setRepositorySystem(repositorySystem);
-        mojo.setLogger(mock(Logger.class));
+        SurefireDependencyResolver dependencyResolver = 
mock(SurefireDependencyResolver.class);
+        mojo.setSurefireDependencyResolver(dependencyResolver);
 
-        invokeMethod(mojo, "setupStuff");
+        when(dependencyResolver.getProviderClasspathAsMap(any(), any(), 
anyString(), anyString()))
+                
.thenReturn(artifactMapByVersionlessId(createSurefireProviderResolutionResult(surefireVersion)));
+
+        when(dependencyResolver.resolveArtifacts(any(), any(), any()))
+                
.thenReturn(createExpectedJUnitPlatformLauncherResolutionResult());
+
+        mojo.setLogger(mock(Logger.class));
 
         Artifact junitPlatformArtifact = invokeMethod(mojo, 
"getJUnit5Artifact");
         
assertThat(junitPlatformArtifact.getGroupId()).isEqualTo("org.junit.platform");
@@ -2024,24 +1556,15 @@ public class AbstractSurefireMojoTest {
 
         assertThat(prov.isApplicable()).isTrue();
 
-        Set<Artifact> resolvedProviderArtifacts = prov.getProviderClasspath();
-
+        Artifact surefireProvider = new DefaultArtifact(
+                "org.apache.maven.surefire", "surefire-junit-platform", 
surefireVersion, null, "jar", "", null);
         Artifact java5 = new DefaultArtifact(
-                "org.apache.maven.surefire",
-                "common-java5",
-                surefireVersion,
-                null,
-                "jar",
-                null,
-                mock(ArtifactHandler.class));
+                "org.apache.maven.surefire", "common-java5", surefireVersion, 
null, "jar", "", null);
         Artifact launcher = new DefaultArtifact(
-                "org.junit.platform",
-                "junit-platform-launcher",
-                createFromVersion("1.4.0"),
-                null,
-                "jar",
-                null,
-                mock(ArtifactHandler.class));
+                "org.junit.platform", "junit-platform-launcher", 
createFromVersion("1.4.0"), null, "jar", "", null);
+
+        Set<Artifact> resolvedProviderArtifacts = prov.getProviderClasspath();
+
         
assertThat(resolvedProviderArtifacts).hasSize(3).containsOnly(surefireProvider, 
java5, launcher);
 
         assertThat(testClasspathWrapper.getTestDependencies())
@@ -2078,13 +1601,7 @@ public class AbstractSurefireMojoTest {
                 mock(ArtifactHandler.class));
 
         final Artifact pluginDepJupiterEngine = new DefaultArtifact(
-                "org.junit.jupiter",
-                "junit-jupiter-engine",
-                createFromVersion("5.4.0"),
-                null,
-                "jar",
-                null,
-                mock(ArtifactHandler.class));
+                "org.junit.jupiter", "junit-jupiter-engine", 
createFromVersion("5.4.0"), null, "jar", "", null);
 
         final Artifact pluginDepPlatformEngine = new DefaultArtifact(
                 "org.junit.platform",
@@ -2131,14 +1648,15 @@ public class AbstractSurefireMojoTest {
                 null,
                 mock(ArtifactHandler.class));
 
-        
mojo.getPluginArtifactMap().put("org.apache.maven.surefire:maven-surefire-plugin",
 plugin);
-        
mojo.getPluginArtifactMap().put("org.apache.maven.surefire:surefire-booter", 
forkedBooter);
-        
mojo.getPluginArtifactMap().put("org.junit.jupiter:junit-jupiter-engine", 
pluginDepJupiterEngine);
-        
mojo.getPluginArtifactMap().put("org.junit.platform:junit-platform-engine", 
pluginDepPlatformEngine);
-        mojo.getPluginArtifactMap().put("org.junit.jupiter:junit-jupiter-api", 
pluginDepJupiterApi);
-        mojo.getPluginArtifactMap().put("org.apiguardian:apiguardian-api", 
pluginDepApiguardian);
-        
mojo.getPluginArtifactMap().put("org.junit.platform:junit-platform-commons", 
pluginDepCommons);
-        mojo.getPluginArtifactMap().put("org.opentest4j:opentest4j", 
pluginDepOpentest4j);
+        addPluginDependencies(
+                plugin,
+                forkedBooter,
+                pluginDepJupiterEngine,
+                pluginDepPlatformEngine,
+                pluginDepJupiterApi,
+                pluginDepApiguardian,
+                pluginDepCommons,
+                pluginDepOpentest4j);
 
         MavenProject mavenProject = new MavenProject();
         mavenProject.setArtifact(new DefaultArtifact(
@@ -2200,58 +1718,15 @@ public class AbstractSurefireMojoTest {
         TestClassPath testClasspathWrapper =
                 new TestClassPath(testArtifacts, classesDirectory, 
testClassesDirectory, null);
 
-        
mojo.setRemoteRepositories(Collections.<ArtifactRepository>emptyList());
-        
mojo.setProjectRemoteRepositories(Collections.<ArtifactRepository>emptyList());
-        RepositorySystem repositorySystem = mock(RepositorySystem.class);
+        SurefireDependencyResolver dependencyResolver = 
mock(SurefireDependencyResolver.class);
+        mojo.setSurefireDependencyResolver(dependencyResolver);
+
+        when(dependencyResolver.getProviderClasspathAsMap(any(), any(), 
anyString(), anyString()))
+                
.thenReturn(artifactMapByVersionlessId(createSurefireProviderResolutionResult(surefireVersion)));
+
+        when(dependencyResolver.resolveArtifacts(any(), any(), any()))
+                
.thenReturn(createExpectedJUnitPlatformLauncherResolutionResult());
 
-        final Artifact surefireProvider = new DefaultArtifact(
-                "org.apache.maven.surefire",
-                "surefire-junit-platform",
-                surefireVersion,
-                null,
-                "jar",
-                null,
-                mock(ArtifactHandler.class));
-        
when(repositorySystem.createDependencyArtifact(any(Dependency.class))).thenAnswer(new
 Answer<Artifact>() {
-            @Override
-            public Artifact answer(InvocationOnMock invocation) {
-                Dependency dependency = (Dependency) 
invocation.getArguments()[0];
-                if 
(dependency.getArtifactId().equals("surefire-junit-platform")) {
-                    return surefireProvider;
-                } else if 
(dependency.getArtifactId().equals("junit-jupiter-engine")) {
-                    return pluginDepJupiterEngine;
-                } else {
-                    fail(dependency.getGroupId() + ":" + 
dependency.getArtifactId());
-                    return null;
-                }
-            }
-        });
-
-        final ArtifactResolutionResult pluginDepJupiterEngineResolutionResult 
= mock(ArtifactResolutionResult.class);
-
-        when(repositorySystem.resolve(any(ArtifactResolutionRequest.class)))
-                .thenAnswer(new Answer<ArtifactResolutionResult>() {
-                    @Override
-                    public ArtifactResolutionResult answer(InvocationOnMock 
invocation) {
-                        ArtifactResolutionRequest req =
-                                (ArtifactResolutionRequest) 
invocation.getArguments()[0];
-                        Artifact resolvable = req.getArtifact();
-                        if (resolvable == surefireProvider) {
-                            return 
createSurefireProviderResolutionResult(surefireVersion);
-                        } else if (resolvable == pluginDepJupiterEngine) {
-                            return pluginDepJupiterEngineResolutionResult;
-                        } else if 
("org.junit.platform".equals(resolvable.getGroupId())
-                                && 
"junit-platform-launcher".equals(resolvable.getArtifactId())
-                                && "1.4.0".equals(resolvable.getVersion())) {
-                            return 
createExpectedJUnitPlatformLauncherResolutionResult();
-                        } else {
-                            fail(resolvable.getGroupId() + ":" + 
resolvable.getArtifactId());
-                            return null;
-                        }
-                    }
-                });
-
-        mojo.setRepositorySystem(repositorySystem);
         mojo.setLogger(mock(Logger.class));
 
         Set<Artifact> pluginDepJupiterEngineArtifacts = new HashSet<>();
@@ -2262,9 +1737,8 @@ public class AbstractSurefireMojoTest {
         pluginDepJupiterEngineArtifacts.add(pluginDepCommons);
         pluginDepJupiterEngineArtifacts.add(pluginDepOpentest4j);
 
-        
when(pluginDepJupiterEngineResolutionResult.getArtifacts()).thenReturn(pluginDepJupiterEngineArtifacts);
-
-        invokeMethod(mojo, "setupStuff");
+        when(dependencyResolver.resolvePluginDependencies(any(), any(), any(), 
any()))
+                
.thenReturn(artifactMapByVersionlessId(pluginDepJupiterEngineArtifacts));
 
         Artifact junitPlatformArtifact = invokeMethod(mojo, 
"getJUnit5Artifact");
         
assertThat(junitPlatformArtifact.getGroupId()).isEqualTo("org.junit.platform");
@@ -2276,8 +1750,6 @@ public class AbstractSurefireMojoTest {
 
         assertThat(prov.isApplicable()).isTrue();
 
-        
when(mojo.getSession().getProjectBuildingRequest()).thenReturn(mock(ProjectBuildingRequest.class));
-
         PluginDescriptor pluginDescriptor = mock(PluginDescriptor.class);
         mojo.setPluginDescriptor(pluginDescriptor);
         Plugin p = mock(Plugin.class);
@@ -2285,40 +1757,19 @@ public class AbstractSurefireMojoTest {
         List<Dependency> directPluginDependencies = 
toDependencies(pluginDepJupiterEngine);
         when(p.getDependencies()).thenReturn(directPluginDependencies);
 
-        Set<Artifact> resolvedProviderArtifacts = prov.getProviderClasspath();
-
+        Artifact surefireProvider = new DefaultArtifact(
+                "org.apache.maven.surefire", "surefire-junit-platform", 
surefireVersion, null, "jar", "", null);
         Artifact java5 = new DefaultArtifact(
-                "org.apache.maven.surefire",
-                "common-java5",
-                surefireVersion,
-                null,
-                "jar",
-                null,
-                mock(ArtifactHandler.class));
+                "org.apache.maven.surefire", "common-java5", surefireVersion, 
null, "jar", "", null);
         Artifact launcher = new DefaultArtifact(
-                "org.junit.platform",
-                "junit-platform-launcher",
-                createFromVersion("1.4.0"),
-                null,
-                "jar",
-                null,
-                mock(ArtifactHandler.class));
+                "org.junit.platform", "junit-platform-launcher", 
createFromVersion("1.4.0"), null, "jar", "", null);
         Artifact jupiterEngine = new DefaultArtifact(
-                "org.junit.jupiter",
-                "junit-jupiter-engine",
-                createFromVersion("5.4.0"),
-                null,
-                "jar",
-                null,
-                mock(ArtifactHandler.class));
+                "org.junit.jupiter", "junit-jupiter-engine", 
createFromVersion("5.4.0"), null, "jar", "", null);
         Artifact platformEngine = new DefaultArtifact(
-                "org.junit.platform",
-                "junit-platform-engine",
-                createFromVersion("1.4.0"),
-                null,
-                "jar",
-                null,
-                mock(ArtifactHandler.class));
+                "org.junit.platform", "junit-platform-engine", 
createFromVersion("1.4.0"), null, "jar", "", null);
+
+        Set<Artifact> resolvedProviderArtifacts = prov.getProviderClasspath();
+
         assertThat(resolvedProviderArtifacts)
                 .hasSize(5)
                 .containsOnly(surefireProvider, java5, launcher, 
jupiterEngine, platformEngine);
@@ -2354,178 +1805,65 @@ public class AbstractSurefireMojoTest {
         assertThat(properties).containsEntry("excludejunit5engines", "e1,e2");
     }
 
-    private static ArtifactResolutionResult 
createJUnitPlatformLauncherResolutionResult(
+    private static Set<Artifact> createJUnitPlatformLauncherResolutionResult(
             Artifact junit5Engine, Artifact apiguardian, Artifact commons, 
Artifact opentest4j) {
-        ArtifactResolutionResult launcherResolutionResult = 
mock(ArtifactResolutionResult.class);
         Set<Artifact> resolvedLauncherArtifacts = new HashSet<>();
         Artifact launcher = new DefaultArtifact(
-                "org.junit.platform",
-                "junit-platform-launcher",
-                commons.getVersionRange(),
-                null,
-                "jar",
-                null,
-                mock(ArtifactHandler.class));
+                "org.junit.platform", "junit-platform-launcher", 
commons.getVersionRange(), null, "jar", "", null);
         resolvedLauncherArtifacts.add(launcher);
         resolvedLauncherArtifacts.add(apiguardian);
         resolvedLauncherArtifacts.add(junit5Engine);
         resolvedLauncherArtifacts.add(commons);
         resolvedLauncherArtifacts.add(opentest4j);
         resolvedLauncherArtifacts.remove(null);
-        
when(launcherResolutionResult.getArtifacts()).thenReturn(resolvedLauncherArtifacts);
-        return launcherResolutionResult;
+        return resolvedLauncherArtifacts;
     }
 
-    private static ArtifactResolutionResult 
createJupiterEngineResolutionResult() {
-        ArtifactResolutionResult launcherResolutionResult = 
mock(ArtifactResolutionResult.class);
+    private static Set<Artifact> createJupiterEngineResolutionResult() {
         Set<Artifact> resolvedLauncherArtifacts = new HashSet<>();
         resolvedLauncherArtifacts.add(new DefaultArtifact(
-                "org.junit.jupiter",
-                "junit-jupiter-engine",
-                createFromVersion("5.4.0"),
-                null,
-                "jar",
-                null,
-                mock(ArtifactHandler.class)));
-        resolvedLauncherArtifacts.add(new DefaultArtifact(
-                "org.junit.jupiter",
-                "junit-jupiter-api",
-                createFromVersion("5.4.0"),
-                null,
-                "jar",
-                null,
-                mock(ArtifactHandler.class)));
+                "org.junit.jupiter", "junit-jupiter-engine", 
createFromVersion("5.4.0"), null, "jar", "", null));
         resolvedLauncherArtifacts.add(new DefaultArtifact(
-                "org.junit.platform",
-                "junit-platform-engine",
-                createFromVersion("1.4.0"),
-                null,
-                "jar",
-                null,
-                mock(ArtifactHandler.class)));
+                "org.junit.jupiter", "junit-jupiter-api", 
createFromVersion("5.4.0"), null, "jar", "", null));
         resolvedLauncherArtifacts.add(new DefaultArtifact(
-                "org.apiguardian",
-                "apiguardian-api",
-                createFromVersion("1.0.0"),
-                null,
-                "jar",
-                null,
-                mock(ArtifactHandler.class)));
+                "org.junit.platform", "junit-platform-engine", 
createFromVersion("1.4.0"), null, "jar", "", null));
         resolvedLauncherArtifacts.add(new DefaultArtifact(
-                "org.opentest4j",
-                "opentest4j",
-                createFromVersion("1.1.1"),
-                null,
-                "jar",
-                null,
-                mock(ArtifactHandler.class)));
+                "org.apiguardian", "apiguardian-api", 
createFromVersion("1.0.0"), null, "jar", "", null));
+        resolvedLauncherArtifacts.add(
+                new DefaultArtifact("org.opentest4j", "opentest4j", 
createFromVersion("1.1.1"), null, "jar", "", null));
         resolvedLauncherArtifacts.add(new DefaultArtifact(
-                "org.junit.platform",
-                "junit-platform-commons",
-                createFromVersion("1.4.0"),
-                null,
-                "jar",
-                null,
-                mock(ArtifactHandler.class)));
-        
when(launcherResolutionResult.getArtifacts()).thenReturn(resolvedLauncherArtifacts);
-        return launcherResolutionResult;
+                "org.junit.platform", "junit-platform-commons", 
createFromVersion("1.4.0"), null, "jar", "", null));
+        return resolvedLauncherArtifacts;
     }
 
-    private static ArtifactResolutionResult 
createExpectedJUnitPlatformLauncherResolutionResult() {
+    private static Set<Artifact> 
createExpectedJUnitPlatformLauncherResolutionResult() {
         Artifact engine = new DefaultArtifact(
-                "org.junit.platform",
-                "junit-platform-engine",
-                createFromVersion("1.4.0"),
-                null,
-                "jar",
-                null,
-                mock(ArtifactHandler.class));
+                "org.junit.platform", "junit-platform-engine", 
createFromVersion("1.4.0"), null, "jar", "", null);
         Artifact commons = new DefaultArtifact(
-                "org.junit.platform",
-                "junit-platform-commons",
-                createFromVersion("1.4.0"),
-                null,
-                "jar",
-                null,
-                mock(ArtifactHandler.class));
+                "org.junit.platform", "junit-platform-commons", 
createFromVersion("1.4.0"), null, "jar", "", null);
         Artifact apiguardian = new DefaultArtifact(
-                "org.apiguardian",
-                "apiguardian-api",
-                createFromVersion("1.0.0"),
-                null,
-                "jar",
-                null,
-                mock(ArtifactHandler.class));
-        Artifact opentest4j = new DefaultArtifact(
-                "org.opentest4j",
-                "opentest4j",
-                createFromVersion("1.1.1"),
-                null,
-                "jar",
-                null,
-                mock(ArtifactHandler.class));
+                "org.apiguardian", "apiguardian-api", 
createFromVersion("1.0.0"), null, "jar", "", null);
+        Artifact opentest4j =
+                new DefaultArtifact("org.opentest4j", "opentest4j", 
createFromVersion("1.1.1"), null, "jar", "", null);
         return createJUnitPlatformLauncherResolutionResult(engine, 
apiguardian, commons, opentest4j);
     }
 
-    private static ArtifactResolutionResult 
createSurefireProviderResolutionResult(VersionRange surefireVersion) {
-        ArtifactResolutionResult surefirePlatformResolutionResult = 
mock(ArtifactResolutionResult.class);
+    private static Set<Artifact> 
createSurefireProviderResolutionResult(VersionRange surefireVersion) {
 
         Artifact provider = new DefaultArtifact(
-                "org.apache.maven.surefire",
-                "surefire-junit-platform",
-                surefireVersion,
-                null,
-                "jar",
-                null,
-                mock(ArtifactHandler.class));
+                "org.apache.maven.surefire", "surefire-junit-platform", 
surefireVersion, null, "jar", "", null);
         Artifact java5 = new DefaultArtifact(
-                "org.apache.maven.surefire",
-                "common-java5",
-                surefireVersion,
-                null,
-                "jar",
-                null,
-                mock(ArtifactHandler.class));
+                "org.apache.maven.surefire", "common-java5", surefireVersion, 
null, "jar", "", null);
         Artifact launcher = new DefaultArtifact(
-                "org.junit.platform",
-                "junit-platform-launcher",
-                createFromVersion("1.3.2"),
-                null,
-                "jar",
-                null,
-                mock(ArtifactHandler.class));
+                "org.junit.platform", "junit-platform-launcher", 
createFromVersion("1.3.2"), null, "jar", "", null);
         Artifact apiguardian = new DefaultArtifact(
-                "org.apiguardian",
-                "apiguardian-api",
-                createFromVersion("1.0.0"),
-                null,
-                "jar",
-                null,
-                mock(ArtifactHandler.class));
+                "org.apiguardian", "apiguardian-api", 
createFromVersion("1.0.0"), null, "jar", "", null);
         Artifact engine = new DefaultArtifact(
-                "org.junit.platform",
-                "junit-platform-engine",
-                createFromVersion("1.3.2"),
-                null,
-                "jar",
-                null,
-                mock(ArtifactHandler.class));
+                "org.junit.platform", "junit-platform-engine", 
createFromVersion("1.3.2"), null, "jar", "", null);
         Artifact commons = new DefaultArtifact(
-                "org.junit.platform",
-                "junit-platform-commons",
-                createFromVersion("1.3.2"),
-                null,
-                "jar",
-                null,
-                mock(ArtifactHandler.class));
-        Artifact opentest4j = new DefaultArtifact(
-                "org.opentest4j",
-                "opentest4j",
-                createFromVersion("1.1.1"),
-                null,
-                "jar",
-                null,
-                mock(ArtifactHandler.class));
+                "org.junit.platform", "junit-platform-commons", 
createFromVersion("1.3.2"), null, "jar", "", null);
+        Artifact opentest4j =
+                new DefaultArtifact("org.opentest4j", "opentest4j", 
createFromVersion("1.1.1"), null, "jar", "", null);
 
         Set<Artifact> providerArtifacts = new HashSet<>();
         providerArtifacts.add(provider);
@@ -2536,8 +1874,7 @@ public class AbstractSurefireMojoTest {
         providerArtifacts.add(commons);
         providerArtifacts.add(opentest4j);
 
-        
when(surefirePlatformResolutionResult.getArtifacts()).thenReturn(providerArtifacts);
-        return surefirePlatformResolutionResult;
+        return providerArtifacts;
     }
 
     @Test
@@ -2576,17 +1913,29 @@ public class AbstractSurefireMojoTest {
      */
     public static class Mojo extends AbstractSurefireMojo implements 
SurefireReportParameters {
         private File mainBuildPath;
+
         private File testClassesDirectory;
+
         private boolean useModulePath;
+
         private int failOnFlakeCount;
+
         private String[] includeJUnit5Engines;
+
         private String[] excludeJUnit5Engines;
+
         private List<Artifact> projectTestArtifacts;
+
         private File includesFile;
+
         private File excludesFile;
+
         private List<String> includes;
+
         private List<String> excludes;
+
         private String test;
+
         private boolean testFailureIgnore;
 
         private JUnitPlatformProviderInfo createJUnitPlatformProviderInfo(
diff --git 
a/maven-surefire-common/src/test/java/org/apache/maven/plugin/surefire/SurefireDependencyResolverTest.java
 
b/maven-surefire-common/src/test/java/org/apache/maven/plugin/surefire/SurefireDependencyResolverTest.java
index c8f3b1890..60b942811 100644
--- 
a/maven-surefire-common/src/test/java/org/apache/maven/plugin/surefire/SurefireDependencyResolverTest.java
+++ 
b/maven-surefire-common/src/test/java/org/apache/maven/plugin/surefire/SurefireDependencyResolverTest.java
@@ -19,40 +19,44 @@
 package org.apache.maven.plugin.surefire;
 
 import java.io.File;
+import java.util.Collections;
 import java.util.Iterator;
 import java.util.LinkedHashSet;
+import java.util.List;
 import java.util.Map;
 import java.util.Set;
+import java.util.stream.Collectors;
 
+import org.apache.maven.RepositoryUtils;
 import org.apache.maven.artifact.Artifact;
 import org.apache.maven.artifact.DefaultArtifact;
-import org.apache.maven.artifact.resolver.ArtifactResolutionException;
-import org.apache.maven.artifact.resolver.ArtifactResolutionRequest;
-import org.apache.maven.artifact.resolver.ArtifactResolutionResult;
-import org.apache.maven.artifact.resolver.DefaultResolutionErrorHandler;
+import org.apache.maven.artifact.handler.DefaultArtifactHandler;
 import 
org.apache.maven.artifact.versioning.InvalidVersionSpecificationException;
 import org.apache.maven.artifact.versioning.VersionRange;
 import org.apache.maven.model.Dependency;
 import org.apache.maven.model.Plugin;
 import org.apache.maven.plugin.MojoExecutionException;
-import 
org.apache.maven.plugin.surefire.SurefireDependencyResolver.RuntimeArtifactFilter;
-import org.apache.maven.plugin.surefire.log.api.ConsoleLogger;
-import org.apache.maven.repository.RepositorySystem;
+import org.eclipse.aether.RepositorySystem;
+import org.eclipse.aether.RepositorySystemSession;
+import org.eclipse.aether.artifact.ArtifactTypeRegistry;
+import org.eclipse.aether.resolution.ArtifactRequest;
+import org.eclipse.aether.resolution.ArtifactResult;
+import org.eclipse.aether.resolution.DependencyRequest;
+import org.eclipse.aether.resolution.DependencyResolutionException;
+import org.eclipse.aether.resolution.DependencyResult;
 import org.junit.Rule;
 import org.junit.Test;
 import org.junit.rules.ExpectedException;
 import org.mockito.ArgumentCaptor;
-import org.mockito.invocation.InvocationOnMock;
-import org.mockito.stubbing.Answer;
 
-import static java.util.Collections.singleton;
 import static java.util.Collections.singletonList;
 import static java.util.Collections.singletonMap;
 import static 
org.apache.maven.artifact.versioning.VersionRange.createFromVersionSpec;
 import static 
org.apache.maven.plugin.surefire.SurefireDependencyResolver.PROVIDER_GROUP_ID;
 import static org.assertj.core.api.Assertions.assertThat;
-import static org.assertj.core.api.Assertions.assertThatThrownBy;
-import static org.mockito.Mockito.any;
+import static org.assertj.core.api.AssertionsForClassTypes.assertThatThrownBy;
+import static org.mockito.ArgumentMatchers.any;
+import static org.mockito.ArgumentMatchers.eq;
 import static org.mockito.Mockito.mock;
 import static org.mockito.Mockito.verify;
 import static org.mockito.Mockito.verifyNoMoreInteractions;
@@ -101,39 +105,29 @@ public class SurefireDependencyResolverTest {
     }
 
     @Test
-    public void testResolveArtifact() throws 
InvalidVersionSpecificationException, MojoExecutionException {
-        final Artifact provider = createArtifact("surefire-junit-platform");
+    public void testResolveArtifact()
+            throws InvalidVersionSpecificationException, 
MojoExecutionException, DependencyResolutionException {
+
+        Artifact provider = createArtifact("surefire-junit-platform");
         RepositorySystem repositorySystem = mock(RepositorySystem.class);
-        final ArtifactResolutionResult expectedResult = 
mock(ArtifactResolutionResult.class);
-        when(repositorySystem.resolve(any(ArtifactResolutionRequest.class)))
-                .then(new Answer<ArtifactResolutionResult>() {
-                    @Override
-                    public ArtifactResolutionResult answer(InvocationOnMock 
invocation) {
-                        Object[] args = invocation.getArguments();
-                        assertThat(args).hasSize(1);
-                        ArtifactResolutionRequest request = 
(ArtifactResolutionRequest) args[0];
-                        assertThat(request.getArtifact()).isSameAs(provider);
-                        assertThat(request.isResolveTransitively()).isTrue();
-                        assertThat(request.getArtifactDependencies()).isNull();
-                        assertThat(request.getRemoteRepositories()).isNull();
-                        assertThat(request.getLocalRepository()).isNull();
-                        assertThat(request.getCollectionFilter()).isNotNull();
-                        
assertThat(request.getCollectionFilter()).isInstanceOf(RuntimeArtifactFilter.class);
-                        assertThat(request.getManagedVersionMap()).isNull();
-                        assertThat(request.getMirrors()).isEmpty();
-                        assertThat(request.getProxies()).isEmpty();
-                        assertThat(request.getResolutionFilter()).isNull();
-                        assertThat(request.getServers()).isEmpty();
-                        return expectedResult;
-                    }
-                });
-
-        SurefireDependencyResolver surefireDependencyResolver = new 
SurefireDependencyResolver(
-                repositorySystem, null, null, null, null, new 
DefaultResolutionErrorHandler(), null, false);
-
-        ArtifactResolutionResult actualResult = 
surefireDependencyResolver.resolvePluginArtifact(provider);
-
-        assertThat(actualResult).isSameAs(expectedResult);
+        RepositorySystemSession session = mock(RepositorySystemSession.class);
+        ArgumentCaptor<DependencyRequest> requestCaptor = 
ArgumentCaptor.forClass(DependencyRequest.class);
+
+        DependencyResult result = new DependencyResult(new 
DependencyRequest());
+        when(repositorySystem.resolveDependencies(eq(session), 
requestCaptor.capture()))
+                .thenReturn(result);
+
+        SurefireDependencyResolver surefireDependencyResolver = new 
SurefireDependencyResolver(repositorySystem);
+        surefireDependencyResolver.resolveArtifacts(session, 
Collections.emptyList(), provider);
+
+        DependencyRequest value = requestCaptor.getValue();
+        assertThat(value).isNotNull();
+        org.eclipse.aether.graph.Dependency requestDependency =
+                value.getCollectRequest().getRoot();
+        
assertThat(requestDependency.getArtifact().getGroupId()).isEqualTo(provider.getGroupId());
+        
assertThat(requestDependency.getArtifact().getArtifactId()).isEqualTo(provider.getArtifactId());
+        
assertThat(requestDependency.getArtifact().getVersion()).isEqualTo(provider.getVersion());
+        
assertThat(requestDependency.getArtifact().getExtension()).isEqualTo(provider.getType());
     }
 
     @Test
@@ -141,7 +135,7 @@ public class SurefireDependencyResolverTest {
 
         Artifact commonJunit4 = createArtifact("common-junit4");
         Artifact api = createArtifact("surefire-api");
-        final Artifact provider = createArtifact("surefire-junit-platform");
+        Artifact provider = createArtifact("surefire-junit-platform");
         Artifact ext = createArtifact("org.apiguardian", "apiguardian-api");
         Artifact logger = createArtifact("surefire-logger-api");
 
@@ -152,104 +146,53 @@ public class SurefireDependencyResolverTest {
         providerArtifacts.add(ext);
         providerArtifacts.add(logger);
 
-        final ArtifactResolutionResult result = 
mock(ArtifactResolutionResult.class);
-        when(result.getArtifacts()).thenReturn(providerArtifacts);
+        List<ArtifactResult> artifactResults = providerArtifacts.stream()
+                .map(RepositoryUtils::toArtifact)
+                .map(a -> new ArtifactResult(new 
ArtifactRequest()).setArtifact(a))
+                .collect(Collectors.toList());
+
+        DependencyResult result = new DependencyResult(new 
DependencyRequest());
+        result.setArtifactResults(artifactResults);
 
         RepositorySystem repositorySystem = mock(RepositorySystem.class);
-        when(repositorySystem.resolve(any(ArtifactResolutionRequest.class)))
-                .then(new Answer<ArtifactResolutionResult>() {
-                    @Override
-                    public ArtifactResolutionResult answer(InvocationOnMock 
invocation) {
-                        Object[] args = invocation.getArguments();
-                        assertThat(args).hasSize(1);
-                        ArtifactResolutionRequest request = 
(ArtifactResolutionRequest) args[0];
-                        assertThat(request.getArtifact()).isSameAs(provider);
-                        assertThat(request.isResolveTransitively()).isTrue();
-                        assertThat(request.getArtifactDependencies()).isNull();
-                        assertThat(request.getRemoteRepositories()).isNull();
-                        assertThat(request.getLocalRepository()).isNull();
-                        assertThat(request.getCollectionFilter()).isNotNull();
-                        
assertThat(request.getCollectionFilter()).isInstanceOf(RuntimeArtifactFilter.class);
-                        assertThat(request.getManagedVersionMap()).isNull();
-                        assertThat(request.getMirrors()).isEmpty();
-                        assertThat(request.getProxies()).isEmpty();
-                        assertThat(request.getResolutionFilter()).isNull();
-                        assertThat(request.getServers()).isEmpty();
-                        return result;
-                    }
-                });
-        
when(repositorySystem.createDependencyArtifact(any(Dependency.class))).then(new 
Answer<Artifact>() {
-            @Override
-            public Artifact answer(InvocationOnMock invocation) {
-                Object[] args = invocation.getArguments();
-                assertThat(args).hasSize(1);
-                Dependency request = (Dependency) args[0];
-                
assertThat(request.getGroupId()).isEqualTo(provider.getGroupId());
-                
assertThat(request.getArtifactId()).isEqualTo(provider.getArtifactId());
-                
assertThat(request.getVersion()).isEqualTo(provider.getVersion());
-                assertThat(request.getType()).isEqualTo(provider.getType());
-                assertThat(request.getScope()).isNull();
-                return provider;
-            }
-        });
-
-        ConsoleLogger log = mock(ConsoleLogger.class);
-
-        SurefireDependencyResolver surefireDependencyResolver = new 
SurefireDependencyResolver(
-                repositorySystem, log, null, null, null, new 
DefaultResolutionErrorHandler(), null, false);
-
-        when(log.isDebugEnabled()).thenReturn(true);
-
-        Set<Artifact> classpath = 
surefireDependencyResolver.getProviderClasspath("surefire-junit-platform", "1");
+        RepositorySystemSession session = mock(RepositorySystemSession.class);
+
+        
when(session.getArtifactTypeRegistry()).thenReturn(mock(ArtifactTypeRegistry.class));
+        when(repositorySystem.resolveDependencies(eq(session), 
any())).thenReturn(result);
+
+        SurefireDependencyResolver surefireDependencyResolver = new 
SurefireDependencyResolver(repositorySystem);
+        Set<Artifact> classpath = 
surefireDependencyResolver.getProviderClasspath(
+                session, Collections.emptyList(), "surefire-junit-platform", 
"1");
 
         assertThat(classpath).hasSize(5);
 
         Iterator<Artifact> it = classpath.iterator();
 
         // result should be ordered
-        assertThat(it.next()).isSameAs(provider);
-
-        assertThat(it.next()).isSameAs(api);
-
-        assertThat(it.next()).isSameAs(logger);
-
-        assertThat(it.next()).isSameAs(commonJunit4);
-
-        assertThat(it.next()).isSameAs(ext);
+        assertThat(it.next()).isEqualTo(provider);
+        assertThat(it.next()).isEqualTo(api);
+        assertThat(it.next()).isEqualTo(logger);
+        assertThat(it.next()).isEqualTo(commonJunit4);
+        assertThat(it.next()).isEqualTo(ext);
     }
 
     @Test
     public void 
testGetProviderClasspathShouldPropagateTheResolutionException() throws 
Exception {
-        Artifact provider = createArtifact("surefire-junit-platform");
-        provider.setFile(null);
 
-        Set<Artifact> providerArtifacts = new LinkedHashSet<>();
-        providerArtifacts.add(provider);
+        RepositorySystem repositorySystem = mock(RepositorySystem.class);
+        RepositorySystemSession session = mock(RepositorySystemSession.class);
+        
when(session.getArtifactTypeRegistry()).thenReturn(mock(ArtifactTypeRegistry.class));
 
-        ArtifactResolutionResult result = mock(ArtifactResolutionResult.class);
-        when(result.getArtifacts()).thenReturn(providerArtifacts);
-        when(result.hasMetadataResolutionExceptions()).thenReturn(true);
-        ArtifactResolutionException resolutionException =
-                new ArtifactResolutionException("failed to resolve", provider);
-        
when(result.getMetadataResolutionException(0)).thenReturn(resolutionException);
+        DependencyResolutionException dependencyResolutionException =
+                new DependencyResolutionException(new DependencyResult(new 
DependencyRequest()), new Exception());
+        when(repositorySystem.resolveDependencies(eq(session), 
any())).thenThrow(dependencyResolutionException);
 
-        RepositorySystem repositorySystem = mock(RepositorySystem.class);
-        
when(repositorySystem.resolve(any(ArtifactResolutionRequest.class))).thenReturn(result);
-        
when(repositorySystem.createDependencyArtifact(any(Dependency.class))).thenReturn(provider);
-
-        SurefireDependencyResolver surefireDependencyResolver = new 
SurefireDependencyResolver(
-                repositorySystem,
-                mock(ConsoleLogger.class),
-                null,
-                null,
-                null,
-                new DefaultResolutionErrorHandler(),
-                null,
-                false);
-
-        assertThatThrownBy(() -> 
surefireDependencyResolver.getProviderClasspath("surefire-junit-platform", "1"))
+        SurefireDependencyResolver surefireDependencyResolver = new 
SurefireDependencyResolver(repositorySystem);
+
+        assertThatThrownBy(() -> 
surefireDependencyResolver.getProviderClasspath(
+                        session, Collections.emptyList(), 
"surefire-junit-platform", "1"))
                 .isInstanceOf(MojoExecutionException.class)
-                .hasCause(resolutionException);
+                .hasCause(dependencyResolutionException);
     }
 
     @Test
@@ -265,34 +208,28 @@ public class SurefireDependencyResolverTest {
         
when(plugin.getDependencies()).thenReturn(singletonList(providerAsDependency));
 
         RepositorySystem repositorySystem = mock(RepositorySystem.class);
-        
when(repositorySystem.createDependencyArtifact(providerAsDependency)).thenReturn(providerAsArtifact);
+        RepositorySystemSession session = mock(RepositorySystemSession.class);
+        
when(session.getArtifactTypeRegistry()).thenReturn(mock(ArtifactTypeRegistry.class));
 
-        ArtifactResolutionResult resolutionResult = 
mock(ArtifactResolutionResult.class);
-        
when(resolutionResult.getArtifacts()).thenReturn(singleton(providerAsArtifact));
+        ArtifactResult artifactResult =
+                new ArtifactResult(new 
ArtifactRequest().setArtifact(RepositoryUtils.toArtifact(providerAsArtifact)));
+        
artifactResult.setArtifact(RepositoryUtils.toArtifact(providerAsArtifact));
+        DependencyResult result = new DependencyResult(new 
DependencyRequest());
+        result.setArtifactResults(Collections.singletonList(artifactResult));
 
-        ArgumentCaptor<ArtifactResolutionRequest> resolutionRequestCaptor =
-                ArgumentCaptor.forClass(ArtifactResolutionRequest.class);
-        
when(repositorySystem.resolve(resolutionRequestCaptor.capture())).thenReturn(resolutionResult);
+        when(repositorySystem.resolveDependencies(eq(session), 
any())).thenReturn(result);
 
         Map<String, Artifact> pluginResolvedDependencies =
                 singletonMap(PROVIDER_GROUP_ID + ":surefire-shadefire", 
providerAsArtifact);
 
-        SurefireDependencyResolver surefireDependencyResolver = new 
SurefireDependencyResolver(
-                repositorySystem, null, null, null, null, new 
DefaultResolutionErrorHandler(), null, false);
+        SurefireDependencyResolver surefireDependencyResolver = new 
SurefireDependencyResolver(repositorySystem);
 
-        Map<String, Artifact> providers =
-                surefireDependencyResolver.resolvePluginDependencies(plugin, 
pluginResolvedDependencies);
+        Map<String, Artifact> providers = 
surefireDependencyResolver.resolvePluginDependencies(
+                session, Collections.emptyList(), plugin, 
pluginResolvedDependencies);
 
         
assertThat(providers.values()).hasSize(1).containsOnly(providerAsArtifact);
 
-        assertThat(resolutionRequestCaptor.getAllValues()).hasSize(1);
-
-        ArtifactResolutionRequest resolutionRequest = 
resolutionRequestCaptor.getValue();
-
-        
assertThat(resolutionRequest.getArtifact()).isSameAs(providerAsArtifact);
-
-        
verify(repositorySystem).createDependencyArtifact(any(Dependency.class));
-        verify(repositorySystem).resolve(any(ArtifactResolutionRequest.class));
+        verify(repositorySystem).resolveDependencies(eq(session), any());
         verifyNoMoreInteractions(repositorySystem);
     }
 
@@ -308,8 +245,8 @@ public class SurefireDependencyResolverTest {
     private static Artifact createArtifact(String groupId, String artifactId, 
String version)
             throws InvalidVersionSpecificationException {
         VersionRange versionSpec = createFromVersionSpec(version);
-        DefaultArtifact defaultArtifact =
-                new DefaultArtifact(groupId, artifactId, versionSpec, 
"compile", "jar", "", null);
+        DefaultArtifact defaultArtifact = new DefaultArtifact(
+                groupId, artifactId, versionSpec, null, "jar", null, new 
DefaultArtifactHandler("jar"));
         defaultArtifact.setFile(new File(""));
         return defaultArtifact;
     }

Reply via email to