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
;
14 import org
.argeo
.slc
.SlcException
;
16 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
;
30 mavenEmbedder
= new MavenEmbedder();
31 mavenEmbedder
.setOffline(true);
32 mavenEmbedder
.setClassLoader(Thread
.currentThread()
33 .getContextClassLoader());
34 mavenEmbedder
.start();
36 mavenEmbedder
.setLocalRepositoryDirectory(new File(
37 localRepositoryPath
));
39 localRepository
= mavenEmbedder
.getLocalRepository();
41 remoteRepositoriesInternal
= new Vector
<ArtifactRepository
>();
42 for (RemoteRepository remoteRepository
: remoteRepositories
) {
44 ArtifactRepository repository
= mavenEmbedder
.createRepository(
45 remoteRepository
.getUrl(), remoteRepository
.getId());
46 remoteRepositoriesInternal
.add(repository
);
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()){
59 } catch (Exception e
) {
60 throw new SlcException("Cannot initialize Maven manager", e
);
64 private Artifact
resolve(MavenFile mavenDistribution
) {
67 if (mavenDistribution
.getClassifier() == null) {
68 artifact
= mavenEmbedder
.createArtifact(mavenDistribution
69 .getGroupId(), mavenDistribution
.getArtifactId(),
70 mavenDistribution
.getVersion(),
71 Artifact
.SCOPE_PROVIDED
, mavenDistribution
.getType());
73 artifact
= mavenEmbedder
.createArtifactWithClassifier(
74 mavenDistribution
.getGroupId(), mavenDistribution
75 .getArtifactId(), mavenDistribution
76 .getVersion(), mavenDistribution
.getType(),
77 mavenDistribution
.getClassifier());
80 mavenEmbedder
.resolve(artifact
, remoteRepositoriesInternal
,
84 } catch (Exception e
) {
85 throw new SlcException("Cannot resolve artifact.", e
);
89 public File
getPackageLocation(MavenFile mavenDistribution
) {
90 return resolve(mavenDistribution
).getFile();
93 public void destroy() {
95 if (mavenEmbedder
!= null) {
98 } catch (MavenEmbedderException e
) {
99 log
.error("Cannot destroy Maven manager", e
);
103 public void setLocalRepositoryPath(String localRepositoryPath
) {
104 this.localRepositoryPath
= localRepositoryPath
;
107 public List
<RemoteRepository
> getRemoteRepositories() {
108 return remoteRepositories
;
111 public void setRemoteRepositories(List
<RemoteRepository
> remoteRepositories
) {
112 this.remoteRepositories
= remoteRepositories
;