]> git.argeo.org Git - gpl/argeo-slc.git/blob - runtime/org.argeo.slc.support.maven/src/main/java/org/argeo/slc/maven/MavenManager.java
Simplify equinox launching
[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
14 import org.argeo.slc.SlcException;
15
16 public class MavenManager {
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
28 public void init() {
29 try {
30 mavenEmbedder = new MavenEmbedder();
31 mavenEmbedder.setOffline(true);
32 mavenEmbedder.setClassLoader(Thread.currentThread()
33 .getContextClassLoader());
34 mavenEmbedder.start();
35
36 mavenEmbedder.setLocalRepositoryDirectory(new File(
37 localRepositoryPath));
38
39 localRepository = mavenEmbedder.getLocalRepository();
40
41 remoteRepositoriesInternal = new Vector<ArtifactRepository>();
42 for (RemoteRepository remoteRepository : remoteRepositories) {
43
44 ArtifactRepository repository = mavenEmbedder.createRepository(
45 remoteRepository.getUrl(), remoteRepository.getId());
46 remoteRepositoriesInternal.add(repository);
47 }
48
49 MavenFile mavenFile = new MavenFile();
50 mavenFile.setGroupId("org.argeo.slc.runtime");
51 mavenFile.setArtifactId("org.argeo.slc.specs");
52 mavenFile.setVersion("0.11.3-SNAPSHOT");
53 Artifact artifact = resolve(mavenFile);
54 log.debug("Dependencies of "+artifact);
55 for(Object obj : artifact.getDependencyTrail()){
56 log.debug(" "+obj);
57 }
58
59 } catch (Exception e) {
60 throw new SlcException("Cannot initialize Maven manager", e);
61 }
62 }
63
64 private Artifact resolve(MavenFile mavenDistribution) {
65 try {
66 Artifact artifact;
67 if (mavenDistribution.getClassifier() == null) {
68 artifact = mavenEmbedder.createArtifact(mavenDistribution
69 .getGroupId(), mavenDistribution.getArtifactId(),
70 mavenDistribution.getVersion(),
71 Artifact.SCOPE_PROVIDED, mavenDistribution.getType());
72 } else {
73 artifact = mavenEmbedder.createArtifactWithClassifier(
74 mavenDistribution.getGroupId(), mavenDistribution
75 .getArtifactId(), mavenDistribution
76 .getVersion(), mavenDistribution.getType(),
77 mavenDistribution.getClassifier());
78 }
79
80 mavenEmbedder.resolve(artifact, remoteRepositoriesInternal,
81 localRepository);
82
83 return artifact;
84 } catch (Exception e) {
85 throw new SlcException("Cannot resolve artifact.", e);
86 }
87 }
88
89 public File getPackageLocation(MavenFile mavenDistribution) {
90 return resolve(mavenDistribution).getFile();
91 }
92
93 public void destroy() {
94 try {
95 if (mavenEmbedder != null) {
96 mavenEmbedder.stop();
97 }
98 } catch (MavenEmbedderException e) {
99 log.error("Cannot destroy Maven manager", e);
100 }
101 }
102
103 public void setLocalRepositoryPath(String localRepositoryPath) {
104 this.localRepositoryPath = localRepositoryPath;
105 }
106
107 public List<RemoteRepository> getRemoteRepositories() {
108 return remoteRepositories;
109 }
110
111 public void setRemoteRepositories(List<RemoteRepository> remoteRepositories) {
112 this.remoteRepositories = remoteRepositories;
113 }
114
115 }