package fr.inria.diversify.buildSystem.maven; import fr.inria.diversify.buildSystem.AbstractBuilder; import fr.inria.diversify.util.Log; import org.apache.maven.shared.invoker.*; import java.io.*; import java.util.ArrayList; import java.util.Arrays; import java.util.List; /** * User: Simon * Date: 5/17/13 * Time: 11:34 AM */ public class MavenBuilder extends AbstractBuilder { public MavenBuilder(String directory) throws IOException { super(directory); } protected void runPrivate(String[] goals, boolean verbose) { if(goals == null) { goals = this.goals; } Log.debug("run maven, phase: {}, timeout {}", Arrays.toString(goals), timeOut); InvocationRequest request = new DefaultInvocationRequest(); request.setPomFile(new File(directory + "/pom.xml")); List<String> l = new ArrayList<String>(); for (String phase : goals) l.add(phase); request.setLocalRepositoryDirectory(setting); request.setGoals(l); MavenInvoker invoker = new MavenInvoker(); //freebsd File mvnHome = new File("/usr/local/share/java/maven3"); if (!mvnHome.exists()) //ubuntu mvnHome = new File("/usr/share/maven-3.3.3"); if (!mvnHome.exists()) //debian mvnHome = new File("/opt/maven"); if (!mvnHome.exists()) //osx mvnHome = new File("/usr/local/Cellar/maven/3.3.3/libexec/"); if (!mvnHome.exists()) //win //mvnHome = new File(System.getenv("M2_HOME")); if (!mvnHome.exists()) //ubuntu mvnHome = new File("/usr/share/apache-maven-3.3.3"); invoker.setMavenHome(mvnHome); invoker.setTimeOut(timeOut); ByteArrayOutputStream os = new ByteArrayOutputStream(); PrintStream stream = new PrintStream(os); PrintStreamHandler psh = new PrintStreamHandler(stream, true); invoker.setOutputHandler(psh); invoker.setErrorHandler(psh); try { invoker.execute(request); String output = os.toString(); if(verbose) { Log.debug(output); } if (getSaveOutputToFile()) { saveOutputToFile(output); } if (clojureTest) { parseClojureResult(output); } else { parseResult(output); } } catch (MavenInvocationException e) { Log.debug("Error in run Maven", e); } try { stream.close(); os.close(); } catch (IOException e) { e.printStackTrace(); } } /** * Parse status from the maven output * @param r */ protected void parseResult(String r) { //Save r to further analysis MavenOutputParser parser = new MavenOutputParser(); parser.setAcceptedErrors(acceptedErrors); parser.parse(r, "\n"); // errors = parser.getCompileErrors(); failedTests = parser.getFailedTests(); status = parser.getStatus(); } protected void parseClojureResult(String r) { Integer tmpFailure = null; for (String s : r.split("\n")) { if (s.startsWith("[ERROR] COMPILATION ERROR")) { tmpFailure = -2; compileError = true; } if (s.startsWith("setCompile-clojure:")) { tmpFailure = -1; } if (s.contains("test:")) { tmpFailure = -1; allTestRun = true; } if (s.contains("[INFO] BUILD SUCCESS")) { allTestRun = true; tmpFailure = 0; } } status = tmpFailure; } }