diff --git a/maven-plugin/pom.xml b/maven-plugin/pom.xml
index a0411f2..78c6b8a 100644
--- a/maven-plugin/pom.xml
+++ b/maven-plugin/pom.xml
@@ -34,8 +34,9 @@
 
   <properties>
     <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
-    <maven.version>3.0.4</maven.version>
+    <maven.version>3.1.0</maven.version>
     <maven.plugin.version>3.1</maven.plugin.version>
+    <aether.version>1.1.0</aether.version>
   </properties>
 
   <scm>
@@ -72,6 +73,16 @@
       <artifactId>plexus-utils</artifactId>
       <version>2.0.6</version>
     </dependency>
+    <dependency>
+      <groupId>org.eclipse.aether</groupId>
+      <artifactId>aether-api</artifactId>
+      <version>${aether.version}</version>
+    </dependency>
+    <dependency>
+      <groupId>org.eclipse.aether</groupId>
+      <artifactId>aether-util</artifactId>
+      <version>${aether.version}</version>
+    </dependency>
   </dependencies>
   <build>
     <plugins>
diff --git a/maven-plugin/src/main/java/org/apache/commons/weaver/maven/AbstractCWMojo.java b/maven-plugin/src/main/java/org/apache/commons/weaver/maven/AbstractCWMojo.java
index b73c96a..c0880dc 100755
--- a/maven-plugin/src/main/java/org/apache/commons/weaver/maven/AbstractCWMojo.java
+++ b/maven-plugin/src/main/java/org/apache/commons/weaver/maven/AbstractCWMojo.java
@@ -19,22 +19,47 @@
 package org.apache.commons.weaver.maven;
 
 import java.io.File;
+import java.lang.annotation.ElementType;
+import java.lang.annotation.Retention;
+import java.lang.annotation.RetentionPolicy;
+import java.lang.annotation.Target;
+import java.util.ArrayList;
+import java.util.LinkedHashSet;
 import java.util.List;
 import java.util.Properties;
+import java.util.Set;
 
-import org.apache.maven.artifact.Artifact;
-import org.apache.maven.artifact.DependencyResolutionRequiredException;
-import org.apache.maven.artifact.resolver.filter.ArtifactFilter;
+import org.apache.commons.lang3.ArrayUtils;
+import org.apache.commons.lang3.StringUtils;
+import org.apache.maven.RepositoryUtils;
+import org.apache.maven.model.Dependency;
 import org.apache.maven.plugin.AbstractMojo;
 import org.apache.maven.plugin.MojoExecutionException;
 import org.apache.maven.plugin.MojoFailureException;
+import org.apache.maven.plugins.annotations.Component;
 import org.apache.maven.plugins.annotations.Parameter;
 import org.apache.maven.project.MavenProject;
+import org.eclipse.aether.RepositorySystem;
+import org.eclipse.aether.RepositorySystemSession;
+import org.eclipse.aether.collection.CollectRequest;
+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.ScopeDependencyFilter;
 
 /**
  * Defines common properties and high-level management common to all commons-weaver Maven goals.
  */
 abstract class AbstractCWMojo extends AbstractMojo {
+    /**
+     * Marks a mojo as requiring dependencies in {@link JavaScopes#TEST} scope.
+     */
+    @Target(ElementType.TYPE)
+    @Retention(RetentionPolicy.RUNTIME)
+    @interface TestScope {
+    }
 
     /**
      * {@code verbose} parameter.
@@ -51,21 +76,22 @@
     @Parameter(defaultValue = "${project}")
     protected MavenProject project;
 
-    /**
-     * Get the classpath for this prepare mojo.
-     * @return {@link List} of {@link String}
-     * @throws DependencyResolutionRequiredException
-     */
-    protected abstract List<String> getClasspath() throws DependencyResolutionRequiredException;
+    @Component
+    protected RepositorySystem repositorySystem;
+
+    @Parameter(defaultValue = "${repositorySystemSession}", readonly = true)
+    protected RepositorySystemSession repositorySystemSession;
 
     /**
      * Get the target directory for this prepare mojo.
+     * 
      * @return {@link File}
      */
     protected abstract File getTarget();
 
     /**
      * Execute this mojo.
+     * 
      * @throws MojoExecutionException in the event of failure
      */
     @Override
@@ -73,23 +99,16 @@
         final JavaLoggingToMojoLoggingRedirector logRedirector = new JavaLoggingToMojoLoggingRedirector(getLog());
         logRedirector.activate();
 
-        project.setArtifactFilter(new ArtifactFilter() {
-
-            @Override
-            public boolean include(Artifact artifact) {
-                return true;
-            }
-        });
         try {
             final List<String> classpath;
             try {
-                classpath = getClasspath();
-            } catch (DependencyResolutionRequiredException e) {
+                classpath = createClasspath();
+            } catch (DependencyResolutionException e) {
                 throw new MojoExecutionException("Error getting classpath artifacts", e);
             }
             final File target = getTarget();
             final Properties config = weaverConfig == null ? new Properties() : weaverConfig;
-            
+
             getLog().debug(String.format("classpath=%s%ntarget=%s%nconfig=%s", classpath, target, config));
 
             doExecute(target, classpath, config);
@@ -101,4 +120,33 @@
     protected abstract void doExecute(File target, List<String> classpath, Properties config)
         throws MojoExecutionException, MojoFailureException;
 
+    private List<String> createClasspath() throws DependencyResolutionException {
+        final CollectRequest collect = new CollectRequest();
+        collect.setRootArtifact(RepositoryUtils.toArtifact(project.getArtifact()));
+        collect.setRequestContext("project");
+        collect.setRepositories(project.getRemoteProjectRepositories());
+
+        for (Dependency dependency : project.getDependencies()) {
+            // guard against case where best-effort resolution for invalid models is requested:
+            if (StringUtils.isAnyBlank(dependency.getGroupId(), dependency.getArtifactId(), dependency.getVersion())) {
+                continue;
+            }
+            collect.addDependency(
+                RepositoryUtils.toDependency(dependency, repositorySystemSession.getArtifactTypeRegistry()));
+        }
+        final DependencyResult dependencyResult =
+            repositorySystem.resolveDependencies(repositorySystemSession, new DependencyRequest()
+                .setFilter(new ScopeDependencyFilter(getExcludeScopes())).setCollectRequest(collect));
+
+        final Set<String> result = new LinkedHashSet<String>();
+        for (ArtifactResult artifactResult : dependencyResult.getArtifactResults()) {
+            result.add(artifactResult.getArtifact().getFile().getAbsolutePath());
+        }
+        return new ArrayList<String>(result);
+    }
+
+    private String[] getExcludeScopes() {
+        return getClass().isAnnotationPresent(TestScope.class) ? ArrayUtils.EMPTY_STRING_ARRAY
+            : new String[] { JavaScopes.TEST };
+    }
 }
diff --git a/maven-plugin/src/main/java/org/apache/commons/weaver/maven/PrepareMojo.java b/maven-plugin/src/main/java/org/apache/commons/weaver/maven/PrepareMojo.java
index c78e67d..eda7622 100644
--- a/maven-plugin/src/main/java/org/apache/commons/weaver/maven/PrepareMojo.java
+++ b/maven-plugin/src/main/java/org/apache/commons/weaver/maven/PrepareMojo.java
@@ -19,12 +19,7 @@
 package org.apache.commons.weaver.maven;
 
 import java.io.File;
-import java.util.ArrayList;
-import java.util.LinkedHashSet;
-import java.util.List;
-import java.util.Set;
 
-import org.apache.maven.artifact.DependencyResolutionRequiredException;
 import org.apache.maven.model.Build;
 import org.apache.maven.plugins.annotations.LifecyclePhase;
 import org.apache.maven.plugins.annotations.Mojo;
@@ -51,17 +46,6 @@
      * {@inheritDoc}
      */
     @Override
-    protected List<String> getClasspath() throws DependencyResolutionRequiredException {
-        final Set<String> result = new LinkedHashSet<String>();
-        result.addAll(project.getCompileClasspathElements());
-        result.addAll(project.getRuntimeClasspathElements());
-        return new ArrayList<String>(result);
-    }
-
-    /**
-     * {@inheritDoc}
-     */
-    @Override
     protected File getTarget() {
         return target;
     }
diff --git a/maven-plugin/src/main/java/org/apache/commons/weaver/maven/TestPrepareMojo.java b/maven-plugin/src/main/java/org/apache/commons/weaver/maven/TestPrepareMojo.java
index 79f85a2..849d5e9 100644
--- a/maven-plugin/src/main/java/org/apache/commons/weaver/maven/TestPrepareMojo.java
+++ b/maven-plugin/src/main/java/org/apache/commons/weaver/maven/TestPrepareMojo.java
@@ -19,9 +19,8 @@
 package org.apache.commons.weaver.maven;
 
 import java.io.File;
-import java.util.List;
 
-import org.apache.maven.artifact.DependencyResolutionRequiredException;
+import org.apache.commons.weaver.maven.AbstractCWMojo.TestScope;
 import org.apache.maven.model.Build;
 import org.apache.maven.plugins.annotations.LifecyclePhase;
 import org.apache.maven.plugins.annotations.Mojo;
@@ -37,6 +36,7 @@
     requiresDependencyCollection = ResolutionScope.TEST,
     requiresDependencyResolution = ResolutionScope.TEST
 )
+@TestScope
 public class TestPrepareMojo extends AbstractPrepareMojo {
     /**
      * {@link Build#getTestOutputDirectory()}.
@@ -48,14 +48,6 @@
      * {@inheritDoc}
      */
     @Override
-    protected List<String> getClasspath() throws DependencyResolutionRequiredException {
-        return project.getTestClasspathElements();
-    }
-
-    /**
-     * {@inheritDoc}
-     */
-    @Override
     protected File getTarget() {
         return target;
     }
diff --git a/maven-plugin/src/main/java/org/apache/commons/weaver/maven/TestWeaveMojo.java b/maven-plugin/src/main/java/org/apache/commons/weaver/maven/TestWeaveMojo.java
index 5500ccb..db714f6 100644
--- a/maven-plugin/src/main/java/org/apache/commons/weaver/maven/TestWeaveMojo.java
+++ b/maven-plugin/src/main/java/org/apache/commons/weaver/maven/TestWeaveMojo.java
@@ -21,7 +21,7 @@
 import java.io.File;
 import java.util.List;
 
-import org.apache.maven.artifact.DependencyResolutionRequiredException;
+import org.apache.commons.weaver.maven.AbstractCWMojo.TestScope;
 import org.apache.maven.model.Build;
 import org.apache.maven.plugins.annotations.LifecyclePhase;
 import org.apache.maven.plugins.annotations.Mojo;
@@ -38,6 +38,7 @@
     requiresDependencyCollection = ResolutionScope.TEST,
     requiresDependencyResolution = ResolutionScope.TEST
 )
+@TestScope
 public class TestWeaveMojo extends AbstractWeaveMojo {
 
     /**
@@ -56,14 +57,6 @@
      * {@inheritDoc}
      */
     @Override
-    protected List<String> getClasspath() throws DependencyResolutionRequiredException {
-        return project.getTestClasspathElements();
-    }
-
-    /**
-     * {@inheritDoc}
-     */
-    @Override
     protected File getTarget() {
         return target;
     }
diff --git a/maven-plugin/src/main/java/org/apache/commons/weaver/maven/WeaveMojo.java b/maven-plugin/src/main/java/org/apache/commons/weaver/maven/WeaveMojo.java
index e85128d..a5d37af 100644
--- a/maven-plugin/src/main/java/org/apache/commons/weaver/maven/WeaveMojo.java
+++ b/maven-plugin/src/main/java/org/apache/commons/weaver/maven/WeaveMojo.java
@@ -19,12 +19,7 @@
 package org.apache.commons.weaver.maven;
 
 import java.io.File;
-import java.util.ArrayList;
-import java.util.LinkedHashSet;
-import java.util.List;
-import java.util.Set;
 
-import org.apache.maven.artifact.DependencyResolutionRequiredException;
 import org.apache.maven.model.Build;
 import org.apache.maven.plugins.annotations.LifecyclePhase;
 import org.apache.maven.plugins.annotations.Mojo;
@@ -52,17 +47,6 @@
      * {@inheritDoc}
      */
     @Override
-    protected List<String> getClasspath() throws DependencyResolutionRequiredException {
-        final Set<String> result = new LinkedHashSet<String>();
-        result.addAll(project.getCompileClasspathElements());
-        result.addAll(project.getRuntimeClasspathElements());
-        return new ArrayList<String>(result);
-    }
-
-    /**
-     * {@inheritDoc}
-     */
-    @Override
     protected File getTarget() {
         return target;
     }
