You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@maven.apache.org by hb...@apache.org on 2016/06/10 16:58:07 UTC
maven git commit: [MNG-3507] added color to Maven execution output
messages
Repository: maven
Updated Branches:
refs/heads/master a6d52372a -> 2859eb06e
[MNG-3507] added color to Maven execution output messages
used color scheme provided by J Dillon
jansi is made available to plugins for getting color
batch mode disables jansi color
Project: http://git-wip-us.apache.org/repos/asf/maven/repo
Commit: http://git-wip-us.apache.org/repos/asf/maven/commit/2859eb06
Tree: http://git-wip-us.apache.org/repos/asf/maven/tree/2859eb06
Diff: http://git-wip-us.apache.org/repos/asf/maven/diff/2859eb06
Branch: refs/heads/master
Commit: 2859eb06e1134a0261c502b2c6ced96a537bf832
Parents: a6d5237
Author: Herv� Boutemy <hb...@apache.org>
Authored: Sun Jun 5 13:11:45 2016 +0200
Committer: Herv� Boutemy <hb...@apache.org>
Committed: Fri Jun 10 18:57:57 2016 +0200
----------------------------------------------------------------------
.../main/resources/META-INF/maven/extension.xml | 3 +
maven-embedder/pom.xml | 4 +
.../org/apache/maven/cli/CLIReportingUtils.java | 4 +-
.../java/org/apache/maven/cli/MavenCli.java | 16 ++-
.../maven/cli/event/ExecutionEventLogger.java | 140 ++++++++++---------
pom.xml | 5 +
6 files changed, 106 insertions(+), 66 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/maven/blob/2859eb06/maven-core/src/main/resources/META-INF/maven/extension.xml
----------------------------------------------------------------------
diff --git a/maven-core/src/main/resources/META-INF/maven/extension.xml b/maven-core/src/main/resources/META-INF/maven/extension.xml
index e3af5a0..07e60aa 100644
--- a/maven-core/src/main/resources/META-INF/maven/extension.xml
+++ b/maven-core/src/main/resources/META-INF/maven/extension.xml
@@ -118,6 +118,8 @@ under the License.
<exportedPackage>org.slf4j.spi.*</exportedPackage>
<exportedPackage>org.slf4j.helpers.*</exportedPackage>
+ <!-- JAnsi -->
+ <exportedPackage>org.fusesource.jansi.*</exportedPackage>
</exportedPackages>
<exportedArtifacts>
@@ -156,6 +158,7 @@ under the License.
<exportedArtifact>javax.inject:javax.inject</exportedArtifact>
<exportedArtifact>org.slf4j:slf4j-api</exportedArtifact>
+ <exportedArtifact>org.fusesource.jansi:jansi</exportedArtifact>
<!--
| We must also filter out the old or NoClassDefFoundErrors will surface
http://git-wip-us.apache.org/repos/asf/maven/blob/2859eb06/maven-embedder/pom.xml
----------------------------------------------------------------------
diff --git a/maven-embedder/pom.xml b/maven-embedder/pom.xml
index 71dcf90..0c86310 100644
--- a/maven-embedder/pom.xml
+++ b/maven-embedder/pom.xml
@@ -80,6 +80,10 @@ under the License.
<artifactId>plexus-cipher</artifactId>
</dependency>
<dependency>
+ <groupId>org.fusesource.jansi</groupId>
+ <artifactId>jansi</artifactId>
+ </dependency>
+ <dependency>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-api</artifactId>
</dependency>
http://git-wip-us.apache.org/repos/asf/maven/blob/2859eb06/maven-embedder/src/main/java/org/apache/maven/cli/CLIReportingUtils.java
----------------------------------------------------------------------
diff --git a/maven-embedder/src/main/java/org/apache/maven/cli/CLIReportingUtils.java b/maven-embedder/src/main/java/org/apache/maven/cli/CLIReportingUtils.java
index a901cc5..18e43ef 100644
--- a/maven-embedder/src/main/java/org/apache/maven/cli/CLIReportingUtils.java
+++ b/maven-embedder/src/main/java/org/apache/maven/cli/CLIReportingUtils.java
@@ -19,6 +19,8 @@ package org.apache.maven.cli;
* under the License.
*/
+import static org.fusesource.jansi.Ansi.ansi;
+
import java.io.IOException;
import java.io.InputStream;
import java.text.SimpleDateFormat;
@@ -55,7 +57,7 @@ public final class CLIReportingUtils
final String ls = System.getProperty( "line.separator" );
Properties properties = getBuildProperties();
StringBuilder version = new StringBuilder( 256 );
- version.append( createMavenVersionString( properties ) ).append( ls );
+ version.append( ansi().bold().a( createMavenVersionString( properties ) ).reset() ).append( ls );
version.append( reduce(
properties.getProperty( "distributionShortName" ) + " home: " + System.getProperty( "maven.home",
"<unknown Maven "
http://git-wip-us.apache.org/repos/asf/maven/blob/2859eb06/maven-embedder/src/main/java/org/apache/maven/cli/MavenCli.java
----------------------------------------------------------------------
diff --git a/maven-embedder/src/main/java/org/apache/maven/cli/MavenCli.java b/maven-embedder/src/main/java/org/apache/maven/cli/MavenCli.java
index 6ac77de..15dc575 100644
--- a/maven-embedder/src/main/java/org/apache/maven/cli/MavenCli.java
+++ b/maven-embedder/src/main/java/org/apache/maven/cli/MavenCli.java
@@ -108,6 +108,8 @@ import com.google.common.base.Charsets;
import com.google.common.io.Files;
import com.google.inject.AbstractModule;
import org.eclipse.aether.transfer.TransferListener;
+import org.fusesource.jansi.Ansi;
+import org.fusesource.jansi.AnsiConsole;
import org.slf4j.ILoggerFactory;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
@@ -207,7 +209,12 @@ public class MavenCli
public static int main( String[] args, ClassWorld classWorld )
{
MavenCli cli = new MavenCli();
- return cli.doMain( new CliRequest( args, classWorld ) );
+
+ AnsiConsole.systemInstall();
+ int result = cli.doMain( new CliRequest( args, classWorld ) );
+ AnsiConsole.systemUninstall();
+
+ return result;
}
// TODO: need to externalize CliRequest
@@ -217,7 +224,11 @@ public class MavenCli
return cli.doMain( new CliRequest( args, classWorld ) );
}
- // This supports painless invocation by the Verifier during embedded execution of the core ITs
+ /**
+ * This supports painless invocation by the Verifier during embedded execution of the core ITs.
+ * See <a href="http://maven.apache.org/shared/maven-verifier/xref/org/apache/maven/it/Embedded3xLauncher.html">
+ * <code>Embedded3xLauncher</code> in <code>maven-verifier</code></a>
+ */
public int doMain( String[] args, String workingDirectory, PrintStream stdout, PrintStream stderr )
{
PrintStream oldout = System.out;
@@ -1286,6 +1297,7 @@ public class MavenCli
if ( commandLine.hasOption( CLIManager.BATCH_MODE ) )
{
request.setInteractiveMode( false );
+ Ansi.setEnabled( false );
}
boolean noSnapshotUpdates = false;
http://git-wip-us.apache.org/repos/asf/maven/blob/2859eb06/maven-embedder/src/main/java/org/apache/maven/cli/event/ExecutionEventLogger.java
----------------------------------------------------------------------
diff --git a/maven-embedder/src/main/java/org/apache/maven/cli/event/ExecutionEventLogger.java b/maven-embedder/src/main/java/org/apache/maven/cli/event/ExecutionEventLogger.java
index 89c59cb..5af7406 100644
--- a/maven-embedder/src/main/java/org/apache/maven/cli/event/ExecutionEventLogger.java
+++ b/maven-embedder/src/main/java/org/apache/maven/cli/event/ExecutionEventLogger.java
@@ -21,6 +21,7 @@ package org.apache.maven.cli.event;
import static org.apache.maven.cli.CLIReportingUtils.formatDuration;
import static org.apache.maven.cli.CLIReportingUtils.formatTimestamp;
+import static org.fusesource.jansi.Ansi.ansi;
import org.apache.commons.lang3.Validate;
import org.apache.maven.execution.AbstractExecutionListener;
@@ -34,6 +35,7 @@ import org.apache.maven.plugin.MojoExecution;
import org.apache.maven.plugin.descriptor.MojoDescriptor;
import org.apache.maven.project.MavenProject;
import org.codehaus.plexus.util.StringUtils;
+import org.fusesource.jansi.Ansi;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
@@ -74,6 +76,16 @@ public class ExecutionEventLogger
return buffer.toString();
}
+ private void infoLine( char c )
+ {
+ infoMain( chars( c, LINE_LENGTH ) );
+ }
+
+ private void infoMain( String msg )
+ {
+ logger.info( ansi().bold().a( msg ).reset().toString() );
+ }
+
@Override
public void projectDiscoveryStarted( ExecutionEvent event )
{
@@ -88,9 +100,9 @@ public class ExecutionEventLogger
{
if ( logger.isInfoEnabled() && event.getSession().getProjects().size() > 1 )
{
- logger.info( chars( '-', LINE_LENGTH ) );
+ infoLine( '-' );
- logger.info( "Reactor Build Order:" );
+ infoMain( "Reactor Build Order:" );
logger.info( "" );
@@ -115,15 +127,15 @@ public class ExecutionEventLogger
logStats( event.getSession() );
- logger.info( chars( '-', LINE_LENGTH ) );
+ infoLine( '-' );
}
}
private void logReactorSummary( MavenSession session )
{
- logger.info( chars( '-', LINE_LENGTH ) );
+ infoLine( '-' );
- logger.info( "Reactor Summary:" );
+ infoMain( "Reactor Summary:" );
logger.info( "" );
@@ -149,11 +161,12 @@ public class ExecutionEventLogger
if ( buildSummary == null )
{
- buffer.append( "SKIPPED" );
+ buffer.append( ansi().fgYellow().a( "SKIPPED" ).reset() );
}
else if ( buildSummary instanceof BuildSuccess )
{
- buffer.append( "SUCCESS [" );
+ buffer.append( ansi().bold().fgGreen().a( "SUCCESS" ).reset() );
+ buffer.append( " [" );
String buildTimeDuration = formatDuration( buildSummary.getTime() );
int padSize = MAX_PADDED_BUILD_TIME_DURATION_LENGTH - buildTimeDuration.length();
if ( padSize > 0 )
@@ -165,7 +178,8 @@ public class ExecutionEventLogger
}
else if ( buildSummary instanceof BuildFailure )
{
- buffer.append( "FAILURE [" );
+ buffer.append( ansi().bold().fgRed().a( "FAILURE" ).reset() );
+ buffer.append( " [" );
String buildTimeDuration = formatDuration( buildSummary.getTime() );
int padSize = MAX_PADDED_BUILD_TIME_DURATION_LENGTH - buildTimeDuration.length();
if ( padSize > 0 )
@@ -182,21 +196,23 @@ public class ExecutionEventLogger
private void logResult( MavenSession session )
{
- logger.info( chars( '-', LINE_LENGTH ) );
+ infoLine( '-' );
+ Ansi ansi = ansi().bold();
if ( session.getResult().hasExceptions() )
{
- logger.info( "BUILD FAILURE" );
+ ansi.fgRed().a( "BUILD FAILURE" );
}
else
{
- logger.info( "BUILD SUCCESS" );
+ ansi.fgGreen().a( "BUILD SUCCESS" );
}
+ logger.info( ansi.reset().toString() );
}
private void logStats( MavenSession session )
{
- logger.info( chars( '-', LINE_LENGTH ) );
+ infoLine( '-' );
long finish = System.currentTimeMillis();
@@ -222,13 +238,13 @@ public class ExecutionEventLogger
{
if ( logger.isInfoEnabled() )
{
- logger.info( chars( ' ', LINE_LENGTH ) );
- logger.info( chars( '-', LINE_LENGTH ) );
+ logger.info( "" );
+ infoLine( '-' );
- logger.info( "Skipping " + event.getProject().getName() );
+ infoMain( "Skipping " + event.getProject().getName() );
logger.info( "This project has been banned from the build due to previous failures." );
- logger.info( chars( '-', LINE_LENGTH ) );
+ infoLine( '-' );
}
}
@@ -237,12 +253,12 @@ public class ExecutionEventLogger
{
if ( logger.isInfoEnabled() )
{
- logger.info( chars( ' ', LINE_LENGTH ) );
- logger.info( chars( '-', LINE_LENGTH ) );
+ logger.info( "" );
+ infoLine( '-' );
- logger.info( "Building " + event.getProject().getName() + " " + event.getProject().getVersion() );
+ infoMain( "Building " + event.getProject().getName() + " " + event.getProject().getVersion() );
- logger.info( chars( '-', LINE_LENGTH ) );
+ infoLine( '-' );
}
}
@@ -264,15 +280,14 @@ public class ExecutionEventLogger
{
if ( logger.isInfoEnabled() )
{
- StringBuilder buffer = new StringBuilder( 128 );
+ logger.info( "" );
- buffer.append( "--- " );
- append( buffer, event.getMojoExecution() );
- append( buffer, event.getProject() );
- buffer.append( " ---" );
+ Ansi ansi = ansi().bold().a( "--- " ).reset();
+ append( ansi, event.getMojoExecution() );
+ append( ansi, event.getProject() );
+ ansi.bold().a( " ---" ).reset();
- logger.info( "" );
- logger.info( buffer.toString() );
+ logger.info( ansi.toString() );
}
}
@@ -285,17 +300,16 @@ public class ExecutionEventLogger
{
if ( logger.isInfoEnabled() )
{
- StringBuilder buffer = new StringBuilder( 128 );
+ logger.info( "" );
- buffer.append( ">>> " );
- append( buffer, event.getMojoExecution() );
- buffer.append( " > " );
- appendForkInfo( buffer, event.getMojoExecution().getMojoDescriptor() );
- append( buffer, event.getProject() );
- buffer.append( " >>>" );
+ Ansi ansi = ansi().bold().a( ">>> " ).reset();
+ append( ansi, event.getMojoExecution() );
+ ansi.bold().a( " > " ).reset();
+ appendForkInfo( ansi, event.getMojoExecution().getMojoDescriptor() );
+ append( ansi, event.getProject() );
+ ansi.bold().a( " >>>" ).reset();
- logger.info( "" );
- logger.info( buffer.toString() );
+ logger.info( ansi.toString() );
}
}
@@ -310,54 +324,55 @@ public class ExecutionEventLogger
{
if ( logger.isInfoEnabled() )
{
- StringBuilder buffer = new StringBuilder( 128 );
+ logger.info( "" );
- buffer.append( "<<< " );
- append( buffer, event.getMojoExecution() );
- buffer.append( " < " );
- appendForkInfo( buffer, event.getMojoExecution().getMojoDescriptor() );
- append( buffer, event.getProject() );
- buffer.append( " <<<" );
+ Ansi ansi = ansi().bold().a( "<<< " ).reset();
+ append( ansi, event.getMojoExecution() );
+ ansi.bold().a( " < " ).reset();
+ appendForkInfo( ansi, event.getMojoExecution().getMojoDescriptor() );
+ append( ansi, event.getProject() );
+ ansi.bold().a( " <<<" ).reset();
- logger.info( "" );
- logger.info( buffer.toString() );
+ logger.info( ansi.toString() );
}
}
- private void append( StringBuilder buffer, MojoExecution me )
+ private void append( Ansi ansi, MojoExecution me )
{
- buffer.append( me.getArtifactId() ).append( ':' ).append( me.getVersion() );
- buffer.append( ':' ).append( me.getGoal() );
+ ansi.fgGreen().a( me.getArtifactId() ).a( ':' ).a( me.getVersion() );
+ ansi.a( ':' ).a( me.getGoal() ).reset();
if ( me.getExecutionId() != null )
{
- buffer.append( " (" ).append( me.getExecutionId() ).append( ')' );
+ ansi.bold().a( " (" ).a( me.getExecutionId() ).a( ')' ).reset();
}
}
- private void appendForkInfo( StringBuilder buffer, MojoDescriptor md )
+ private void appendForkInfo( Ansi ansi, MojoDescriptor md )
{
+ ansi.bold();
if ( StringUtils.isNotEmpty( md.getExecutePhase() ) )
{
// forked phase
if ( StringUtils.isNotEmpty( md.getExecuteLifecycle() ) )
{
- buffer.append( '[' );
- buffer.append( md.getExecuteLifecycle() );
- buffer.append( ']' );
+ ansi.a( '[' );
+ ansi.a( md.getExecuteLifecycle() );
+ ansi.a( ']' );
}
- buffer.append( md.getExecutePhase() );
+ ansi.a( md.getExecutePhase() );
}
else
{
// forked goal
- buffer.append( ':' );
- buffer.append( md.getExecuteGoal() );
+ ansi.a( ':' );
+ ansi.a( md.getExecuteGoal() );
}
+ ansi.reset();
}
- private void append( StringBuilder buffer, MavenProject project )
+ private void append( Ansi ansi, MavenProject project )
{
- buffer.append( " @ " ).append( project.getArtifactId() );
+ ansi.a( " @ " ).fgCyan().a( project.getArtifactId() ).reset();
}
@Override
@@ -365,13 +380,12 @@ public class ExecutionEventLogger
{
if ( logger.isInfoEnabled() && event.getMojoExecution().getForkedExecutions().size() > 1 )
{
- logger.info( chars( ' ', LINE_LENGTH ) );
- logger.info( chars( '>', LINE_LENGTH ) );
+ logger.info( "" );
+ infoLine( '>' );
- logger.info( "Forking " + event.getProject().getName() + " " + event.getProject().getVersion() );
+ infoMain( "Forking " + event.getProject().getName() + " " + event.getProject().getVersion() );
- logger.info( chars( '>', LINE_LENGTH ) );
+ infoLine( '>' );
}
}
-
}
http://git-wip-us.apache.org/repos/asf/maven/blob/2859eb06/pom.xml
----------------------------------------------------------------------
diff --git a/pom.xml b/pom.xml
index ff7c58e..11135ee 100644
--- a/pom.xml
+++ b/pom.xml
@@ -273,6 +273,11 @@ under the License.
<version>${plexusInterpolationVersion}</version>
</dependency>
<dependency>
+ <groupId>org.fusesource.jansi</groupId>
+ <artifactId>jansi</artifactId>
+ <version>1.12</version>
+ </dependency>
+ <dependency>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-api</artifactId>
<version>${slf4jVersion}</version>