+/*\r
+ * Copyright (C) 2010 Mathieu Baudier <mbaudier@argeo.org>\r
+ *\r
+ * Licensed under the Apache License, Version 2.0 (the "License");\r
+ * you may not use this file except in compliance with the License.\r
+ * You may obtain a copy of the License at\r
+ *\r
+ * http://www.apache.org/licenses/LICENSE-2.0\r
+ *\r
+ * Unless required by applicable law or agreed to in writing, software\r
+ * distributed under the License is distributed on an "AS IS" BASIS,\r
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r
+ * See the License for the specific language governing permissions and\r
+ * limitations under the License.\r
+ */\r
+\r
package org.argeo.slc.maven;\r
\r
-import java.io.File;\r
-import java.util.List;\r
-import java.util.Vector;\r
+import org.apache.maven.cli.MavenCli;\r
+import org.codehaus.plexus.PlexusContainer;\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.SlcException;\r
\r
public class MavenManager {\r
- /*\r
+ \r
+ public static void main(String[] args){\r
+ //CustomCli mavenCli = new CustomCli();\r
+ MavenCli mavenCli = new MavenCli();\r
+ String[] goals = { "-e","dependency:tree" };\r
+ mavenCli.doMain(goals, "/home/mbaudier/dev/src/slc/dist/org.argeo.slc.sdk", System.out, System.err);\r
+ }\r
+ \r
+ static class CustomCli extends MavenCli{\r
+ private PlexusContainer container;\r
+\r
+ @Override\r
+ protected void customizeContainer(PlexusContainer container) {\r
+ this.container = container;\r
+ }\r
+\r
+ public PlexusContainer getContainer() {\r
+ return container;\r
+ }\r
+ \r
+ \r
+ \r
+ }\r
+/*\r
private final Log log = LogFactory.getLog(getClass());\r
\r
private String localRepositoryPath = System.getProperty("user.home")\r
private List<RemoteRepository> remoteRepositories = new Vector<RemoteRepository>();\r
\r
private MavenEmbedder mavenEmbedder;\r
+ private ClassLoader classLoader;\r
+ private Boolean offline = false;\r
\r
public void init() {\r
try {\r
- mavenEmbedder = new MavenEmbedder();\r
- mavenEmbedder.setOffline(true);\r
- mavenEmbedder.setClassLoader(Thread.currentThread()\r
- .getContextClassLoader());\r
+ mavenEmbedder = new SlcMavenEmbedder();\r
+ mavenEmbedder.setOffline(offline);\r
+ // mavenEmbedder.setAlignWithUserInstallation(true);\r
+ if (classLoader != null)\r
+ mavenEmbedder.setClassLoader(classLoader);\r
+ else\r
+ mavenEmbedder.setClassLoader(getClass().getClassLoader());\r
+ // else\r
+ // mavenEmbedder.setClassLoader(Thread.currentThread()\r
+ // .getContextClassLoader());\r
mavenEmbedder.start();\r
\r
mavenEmbedder.setLocalRepositoryDirectory(new File(\r
remoteRepository.getUrl(), remoteRepository.getId());\r
remoteRepositoriesInternal.add(repository);\r
}\r
- \r
+\r
MavenFile mavenFile = new MavenFile();\r
- mavenFile.setGroupId("org.argeo.slc.runtime");\r
- mavenFile.setArtifactId("org.argeo.slc.specs");\r
- mavenFile.setVersion("0.11.3-SNAPSHOT");\r
+ mavenFile.setGroupId("org.argeo.slc.dist");\r
+ mavenFile.setArtifactId("org.argeo.slc.sdk");\r
+ mavenFile.setVersion("0.12.2-SNAPSHOT");\r
+ mavenFile.setType("pom");\r
Artifact artifact = resolve(mavenFile);\r
- log.debug("Dependencies of "+artifact);\r
- for(Object obj : artifact.getDependencyTrail()){\r
- log.debug(" "+obj);\r
+ log.debug("Location of " + artifact + " : " + artifact.getFile());\r
+ // log.debug("Dependencies of " + artifact);\r
+ // for (Object obj : artifact.getDependencyTrail()) {\r
+ // log.debug(" " + obj);\r
+ // }\r
+\r
+ File pomFile = new File(\r
+ "/home/mbaudier/dev/src/slc/dist/org.argeo.slc.sdk/pom.xml");\r
+ MavenProject project = mavenEmbedder\r
+ .readProjectWithDependencies(pomFile);\r
+ // MavenProject project = mavenEmbedder\r
+ // .readProjectWithDependencies(artifact.getFile());\r
+\r
+ // EventMonitor eventMonitor = new EventMonitor() {\r
+ //\r
+ // public void startEvent(String eventName, String target,\r
+ // long timestamp) {\r
+ // log.debug(eventName + ", " + target + ", " + timestamp);\r
+ // }\r
+ //\r
+ // public void errorEvent(String eventName, String target,\r
+ // long timestamp, Throwable cause) {\r
+ // log.debug(eventName + ", " + target + ", " + timestamp);\r
+ // }\r
+ //\r
+ // public void endEvent(String eventName, String target,\r
+ // long timestamp) {\r
+ // log.debug(eventName + ", " + target + ", " + timestamp);\r
+ // }\r
+ // };\r
+ //\r
+ // String[] goals = { "clean", "install" };\r
+ // mavenEmbedder.execute(project, Arrays.asList(goals),\r
+ // eventMonitor,\r
+ // null, null, pomFile.getParentFile());\r
+\r
+ Set<Artifact> transitDeps = getTransitiveProjectDependencies(\r
+ project, remoteRepositoriesInternal, localRepository);\r
+ log.debug(transitDeps.size() + " dependencies for " + artifact);\r
+ for (Object obj : transitDeps) {\r
+ log.debug(" " + obj);\r
}\r
\r
} catch (Exception e) {\r
}\r
}\r
\r
+ @SuppressWarnings("unchecked")\r
+ public Set<Artifact> getTransitiveProjectDependencies(MavenProject project,\r
+ List<ArtifactRepository> remoteRepos, ArtifactRepository local) {\r
+ Embedder embedder = mavenEmbedder.getEmbedder();\r
+ try {\r
+ ArtifactFactory artifactFactory = (ArtifactFactory) embedder\r
+ .lookup(ArtifactFactory.ROLE);\r
+\r
+ ArtifactResolver artifactResolver = (ArtifactResolver) embedder\r
+ .lookup(ArtifactResolver.ROLE);\r
+\r
+ ArtifactMetadataSource artifactMetadataSource = (ArtifactMetadataSource) embedder\r
+ .lookup(ArtifactMetadataSource.ROLE);\r
+\r
+ Set<Artifact> artifacts = project.createArtifacts(artifactFactory,\r
+ null, null);\r
+\r
+ ArtifactResolutionResult arr = artifactResolver\r
+ .resolveTransitively(artifacts, project.getArtifact(),\r
+ local, remoteRepos, artifactMetadataSource, null);\r
+\r
+ return arr.getArtifacts();\r
+ } catch (Exception e) {\r
+ throw new SlcException("Cannot resolve dependency for " + project,\r
+ e);\r
+ }\r
+ // Order, just for display\r
+ // Set dependencies = new TreeSet(new ArtifactComparator());\r
+ // dependencies.addAll(arr.getArtifacts());\r
+ // return dependencies;\r
+ }\r
+\r
private Artifact resolve(MavenFile mavenDistribution) {\r
try {\r
Artifact artifact;\r
public void setRemoteRepositories(List<RemoteRepository> remoteRepositories) {\r
this.remoteRepositories = remoteRepositories;\r
}\r
+\r
+ public void setClassLoader(ClassLoader classLoader) {\r
+ this.classLoader = classLoader;\r
+ }\r
+\r
+ public void setOffline(Boolean offline) {\r
+ this.offline = offline;\r
+ }\r
*/\r
}\r