CXFXJC-30 Unable to resolve transitive extension dependency
diff --git a/cxf-xjc-plugin/src/main/java/org/apache/cxf/maven_plugin/AbstractXSDToJavaMojo.java b/cxf-xjc-plugin/src/main/java/org/apache/cxf/maven_plugin/AbstractXSDToJavaMojo.java
index fbe12e3..e05290d 100644
--- a/cxf-xjc-plugin/src/main/java/org/apache/cxf/maven_plugin/AbstractXSDToJavaMojo.java
+++ b/cxf-xjc-plugin/src/main/java/org/apache/cxf/maven_plugin/AbstractXSDToJavaMojo.java
@@ -29,20 +29,17 @@
import java.net.URLClassLoader;
import java.util.ArrayList;
import java.util.Arrays;
+import java.util.HashSet;
import java.util.List;
+import java.util.Set;
import org.apache.maven.artifact.Artifact;
import org.apache.maven.artifact.DependencyResolutionRequiredException;
-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.execution.MavenSession;
import org.apache.maven.plugin.AbstractMojo;
import org.apache.maven.plugin.MojoExecutionException;
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.codehaus.plexus.archiver.jar.JarArchiver;
import org.codehaus.plexus.archiver.jar.Manifest;
import org.codehaus.plexus.archiver.jar.Manifest.Attribute;
@@ -50,6 +47,15 @@
import org.codehaus.plexus.util.cli.CommandLineUtils;
import org.codehaus.plexus.util.cli.Commandline;
import org.codehaus.plexus.util.cli.StreamConsumer;
+import org.eclipse.aether.RepositoryException;
+import org.eclipse.aether.RepositorySystem;
+import org.eclipse.aether.RepositorySystemSession;
+import org.eclipse.aether.artifact.DefaultArtifact;
+import org.eclipse.aether.collection.CollectRequest;
+import org.eclipse.aether.graph.Dependency;
+import org.eclipse.aether.repository.RemoteRepository;
+import org.eclipse.aether.resolution.ArtifactResult;
+import org.eclipse.aether.resolution.DependencyRequest;
import org.sonatype.plexus.build.incremental.BuildContext;
/**
@@ -78,13 +84,22 @@
@Component
private BuildContext buildContext;
-
+
@Component
private RepositorySystem repository;
-
- @Component
- private MavenSession session;
-
+
+ /**
+ * The current repository/network configuration of Maven.
+ */
+ @Parameter(defaultValue = "${repositorySystemSession}", readonly = true)
+ private RepositorySystemSession repoSession;
+
+ /**
+ * The project's remote repositories to use for the resolution of plugins and their dependencies.
+ */
+ @Parameter(defaultValue = "${project.remotePluginRepositories}", readonly = true)
+ private List<RemoteRepository> remoteRepos;
+
/**
* Allows running in a separate process.
*/
@@ -115,7 +130,7 @@
*/
@Parameter(property = "plugin.artifacts", readonly = true, required = true)
private List<Artifact> pluginArtifacts;
-
+
abstract String getOutputDir();
@@ -311,42 +326,24 @@
}
return xsdFiles;
}
-
- private List<File> resolve(String artifactDescriptor) throws MojoExecutionException {
- String[] s = artifactDescriptor.split(":");
- String type = s.length >= 4 ? s[3] : "jar";
- Artifact artifact = repository.createArtifact(s[0], s[1], s[2], type);
-
- ArtifactResolutionRequest request = new ArtifactResolutionRequest();
- request.setArtifact(artifact);
-
- request.setResolveRoot(true).setResolveTransitively(true);
- request.setServers(session.getRequest().getServers());
- request.setMirrors(session.getRequest().getMirrors());
- request.setProxies(session.getRequest().getProxies());
- request.setLocalRepository(session.getLocalRepository());
- List<ArtifactRepository> r = new ArrayList<ArtifactRepository>();
- r.addAll(project.getPluginArtifactRepositories());
- r.addAll(project.getRemoteArtifactRepositories());
- r.addAll(session.getRequest().getRemoteRepositories());
- r.addAll(session.getRequest().getPluginArtifactRepositories());
- request.setRemoteRepositories(r);
- ArtifactResolutionResult result = repository.resolve(request);
- List<File> files = new ArrayList<File>();
- for (Artifact a : result.getArtifacts()) {
- if (a.getFile() == null) {
- throw new MojoExecutionException("Unable to resolve " + a.toString()
+ private Set<File> resolve(String artifactDescriptor) throws MojoExecutionException, RepositoryException {
+ final Set<File> files = new HashSet<File>();
+ for (ArtifactResult artifactResult : repository
+ .resolveDependencies(repoSession,
+ new DependencyRequest(new CollectRequest(
+ new Dependency(new DefaultArtifact(artifactDescriptor), null), remoteRepos), null))
+ .getArtifactResults()) {
+ final org.eclipse.aether.artifact.Artifact artifact = artifactResult.getArtifact();
+ if (null == artifact || null == artifact.getFile()) {
+ throw new MojoExecutionException("Unable to resolve " + artifact.toString()
+ " while resolving " + artifactDescriptor);
}
- files.add(a.getFile());
- }
- if (!files.contains(artifact.getFile())) {
files.add(artifact.getFile());
}
return files;
}
-
+
protected List<String> getClasspathElements() throws DependencyResolutionRequiredException {
return project.getCompileClasspathElements();
}