+package org.argeo.slc.maven;\r
+\r
+import java.io.File;\r
+import java.util.List;\r
+import java.util.Vector;\r
+\r
+import org.apache.commons.logging.Log;\r
+import org.apache.commons.logging.LogFactory;\r
+import org.apache.maven.artifact.Artifact;\r
+import org.apache.maven.artifact.repository.ArtifactRepository;\r
+import org.apache.maven.embedder.MavenEmbedder;\r
+import org.apache.maven.embedder.MavenEmbedderException;\r
+\r
+import org.argeo.slc.core.SlcException;\r
+\r
+public class MavenManager {\r
+ private final Log log = LogFactory.getLog(getClass());\r
+\r
+ private String repositoryId;\r
+ private String repositoryUrl;\r
+ private String localRepositoryPath;\r
+\r
+ private ArtifactRepository localRepository;\r
+ private List<ArtifactRepository> remoteRepositories;\r
+\r
+ private MavenEmbedder mavenEmbedder;\r
+\r
+ public void init() {\r
+ try {\r
+ mavenEmbedder = new MavenEmbedder();\r
+ mavenEmbedder.setOffline(true);\r
+ mavenEmbedder.setClassLoader(Thread.currentThread()\r
+ .getContextClassLoader());\r
+ mavenEmbedder.start();\r
+\r
+ mavenEmbedder.setLocalRepositoryDirectory(new File(\r
+ localRepositoryPath));\r
+\r
+ localRepository = mavenEmbedder.getLocalRepository();\r
+\r
+ // localRepository = mavenEmbedder.createLocalRepository(new File(\r
+ // localRepositoryPath));\r
+\r
+ ArtifactRepository repository = mavenEmbedder.createRepository(\r
+ repositoryUrl, repositoryId);\r
+\r
+ remoteRepositories = new Vector<ArtifactRepository>();\r
+ remoteRepositories.add(repository);\r
+ } catch (Exception e) {\r
+ throw new SlcException("Cannot initialize Maven manager", e);\r
+ }\r
+ }\r
+\r
+ private Artifact resolve(MavenFile mavenDistribution) {\r
+ try {\r
+ Artifact artifact;\r
+ if (mavenDistribution.getClassifier() == null) {\r
+ artifact = mavenEmbedder.createArtifact(mavenDistribution\r
+ .getGroupId(), mavenDistribution.getArtifactId(),\r
+ mavenDistribution.getVersion(),\r
+ Artifact.SCOPE_PROVIDED, mavenDistribution.getType());\r
+ } else {\r
+ artifact = mavenEmbedder.createArtifactWithClassifier(\r
+ mavenDistribution.getGroupId(), mavenDistribution\r
+ .getArtifactId(), mavenDistribution\r
+ .getVersion(), mavenDistribution.getType(),\r
+ mavenDistribution.getClassifier());\r
+ }\r
+\r
+ mavenEmbedder\r
+ .resolve(artifact, remoteRepositories, localRepository);\r
+\r
+ return artifact;\r
+ } catch (Exception e) {\r
+ throw new SlcException("Cannot resolve artifact.", e);\r
+ }\r
+ }\r
+\r
+ public File getPackageLocation(MavenFile mavenDistribution) {\r
+ return resolve(mavenDistribution).getFile();\r
+ }\r
+\r
+ public void destroy() {\r
+ try {\r
+ if (mavenEmbedder != null) {\r
+ mavenEmbedder.stop();\r
+ }\r
+ } catch (MavenEmbedderException e) {\r
+ log.error("Cannot destroy Maven manager", e);\r
+ }\r
+ }\r
+\r
+ public void setRepositoryId(String repositoryId) {\r
+ this.repositoryId = repositoryId;\r
+ }\r
+\r
+ public void setRepositoryUrl(String repositoryUrl) {\r
+ this.repositoryUrl = repositoryUrl;\r
+ }\r
+\r
+ public void setLocalRepositoryPath(String localRepositoryPath) {\r
+ this.localRepositoryPath = localRepositoryPath;\r
+ }\r
+\r
+}\r