]> git.argeo.org Git - gpl/argeo-slc.git/blobdiff - runtime/org.argeo.slc.support.maven/src/main/java/org/argeo/slc/maven/MavenManager.java
Upgrade to Maven 2.0.9 (in order to support import id DependencyManagement)
[gpl/argeo-slc.git] / runtime / org.argeo.slc.support.maven / src / main / java / org / argeo / slc / maven / MavenManager.java
index b49a911bd5649891771b1ca6dd12b9c49da72d32..1a2ab09c912737979270849e527e8f8fa98215b1 100644 (file)
@@ -2,15 +2,21 @@ package org.argeo.slc.maven;
 \r
 import java.io.File;\r
 import java.util.List;\r
+import java.util.Set;\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.factory.ArtifactFactory;\r
+import org.apache.maven.artifact.metadata.ArtifactMetadataSource;\r
 import org.apache.maven.artifact.repository.ArtifactRepository;\r
-import org.apache.maven.embedder.MavenEmbedder;\r
-import org.apache.maven.embedder.MavenEmbedderException;\r
+import org.apache.maven.artifact.resolver.ArtifactResolutionResult;\r
+import org.apache.maven.artifact.resolver.ArtifactResolver;\r
+import org.apache.maven.project.MavenProject;\r
 import org.argeo.slc.SlcException;\r
+import org.argeo.slc.maven.embedder.MavenEmbedderException;\r
+import org.codehaus.plexus.embed.Embedder;\r
 \r
 public class MavenManager {\r
 \r
@@ -23,14 +29,15 @@ public class MavenManager {
        private List<ArtifactRepository> remoteRepositoriesInternal;\r
        private List<RemoteRepository> remoteRepositories = new Vector<RemoteRepository>();\r
 \r
-       private MavenEmbedder mavenEmbedder;\r
+       private SlcMavenEmbedder mavenEmbedder;\r
        private ClassLoader classLoader;\r
        private Boolean offline = false;\r
 \r
        public void init() {\r
                try {\r
-                       mavenEmbedder = new MavenEmbedder();\r
+                       mavenEmbedder = new SlcMavenEmbedder();\r
                        mavenEmbedder.setOffline(offline);\r
+                       // mavenEmbedder.setAlignWithUserInstallation(true);\r
                        if (classLoader != null)\r
                                mavenEmbedder.setClassLoader(classLoader);\r
                        else\r
@@ -60,16 +67,85 @@ public class MavenManager {
                        mavenFile.setType("pom");\r
                        Artifact artifact = resolve(mavenFile);\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
+                       // 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
                        throw new SlcException("Cannot initialize Maven manager", 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