Skip to content

Commit

Permalink
FORGE-1488: Build output is now shown
Browse files Browse the repository at this point in the history
  • Loading branch information
gastaldi committed Aug 10, 2014
1 parent db14a16 commit c9888bc
Show file tree
Hide file tree
Showing 2 changed files with 94 additions and 7 deletions.
Expand Up @@ -19,7 +19,9 @@
import java.util.Map;
import java.util.Map.Entry;
import java.util.Properties;
import java.util.logging.Handler;
import java.util.logging.Level;
import java.util.logging.LogRecord;
import java.util.logging.Logger;

import javax.inject.Inject;
Expand All @@ -40,7 +42,10 @@
import org.jboss.forge.furnace.util.OperatingSystemUtils;

/**
* Implementation of {@link MavenFacet}
*
* @author <a href="mailto:lincolnbaxter@gmail.com">Lincoln Baxter, III</a>
* @author <a href="ggastald@redhat.com">George Gastaldi</a>
*/
public class MavenFacetImpl extends AbstractFacet<Project> implements ProjectFacet, MavenFacet
{
Expand Down Expand Up @@ -233,11 +238,35 @@ else if (System.getProperty(MavenContainer.ALT_GLOBAL_SETTINGS_XML_LOCATION) !=
{
list.addAll(Arrays.asList(arguments));
}
String[] params = list.toArray(new String[list.size()]);
MavenCli cli = new MavenCli();
int i = cli.doMain(params, getFaceted().getRoot().getFullyQualifiedName(),
out, err);
return i == 0;
return doExecuteMavenEmbedded(out, err, list);
}

/**
* The embedded maven CLI uses the java logging API to output the log. <br/>
* Since we never write the log to the console, we need register a logging handler.
*
* @author <a href="ggastald@redhat.com">George Gastaldi</a>
*/
private boolean doExecuteMavenEmbedded(final PrintStream out, final PrintStream err, final List<String> list)
{
// Have we asked for quiet mode?
final boolean quiet = list.contains("-q") || list.contains("--quiet");
final String[] params = list.toArray(new String[list.size()]);
// Get root logger. Yes, it is an empty logger, Logger.getGlobal() doesn't work here
final Logger globalLogger = Logger.getLogger("");
final Handler outHandler = new UncloseableStreamHandler(out, quiet);
try
{
globalLogger.addHandler(outHandler);
final MavenCli cli = new MavenCli();
int i = cli.doMain(params, getFaceted().getRoot().getFullyQualifiedName(),
out, err);
return i == 0;
}
finally
{
globalLogger.removeHandler(outHandler);
}
}

@Override
Expand Down Expand Up @@ -313,4 +342,64 @@ public boolean isModelValid()
}
}

/**
* A {@link Handler} implementation that writes to a {@link PrintStream}
*
* Used in {@link MavenFacetImpl#executeMavenEmbedded(PrintStream, PrintStream, String[])}
*
* @author <a href="ggastald@redhat.com">George Gastaldi</a>
*/
private static class UncloseableStreamHandler extends Handler
{
private final PrintStream out;
private final boolean quiet;

public UncloseableStreamHandler(PrintStream out, boolean quiet)
{
super();
this.out = out;
this.quiet = quiet;
}

@Override
public void publish(LogRecord record)
{
// Write only if quiet is false
if (!quiet && isLoggable(record))
{
out.printf("[%s] %s%n", record.getLevel(), record.getMessage());
}
}

@Override
public boolean isLoggable(LogRecord record)
{
if (super.isLoggable(record))
{
switch (record.getMessage())
{
// Avoid unwanted warning messages
case "setRootLoggerLevel: operation not supported":
case "reset(): operation not supported":
break;
default:
return true;
}
}
return false;
}

@Override
public void flush()
{
out.flush();
}

@Override
public void close()
{
// Never close
}
}

}
Expand Up @@ -28,7 +28,6 @@
import org.jboss.shrinkwrap.api.ShrinkWrap;
import org.junit.Assert;
import org.junit.Before;
import org.junit.Ignore;
import org.junit.Test;
import org.junit.runner.RunWith;

Expand Down Expand Up @@ -93,7 +92,6 @@ public void testBuildArtifactResolved() throws Exception
}

@Test
@Ignore("FORGE-1488")
public void testBuildOutput() throws Exception
{
final PackagingFacet facet = project.getFacet(PackagingFacet.class);
Expand Down

0 comments on commit c9888bc

Please sign in to comment.