]> git.argeo.org Git - gpl/argeo-slc.git/blobdiff - runtime/org.argeo.slc.support.maven/src/main/java/org/argeo/slc/maven/MavenManager.java
Use commons as parent
[gpl/argeo-slc.git] / runtime / org.argeo.slc.support.maven / src / main / java / org / argeo / slc / maven / MavenManager.java
index b49a911bd5649891771b1ca6dd12b9c49da72d32..2c6fddd4b42b50d93e0edc9d06d29493b04a2049 100644 (file)
@@ -1,19 +1,51 @@
+/*\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
 \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
-import org.argeo.slc.SlcException;\r
 \r
 public class MavenManager {\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
@@ -29,8 +61,9 @@ public class MavenManager {
 \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 +93,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
@@ -128,5 +230,5 @@ public class MavenManager {
        public void setOffline(Boolean offline) {\r
                this.offline = offline;\r
        }\r
-\r
+*/\r
 }\r