Search in sources :

Example 1 with SystemIOLoggerFilter

use of org.jenkins.tools.test.logging.SystemIOLoggerFilter in project plugin-compat-tester by jenkinsci.

the class InternalMavenRunner method run.

@Override
public void run(Config config, File baseDirectory, File buildLogFile, String... goals) throws PomExecutionException {
    try {
        init(config);
    } catch (Exception x) {
        throw new PomExecutionException(x);
    }
    final List<String> succeededPlugins = new ArrayList<String>();
    try {
        MavenRequest mavenRequest = buildMavenRequest(config, baseDirectory.getAbsolutePath(), config.userSettingsFile == null ? null : config.userSettingsFile.getAbsolutePath());
        mavenRequest.setGoals(Arrays.asList(goals));
        mavenRequest.setPom(new File(baseDirectory, "pom.xml").getAbsolutePath());
        AbstractExecutionListener mavenListener = new AbstractExecutionListener() {

            @Override
            public void mojoSucceeded(ExecutionEvent event) {
                succeededPlugins.add(event.getMojoExecution().getArtifactId());
            }
        };
        mavenRequest.setExecutionListener(mavenListener);
        mavenRequest.setLoggingLevel(Logger.LEVEL_INFO);
        final PrintStream originalOut = System.out;
        final PrintStream originalErr = System.err;
        SystemIOLoggerFilter loggerFilter = new SystemIOLoggerFilter(buildLogFile);
        // Since here, we are replacing System.out & System.err by
        // wrappers logging things in the build log file
        // We can't do this by using maven embedder's logger (or plexus logger)
        // since :
        // - It would imply to Instantiate a new MavenEmbedder for every test (which have a performance/memory cost !)
        // - Plus it looks like there are lots of System.out/err.println() in maven
        // plugin (instead of using maven logger)
        System.setOut(new SystemIOLoggerFilter.SystemIOWrapper(loggerFilter, originalOut));
        System.setErr(new SystemIOLoggerFilter.SystemIOWrapper(loggerFilter, originalErr));
        try {
            executeGoals(embedder, mavenRequest);
        } catch (PomExecutionException x) {
            PomExecutionException x2 = new PomExecutionException(x);
            x2.succeededPluginArtifactIds.addAll(succeededPlugins);
            throw x2;
        } finally {
            // Setting back System.out/err
            System.setOut(originalOut);
            System.setErr(originalErr);
        }
    } catch (IOException x) {
        throw new PomExecutionException(x);
    }
}
Also used : PrintStream(java.io.PrintStream) AbstractExecutionListener(org.apache.maven.execution.AbstractExecutionListener) ArrayList(java.util.ArrayList) PomExecutionException(org.jenkins.tools.test.exception.PomExecutionException) IOException(java.io.IOException) PomExecutionException(org.jenkins.tools.test.exception.PomExecutionException) IOException(java.io.IOException) MavenEmbedderException(hudson.maven.MavenEmbedderException) SystemIOLoggerFilter(org.jenkins.tools.test.logging.SystemIOLoggerFilter) ExecutionEvent(org.apache.maven.execution.ExecutionEvent) MavenRequest(hudson.maven.MavenRequest) File(java.io.File)

Aggregations

MavenEmbedderException (hudson.maven.MavenEmbedderException)1 MavenRequest (hudson.maven.MavenRequest)1 File (java.io.File)1 IOException (java.io.IOException)1 PrintStream (java.io.PrintStream)1 ArrayList (java.util.ArrayList)1 AbstractExecutionListener (org.apache.maven.execution.AbstractExecutionListener)1 ExecutionEvent (org.apache.maven.execution.ExecutionEvent)1 PomExecutionException (org.jenkins.tools.test.exception.PomExecutionException)1 SystemIOLoggerFilter (org.jenkins.tools.test.logging.SystemIOLoggerFilter)1