use aether APIs rather than Maven implementation for dependency gathering
git-svn-id: https://svn.apache.org/repos/asf/commons/proper/weaver/trunk@1748321 13f79535-47bb-0310-9956-ffa450edef68
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;
}