1 package org
.argeo
.slc
.maven
;
5 import java
.util
.Vector
;
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
;
15 public class MavenManager
{
17 private final Log log
= LogFactory
.getLog(getClass());
19 private String localRepositoryPath
= System
.getProperty("user.home")
20 + File
.separator
+ ".m2" + File
.separator
+ "repository";
22 private ArtifactRepository localRepository
;
23 private List
<ArtifactRepository
> remoteRepositoriesInternal
;
24 private List
<RemoteRepository
> remoteRepositories
= new Vector
<RemoteRepository
>();
26 private MavenEmbedder mavenEmbedder
;
27 private ClassLoader classLoader
;
28 private Boolean offline
= false;
32 mavenEmbedder
= new MavenEmbedder();
33 mavenEmbedder
.setOffline(offline
);
34 if (classLoader
!= null)
35 mavenEmbedder
.setClassLoader(classLoader
);
37 mavenEmbedder
.setClassLoader(getClass().getClassLoader());
39 // mavenEmbedder.setClassLoader(Thread.currentThread()
40 // .getContextClassLoader());
41 mavenEmbedder
.start();
43 mavenEmbedder
.setLocalRepositoryDirectory(new File(
44 localRepositoryPath
));
46 localRepository
= mavenEmbedder
.getLocalRepository();
48 remoteRepositoriesInternal
= new Vector
<ArtifactRepository
>();
49 for (RemoteRepository remoteRepository
: remoteRepositories
) {
51 ArtifactRepository repository
= mavenEmbedder
.createRepository(
52 remoteRepository
.getUrl(), remoteRepository
.getId());
53 remoteRepositoriesInternal
.add(repository
);
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);
68 } catch (Exception e
) {
69 throw new SlcException("Cannot initialize Maven manager", e
);
73 private Artifact
resolve(MavenFile mavenDistribution
) {
76 if (mavenDistribution
.getClassifier() == null) {
77 artifact
= mavenEmbedder
.createArtifact(mavenDistribution
78 .getGroupId(), mavenDistribution
.getArtifactId(),
79 mavenDistribution
.getVersion(),
80 Artifact
.SCOPE_PROVIDED
, mavenDistribution
.getType());
82 artifact
= mavenEmbedder
.createArtifactWithClassifier(
83 mavenDistribution
.getGroupId(), mavenDistribution
84 .getArtifactId(), mavenDistribution
85 .getVersion(), mavenDistribution
.getType(),
86 mavenDistribution
.getClassifier());
89 mavenEmbedder
.resolve(artifact
, remoteRepositoriesInternal
,
93 } catch (Exception e
) {
94 throw new SlcException("Cannot resolve artifact.", e
);
98 public File
getPackageLocation(MavenFile mavenDistribution
) {
99 return resolve(mavenDistribution
).getFile();
102 public void destroy() {
104 if (mavenEmbedder
!= null) {
105 mavenEmbedder
.stop();
107 } catch (MavenEmbedderException e
) {
108 log
.error("Cannot destroy Maven manager", e
);
112 public void setLocalRepositoryPath(String localRepositoryPath
) {
113 this.localRepositoryPath
= localRepositoryPath
;
116 public List
<RemoteRepository
> getRemoteRepositories() {
117 return remoteRepositories
;
120 public void setRemoteRepositories(List
<RemoteRepository
> remoteRepositories
) {
121 this.remoteRepositories
= remoteRepositories
;
124 public void setClassLoader(ClassLoader classLoader
) {
125 this.classLoader
= classLoader
;
128 public void setOffline(Boolean offline
) {
129 this.offline
= offline
;