Skip to content

Commit

Permalink
Make sure the logs generated by the Maven processes launched in integ…
Browse files Browse the repository at this point in the history
…ration-tests/maven are easily accessible
  • Loading branch information
jaikiran authored and Simulant87 committed Nov 23, 2019
1 parent 7f7d595 commit 1fc3083
Showing 1 changed file with 57 additions and 13 deletions.
Original file line number Diff line number Diff line change
@@ -1,13 +1,25 @@
package io.quarkus.maven.it.verifier;

import java.io.*;
import java.io.File;
import java.io.IOException;
import java.io.OutputStream;
import java.io.PrintStream;
import java.io.UnsupportedEncodingException;
import java.nio.file.Files;
import java.util.List;
import java.util.Map;
import java.util.Properties;
import java.util.stream.Collectors;

import org.apache.commons.io.FileUtils;
import org.apache.maven.shared.invoker.*;
import org.apache.commons.io.output.TeeOutputStream;
import org.apache.maven.shared.invoker.DefaultInvocationRequest;
import org.apache.maven.shared.invoker.InvocationRequest;
import org.apache.maven.shared.invoker.InvocationResult;
import org.apache.maven.shared.invoker.InvokerLogger;
import org.apache.maven.shared.invoker.MavenInvocationException;
import org.apache.maven.shared.invoker.PrintStreamHandler;
import org.apache.maven.shared.invoker.PrintStreamLogger;
import org.jutils.jprocesses.JProcesses;
import org.jutils.jprocesses.model.ProcessInfo;

Expand All @@ -20,9 +32,10 @@ public class RunningInvoker extends MavenProcessInvoker {
private final boolean debug;
private MavenProcessInvocationResult result;
private final File log;
private final PrintStreamHandler logHandler;
private final PrintStreamHandler outStreamHandler;
private final PrintStreamHandler errStreamHandler;

public RunningInvoker(File basedir, boolean debug) throws FileNotFoundException {
public RunningInvoker(File basedir, boolean debug) {
this.debug = debug;
setWorkingDirectory(basedir);
String repo = System.getProperty("maven.repo");
Expand All @@ -31,16 +44,44 @@ public RunningInvoker(File basedir, boolean debug) throws FileNotFoundException
}
setLocalRepositoryDirectory(new File(repo));
log = new File(basedir, "build-" + basedir.getName() + ".log");
PrintStream stream = null;
PrintStream outStream;
try {
stream = new PrintStream(log, "UTF-8");
outStream = createTeePrintStream(System.out, Files.newOutputStream(log.toPath()));
} catch (IOException ioe) {
outStream = System.out;
}
this.outStreamHandler = new PrintStreamHandler(outStream, true);
setOutputHandler(this.outStreamHandler);

PrintStream errStream;
try {
errStream = createTeePrintStream(System.err, Files.newOutputStream(log.toPath()));
} catch (IOException ioe) {
errStream = System.err;
}
this.errStreamHandler = new PrintStreamHandler(errStream, true);
setErrorHandler(this.errStreamHandler);

setLogger(new PrintStreamLogger(outStream, debug ? InvokerLogger.DEBUG : InvokerLogger.INFO));
}

/**
* Creates a {@link PrintStream} with an underlying {@link TeeOutputStream} composed of {@code one}
* and {@code two} outputstreams
*
* @param one
* @param two
* @return
*/
private static PrintStream createTeePrintStream(final OutputStream one, final OutputStream two) {
final OutputStream tee = new TeeOutputStream(one, two);
PrintStream stream;
try {
stream = new PrintStream(tee, true, "UTF-8");
} catch (UnsupportedEncodingException e) {
stream = new PrintStream(log);
stream = new PrintStream(tee, true);
}
logHandler = new PrintStreamHandler(stream, true);
setErrorHandler(logHandler);
setOutputHandler(logHandler);
setLogger(new PrintStreamLogger(stream, InvokerLogger.DEBUG));
return stream;
}

public void stop() {
Expand Down Expand Up @@ -81,8 +122,8 @@ public MavenProcessInvocationResult execute(List<String> goals, Map<String, Stri

request.setShellEnvironmentInherited(true);
envVars.forEach(request::addShellEnvironment);
request.setOutputHandler(logHandler);
request.setErrorHandler(logHandler);
request.setOutputHandler(outStreamHandler);
request.setErrorHandler(errStreamHandler);
this.result = (MavenProcessInvocationResult) execute(request);
return result;
}
Expand All @@ -93,6 +134,9 @@ public InvocationResult execute(InvocationRequest request) throws MavenInvocatio
}

public String log() throws IOException {
if (log == null) {
return null;
}
return FileUtils.readFileToString(log, "UTF-8");
}

Expand Down

0 comments on commit 1fc3083

Please sign in to comment.