]> 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 28287b227a9c98ceadab701fb50767e3af8d130e..2c6fddd4b42b50d93e0edc9d06d29493b04a2049 100644 (file)
@@ -1,20 +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
-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
@@ -25,13 +56,21 @@ public class MavenManager {
        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
@@ -46,15 +85,54 @@ public class MavenManager {
                                                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
@@ -62,6 +140,38 @@ public class MavenManager {
                }\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
@@ -112,5 +222,13 @@ public class MavenManager {
        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