Introduce MavenCall
authorMathieu Baudier <mbaudier@argeo.org>
Fri, 10 Feb 2012 18:43:51 +0000 (18:43 +0000)
committerMathieu Baudier <mbaudier@argeo.org>
Fri, 10 Feb 2012 18:43:51 +0000 (18:43 +0000)
git-svn-id: https://svn.argeo.org/slc/trunk@5041 4cfe0d0a-d680-48aa-b62c-e0a02a3f76cc

runtime/org.argeo.slc.support.maven/src/main/java/org/argeo/slc/maven/CustomCli.java [new file with mode: 0644]
runtime/org.argeo.slc.support.maven/src/main/java/org/argeo/slc/maven/MavenCall.java [new file with mode: 0644]
runtime/org.argeo.slc.support.maven/src/main/java/org/argeo/slc/maven/MavenManager.java

diff --git a/runtime/org.argeo.slc.support.maven/src/main/java/org/argeo/slc/maven/CustomCli.java b/runtime/org.argeo.slc.support.maven/src/main/java/org/argeo/slc/maven/CustomCli.java
new file mode 100644 (file)
index 0000000..36db90f
--- /dev/null
@@ -0,0 +1,19 @@
+package org.argeo.slc.maven;
+
+import org.apache.maven.cli.MavenCli;
+import org.codehaus.plexus.PlexusContainer;
+
+/** Custom Maven CLI, giving access to the underlying Plexus container. */
+class CustomCli extends MavenCli {
+       private PlexusContainer container;
+
+       @Override
+       protected void customizeContainer(PlexusContainer container) {
+               this.container = container;
+       }
+
+       public PlexusContainer getContainer() {
+               return container;
+       }
+
+}
diff --git a/runtime/org.argeo.slc.support.maven/src/main/java/org/argeo/slc/maven/MavenCall.java b/runtime/org.argeo.slc.support.maven/src/main/java/org/argeo/slc/maven/MavenCall.java
new file mode 100644 (file)
index 0000000..d180d1e
--- /dev/null
@@ -0,0 +1,79 @@
+package org.argeo.slc.maven;
+
+import java.util.ArrayList;
+import java.util.List;
+import java.util.Map;
+
+import org.apache.commons.logging.Log;
+import org.apache.commons.logging.LogFactory;
+import org.codehaus.plexus.PlexusContainer;
+
+/** A Maven execution. */
+public class MavenCall implements Runnable {
+       private final static Log log = LogFactory.getLog(MavenCall.class);
+       private String basedir;
+       private String settings;
+       private List<String> goals;
+       private List<String> profiles;
+       private Map<String, String> properties;
+
+       public void run() {
+               Thread.currentThread().setContextClassLoader(
+                               getClass().getClassLoader());
+               List<String> args = new ArrayList<String>();
+               args.add("-e");
+               if (settings != null) {
+                       args.add("--settings");
+                       args.add(settings);
+               }
+               args.add("-f");
+               args.add(basedir + "/pom.xml");
+               if (goals != null)
+                       args.addAll(goals);
+               if (profiles != null)
+                       for (String profile : profiles)
+                               args.add("-P" + profile);
+               if (properties != null)
+                       for (String key : properties.keySet())
+                               args.add("-D" + key + "=\"" + properties.get(key) + "\"");
+
+               // String[] goals = { "-o", "-e", "-f", basedir + "/pom.xml", "clean",
+               // "install" };
+
+               // String m2Home = "/opt/apache-maven-3.0.1";
+               // System.setProperty("classworlds.conf", m2Home + "/bin/m2.conf");
+               // System.setProperty("maven.home", m2Home);
+               //
+               // Launcher.main(goals);
+
+               CustomCli mavenCli = new CustomCli();
+               mavenCli.doMain(args.toArray(new String[args.size()]), basedir,
+                               System.out, System.err);
+
+               PlexusContainer plexusContainer = mavenCli.getContainer();
+               if (log.isDebugEnabled())
+                       log.debug(plexusContainer.getContext().getContextData());
+               plexusContainer.dispose();
+       }
+
+       public void setBasedir(String basedir) {
+               this.basedir = basedir;
+       }
+
+       public void setSettings(String settings) {
+               this.settings = settings;
+       }
+
+       public void setGoals(List<String> goals) {
+               this.goals = goals;
+       }
+
+       public void setProfiles(List<String> profiles) {
+               this.profiles = profiles;
+       }
+
+       public void setProperties(Map<String, String> properties) {
+               this.properties = properties;
+       }
+
+}
index d3f4f4389feb7a04380f58bcd8c4f7cea4e6fabf..cb362b44510ab0bf1672675a4d43526fbfee1ee9 100644 (file)
@@ -18,7 +18,6 @@ package org.argeo.slc.maven;
 \r
 import org.apache.commons.logging.Log;\r
 import org.apache.commons.logging.LogFactory;\r
-import org.apache.maven.cli.MavenCli;\r
 import org.apache.maven.repository.internal.DefaultServiceLocator;\r
 import org.apache.maven.repository.internal.MavenRepositorySystemSession;\r
 import org.argeo.slc.SlcException;\r
@@ -39,7 +38,6 @@ import org.sonatype.aether.repository.RemoteRepository;
 import org.sonatype.aether.spi.connector.RepositoryConnectorFactory;\r
 import org.sonatype.aether.util.artifact.DefaultArtifact;\r
 import org.sonatype.aether.util.graph.PreorderNodeListGenerator;\r
-import org.sonatype.aether.util.graph.selector.OptionalDependencySelector;\r
 \r
 public class MavenManager {\r
        private final static Log log = LogFactory.getLog(MavenManager.class);\r
@@ -177,17 +175,4 @@ public class MavenManager {
                new MavenManager().init();\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