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/05 11:12:03 UTC

maven git commit: MNG-3507 added color to Maven execution output messages

Repository: maven
Updated Branches:
  refs/heads/MNG-3507 [created] b0c8e4baa


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/b0c8e4ba
Tree: http://git-wip-us.apache.org/repos/asf/maven/tree/b0c8e4ba
Diff: http://git-wip-us.apache.org/repos/asf/maven/diff/b0c8e4ba

Branch: refs/heads/MNG-3507
Commit: b0c8e4baa70bdf91e436855bc993d5a868908862
Parents: b2a8aad
Author: Herv� Boutemy <hb...@apache.org>
Authored: Sun Jun 5 13:11:45 2016 +0200
Committer: Herv� Boutemy <hb...@apache.org>
Committed: Sun Jun 5 13:11:45 2016 +0200

----------------------------------------------------------------------
 .../main/resources/META-INF/maven/extension.xml |   3 +
 maven-embedder/pom.xml                          |   4 +
 .../java/org/apache/maven/cli/MavenCli.java     |   2 +
 .../maven/cli/event/ExecutionEventLogger.java   | 140 ++++++++++---------
 pom.xml                                         |   5 +
 5 files changed, 91 insertions(+), 63 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/maven/blob/b0c8e4ba/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/b0c8e4ba/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/b0c8e4ba/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..8ea7517 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,7 @@ 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.slf4j.ILoggerFactory;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
@@ -1286,6 +1287,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/b0c8e4ba/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/b0c8e4ba/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>