X-Git-Url: http://git.argeo.org/?a=blobdiff_plain;f=runtime%2Forg.argeo.slc.support.maven%2Fsrc%2Fmain%2Fjava%2Forg%2Fargeo%2Fslc%2Fmaven%2FMavenCall.java;h=f32ec3bc8c067715e2431e21fae4144ef338c6cc;hb=5fcacdb600e4c9e765cb93b46132932662832c1b;hp=d180d1e11ea26d4ad3432590d3be4e8b28df6271;hpb=3ad7191cf5cb710e539df2a394ac7904e0e684e5;p=gpl%2Fargeo-slc.git 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 index d180d1e11..f32ec3bc8 100644 --- 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 @@ -1,11 +1,14 @@ package org.argeo.slc.maven; +import java.io.File; import java.util.ArrayList; +import java.util.Arrays; import java.util.List; import java.util.Map; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; +import org.argeo.slc.SlcException; import org.codehaus.plexus.PlexusContainer; /** A Maven execution. */ @@ -13,21 +16,31 @@ public class MavenCall implements Runnable { private final static Log log = LogFactory.getLog(MavenCall.class); private String basedir; private String settings; + /** Raw command lines arguments */ + private String cl; private List goals; private List profiles; private Map properties; + private Boolean success = null; + public void run() { Thread.currentThread().setContextClassLoader( getClass().getClassLoader()); List args = new ArrayList(); args.add("-e"); - if (settings != null) { + if (settings != null && !settings.trim().equals("")) { args.add("--settings"); args.add(settings); } args.add("-f"); - args.add(basedir + "/pom.xml"); + args.add(getBasedirFile().getPath() + "/pom.xml"); + // FIXME manages \" \". Use Commons CLI? + if (cl != null) { + String[] clArgs = cl.split(" "); + args.addAll(Arrays.asList(clArgs)); + } + if (goals != null) args.addAll(goals); if (profiles != null) @@ -47,8 +60,14 @@ public class MavenCall implements Runnable { // Launcher.main(goals); CustomCli mavenCli = new CustomCli(); - mavenCli.doMain(args.toArray(new String[args.size()]), basedir, - System.out, System.err); + int exitCode = mavenCli.doMain(args.toArray(new String[args.size()]), + getBasedirFile().getPath(), System.out, System.err); + if (log.isDebugEnabled()) + log.debug("Maven exit code: " + exitCode); + if (exitCode == 0) + success = true; + else + success = false; PlexusContainer plexusContainer = mavenCli.getContainer(); if (log.isDebugEnabled()) @@ -56,6 +75,18 @@ public class MavenCall implements Runnable { plexusContainer.dispose(); } + /** Removes 'file:' prefix if present */ + protected File getBasedirFile() { + if (basedir == null) + throw new SlcException("basedir not set"); + File dir; + if (basedir.startsWith("file:")) + dir = new File(basedir.substring("file:".length())); + else + dir = new File(basedir); + return dir; + } + public void setBasedir(String basedir) { this.basedir = basedir; } @@ -76,4 +107,12 @@ public class MavenCall implements Runnable { this.properties = properties; } + public void setCl(String cl) { + this.cl = cl; + } + + public Boolean getSuccess() { + return success == null ? false : success; + } + }