]> git.argeo.org Git - gpl/argeo-slc.git/blob - org.argeo.slc.maven.shared/src/main/java/org/argeo/slc/maven/plugin/DefaultMavenDependencyManager.java
Renamed into shared
[gpl/argeo-slc.git] / org.argeo.slc.maven.shared / src / main / java / org / argeo / slc / maven / plugin / DefaultMavenDependencyManager.java
1 package org.argeo.slc.maven.plugin;
2
3 import java.io.File;
4 import java.util.Comparator;
5 import java.util.List;
6 import java.util.Set;
7 import java.util.TreeSet;
8
9 import org.apache.maven.artifact.Artifact;
10 import org.apache.maven.artifact.metadata.ArtifactMetadataSource;
11 import org.apache.maven.artifact.repository.ArtifactRepository;
12 import org.apache.maven.artifact.resolver.ArtifactNotFoundException;
13 import org.apache.maven.artifact.resolver.ArtifactResolutionException;
14 import org.apache.maven.artifact.resolver.ArtifactResolutionResult;
15 import org.apache.maven.artifact.versioning.InvalidVersionSpecificationException;
16 import org.apache.maven.artifact.versioning.VersionRange;
17 import org.apache.maven.plugin.MojoExecutionException;
18 import org.apache.maven.project.MavenProject;
19 import org.apache.maven.project.artifact.InvalidDependencyVersionException;
20 import org.codehaus.plexus.archiver.ArchiverException;
21 import org.codehaus.plexus.archiver.UnArchiver;
22 import org.codehaus.plexus.archiver.manager.ArchiverManager;
23 import org.codehaus.plexus.archiver.manager.NoSuchArchiverException;
24
25 /**
26 * Abstract Maven plugin for interacting with dependencies
27 */
28 public class DefaultMavenDependencyManager implements MavenDependencyManager {
29 /**
30 * Used to look up Artifacts in the remote repository.
31 *
32 * @parameter expression=
33 * "${component.org.apache.maven.artifact.factory.ArtifactFactory}"
34 * @required
35 * @readonly
36 */
37 protected org.apache.maven.artifact.factory.ArtifactFactory factory;
38
39 /**
40 * Used to look up Artifacts in the remote repository.
41 *
42 * @parameter expression=
43 * "${component.org.apache.maven.artifact.resolver.ArtifactResolver}"
44 * @required
45 * @readonly
46 */
47 protected org.apache.maven.artifact.resolver.ArtifactResolver resolver;
48
49 /**
50 * To look up Archiver/UnArchiver implementations
51 *
52 * @parameter expression=
53 * "${component.org.codehaus.plexus.archiver.manager.ArchiverManager}"
54 * @required
55 * @readonly
56 */
57 protected ArchiverManager archiverManager;
58
59 /** @component */
60 protected ArtifactMetadataSource artifactMetadataSource;
61
62 public DefaultMavenDependencyManager() {
63 }
64
65 public Artifact getResolvedArtifact(List remoteRepos,
66 ArtifactRepository local, String groupId, String artifactId,
67 String version, String type, String classifier, String scope)
68 throws MojoExecutionException {
69 VersionRange vr;
70 try {
71 vr = VersionRange.createFromVersionSpec(version);
72 } catch (InvalidVersionSpecificationException e1) {
73 e1.printStackTrace();
74 vr = VersionRange.createFromVersion(version);
75 }
76
77 Artifact qxSdkArtifact = factory.createDependencyArtifact(groupId,
78 artifactId, vr, type, classifier, scope);
79 try {
80 resolver.resolve(qxSdkArtifact, remoteRepos, local);
81 } catch (ArtifactResolutionException e) {
82 throw new MojoExecutionException("Unable to resolve artifact.", e);
83 } catch (ArtifactNotFoundException e) {
84 throw new MojoExecutionException("Unable to find artifact.", e);
85 }
86
87 return qxSdkArtifact;
88 }
89
90 public void unpackArtifact(Artifact artifact, File location)
91 throws MojoExecutionException {
92 File file = artifact.getFile();
93 try {
94 UnArchiver unArchiver;
95 unArchiver = archiverManager.getUnArchiver(file);
96 unArchiver.setSourceFile(file);
97 unArchiver.setDestDirectory(location);
98 unArchiver.extract();
99 } catch (NoSuchArchiverException e) {
100 throw new MojoExecutionException("Unknown archiver type", e);
101 } catch (ArchiverException e) {
102 e.printStackTrace();
103 throw new MojoExecutionException("Error unpacking file: " + file
104 + " to: " + location + "\r\n" + e.toString(), e);
105 }
106 }
107
108 public Set getTransitiveProjectDependencies(MavenProject project,
109 List remoteRepos, ArtifactRepository local)
110 throws InvalidDependencyVersionException,
111 ArtifactNotFoundException, ArtifactResolutionException {
112 Set artifacts = project.createArtifacts(this.factory, null, null);
113
114 ArtifactResolutionResult arr = resolver.resolveTransitively(artifacts,
115 project.getArtifact(), local, remoteRepos,
116 this.artifactMetadataSource, null);
117
118 // Order, just for display
119 Set dependencies = new TreeSet(new ArtifactComparator());
120 dependencies.addAll(arr.getArtifacts());
121 return dependencies;
122 }
123
124 protected static class ArtifactComparator implements Comparator {
125 public int compare(Object o1, Object o2) {
126 Artifact a1 = (Artifact) o1;
127 Artifact a2 = (Artifact) o2;
128
129 if (!a1.getGroupId().equals(a2.getGroupId()))
130 return a1.getGroupId().compareTo(a2.getGroupId());
131 else
132 return a1.getArtifactId().compareTo(a2.getArtifactId());
133 }
134 }
135
136 }