]> git.argeo.org Git - gpl/argeo-slc.git/blob - org.argeo.slc.agent/src/main/java/org/argeo/slc/maven/MavenManager.java
Adapt web services to lazy loading
[gpl/argeo-slc.git] / org.argeo.slc.agent / 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.core.SlcException;
15
16 public class MavenManager {
17 private final Log log = LogFactory.getLog(getClass());
18
19 private String repositoryId;
20 private String repositoryUrl;
21 private String localRepositoryPath;
22
23 private ArtifactRepository localRepository;
24 private List<ArtifactRepository> remoteRepositories;
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 // localRepository = mavenEmbedder.createLocalRepository(new File(
42 // localRepositoryPath));
43
44 ArtifactRepository repository = mavenEmbedder.createRepository(
45 repositoryUrl, repositoryId);
46
47 remoteRepositories = new Vector<ArtifactRepository>();
48 remoteRepositories.add(repository);
49 } catch (Exception e) {
50 throw new SlcException("Cannot initialize Maven manager", e);
51 }
52 }
53
54 private Artifact resolve(MavenFile mavenDistribution) {
55 try {
56 Artifact artifact;
57 if (mavenDistribution.getClassifier() == null) {
58 artifact = mavenEmbedder.createArtifact(mavenDistribution
59 .getGroupId(), mavenDistribution.getArtifactId(),
60 mavenDistribution.getVersion(),
61 Artifact.SCOPE_PROVIDED, mavenDistribution.getType());
62 } else {
63 artifact = mavenEmbedder.createArtifactWithClassifier(
64 mavenDistribution.getGroupId(), mavenDistribution
65 .getArtifactId(), mavenDistribution
66 .getVersion(), mavenDistribution.getType(),
67 mavenDistribution.getClassifier());
68 }
69
70 mavenEmbedder
71 .resolve(artifact, remoteRepositories, localRepository);
72
73 return artifact;
74 } catch (Exception e) {
75 throw new SlcException("Cannot resolve artifact.", e);
76 }
77 }
78
79 public File getPackageLocation(MavenFile mavenDistribution) {
80 return resolve(mavenDistribution).getFile();
81 }
82
83 public void destroy() {
84 try {
85 if (mavenEmbedder != null) {
86 mavenEmbedder.stop();
87 }
88 } catch (MavenEmbedderException e) {
89 log.error("Cannot destroy Maven manager", e);
90 }
91 }
92
93 public void setRepositoryId(String repositoryId) {
94 this.repositoryId = repositoryId;
95 }
96
97 public void setRepositoryUrl(String repositoryUrl) {
98 this.repositoryUrl = repositoryUrl;
99 }
100
101 public void setLocalRepositoryPath(String localRepositoryPath) {
102 this.localRepositoryPath = localRepositoryPath;
103 }
104
105 }