]> git.argeo.org Git - gpl/argeo-slc.git/blob - runtime/org.argeo.slc.support.maven/src/main/java/org/argeo/slc/maven/MavenManager.java
b49a911bd5649891771b1ca6dd12b9c49da72d32
[gpl/argeo-slc.git] / runtime / org.argeo.slc.support.maven / src / main / java / org / argeo / slc / maven / MavenManager.java
1 package org.argeo.slc.maven;
2
3 import java.io.File;
4 import java.util.List;
5 import java.util.Vector;
6
7 import org.apache.commons.logging.Log;
8 import org.apache.commons.logging.LogFactory;
9 import org.apache.maven.artifact.Artifact;
10 import org.apache.maven.artifact.repository.ArtifactRepository;
11 import org.apache.maven.embedder.MavenEmbedder;
12 import org.apache.maven.embedder.MavenEmbedderException;
13 import org.argeo.slc.SlcException;
14
15 public class MavenManager {
16
17 private final Log log = LogFactory.getLog(getClass());
18
19 private String localRepositoryPath = System.getProperty("user.home")
20 + File.separator + ".m2" + File.separator + "repository";
21
22 private ArtifactRepository localRepository;
23 private List<ArtifactRepository> remoteRepositoriesInternal;
24 private List<RemoteRepository> remoteRepositories = new Vector<RemoteRepository>();
25
26 private MavenEmbedder mavenEmbedder;
27 private ClassLoader classLoader;
28 private Boolean offline = false;
29
30 public void init() {
31 try {
32 mavenEmbedder = new MavenEmbedder();
33 mavenEmbedder.setOffline(offline);
34 if (classLoader != null)
35 mavenEmbedder.setClassLoader(classLoader);
36 else
37 mavenEmbedder.setClassLoader(getClass().getClassLoader());
38 // else
39 // mavenEmbedder.setClassLoader(Thread.currentThread()
40 // .getContextClassLoader());
41 mavenEmbedder.start();
42
43 mavenEmbedder.setLocalRepositoryDirectory(new File(
44 localRepositoryPath));
45
46 localRepository = mavenEmbedder.getLocalRepository();
47
48 remoteRepositoriesInternal = new Vector<ArtifactRepository>();
49 for (RemoteRepository remoteRepository : remoteRepositories) {
50
51 ArtifactRepository repository = mavenEmbedder.createRepository(
52 remoteRepository.getUrl(), remoteRepository.getId());
53 remoteRepositoriesInternal.add(repository);
54 }
55
56 MavenFile mavenFile = new MavenFile();
57 mavenFile.setGroupId("org.argeo.slc.dist");
58 mavenFile.setArtifactId("org.argeo.slc.sdk");
59 mavenFile.setVersion("0.12.2-SNAPSHOT");
60 mavenFile.setType("pom");
61 Artifact artifact = resolve(mavenFile);
62 log.debug("Location of " + artifact + " : " + artifact.getFile());
63 // log.debug("Dependencies of " + artifact);
64 // for (Object obj : artifact.getDependencyTrail()) {
65 // log.debug(" " + obj);
66 // }
67
68 } catch (Exception e) {
69 throw new SlcException("Cannot initialize Maven manager", e);
70 }
71 }
72
73 private Artifact resolve(MavenFile mavenDistribution) {
74 try {
75 Artifact artifact;
76 if (mavenDistribution.getClassifier() == null) {
77 artifact = mavenEmbedder.createArtifact(mavenDistribution
78 .getGroupId(), mavenDistribution.getArtifactId(),
79 mavenDistribution.getVersion(),
80 Artifact.SCOPE_PROVIDED, mavenDistribution.getType());
81 } else {
82 artifact = mavenEmbedder.createArtifactWithClassifier(
83 mavenDistribution.getGroupId(), mavenDistribution
84 .getArtifactId(), mavenDistribution
85 .getVersion(), mavenDistribution.getType(),
86 mavenDistribution.getClassifier());
87 }
88
89 mavenEmbedder.resolve(artifact, remoteRepositoriesInternal,
90 localRepository);
91
92 return artifact;
93 } catch (Exception e) {
94 throw new SlcException("Cannot resolve artifact.", e);
95 }
96 }
97
98 public File getPackageLocation(MavenFile mavenDistribution) {
99 return resolve(mavenDistribution).getFile();
100 }
101
102 public void destroy() {
103 try {
104 if (mavenEmbedder != null) {
105 mavenEmbedder.stop();
106 }
107 } catch (MavenEmbedderException e) {
108 log.error("Cannot destroy Maven manager", e);
109 }
110 }
111
112 public void setLocalRepositoryPath(String localRepositoryPath) {
113 this.localRepositoryPath = localRepositoryPath;
114 }
115
116 public List<RemoteRepository> getRemoteRepositories() {
117 return remoteRepositories;
118 }
119
120 public void setRemoteRepositories(List<RemoteRepository> remoteRepositories) {
121 this.remoteRepositories = remoteRepositories;
122 }
123
124 public void setClassLoader(ClassLoader classLoader) {
125 this.classLoader = classLoader;
126 }
127
128 public void setOffline(Boolean offline) {
129 this.offline = offline;
130 }
131
132 }