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 2017/01/22 22:12:49 UTC
[1/2] maven git commit: [MNG-3507] added color to Maven execution
output messages [Forced Update!]
Repository: maven
Updated Branches:
refs/heads/MNG-3507 cf6c36aaf -> 716a59661 (forced update)
[MNG-3507] added color to Maven execution output messages
Project: http://git-wip-us.apache.org/repos/asf/maven/repo
Commit: http://git-wip-us.apache.org/repos/asf/maven/commit/0f8b458f
Tree: http://git-wip-us.apache.org/repos/asf/maven/tree/0f8b458f
Diff: http://git-wip-us.apache.org/repos/asf/maven/diff/0f8b458f
Branch: refs/heads/MNG-3507
Commit: 0f8b458f15892ce446665c5b683288fbef61b487
Parents: d413296
Author: Herv� Boutemy <hb...@apache.org>
Authored: Sun Jun 5 13:11:45 2016 +0200
Committer: Herv� Boutemy <hb...@apache.org>
Committed: Sun Jan 22 23:11:06 2017 +0100
----------------------------------------------------------------------
apache-maven/pom.xml | 4 +
apache-maven/src/bin/mvn | 1 +
apache-maven/src/bin/mvn.cmd | 2 +-
maven-core/pom.xml | 4 +
.../lifecycle/LifecycleExecutionException.java | 27 ++---
.../main/resources/META-INF/maven/extension.xml | 3 +
maven-embedder/pom.xml | 4 +
.../java/org/apache/maven/cli/CLIManager.java | 2 +-
.../org/apache/maven/cli/CLIReportingUtils.java | 6 +-
.../java/org/apache/maven/cli/MavenCli.java | 87 ++++++++++++--
.../maven/cli/event/ExecutionEventLogger.java | 119 +++++++++++--------
maven-embedder/src/site/apt/index.apt.vm | 5 +
pom.xml | 10 ++
13 files changed, 193 insertions(+), 81 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/maven/blob/0f8b458f/apache-maven/pom.xml
----------------------------------------------------------------------
diff --git a/apache-maven/pom.xml b/apache-maven/pom.xml
index 2db95cf..436aa9d 100644
--- a/apache-maven/pom.xml
+++ b/apache-maven/pom.xml
@@ -91,6 +91,10 @@
<groupId>org.slf4j</groupId>
<artifactId>slf4j-simple</artifactId>
</dependency>
+ <dependency>
+ <groupId>org.fusesource.jansi</groupId>
+ <artifactId>jansi</artifactId>
+ </dependency>
</dependencies>
<build>
http://git-wip-us.apache.org/repos/asf/maven/blob/0f8b458f/apache-maven/src/bin/mvn
----------------------------------------------------------------------
diff --git a/apache-maven/src/bin/mvn b/apache-maven/src/bin/mvn
index 6875628..f3acb73 100755
--- a/apache-maven/src/bin/mvn
+++ b/apache-maven/src/bin/mvn
@@ -241,4 +241,5 @@ exec "$JAVACMD" \
-classpath "${M2_HOME}"/boot/plexus-classworlds-*.jar \
"-Dclassworlds.conf=${M2_HOME}/bin/m2.conf" \
"-Dmaven.home=${M2_HOME}" "-Dmaven.multiModuleProjectDirectory=${MAVEN_PROJECTBASEDIR}" \
+ "-Dlibrary.jansi.path=${MAVEN_HOME}/lib/ext" \
${CLASSWORLDS_LAUNCHER} "$@"
http://git-wip-us.apache.org/repos/asf/maven/blob/0f8b458f/apache-maven/src/bin/mvn.cmd
----------------------------------------------------------------------
diff --git a/apache-maven/src/bin/mvn.cmd b/apache-maven/src/bin/mvn.cmd
index d35c1d2..5ad99ae 100644
--- a/apache-maven/src/bin/mvn.cmd
+++ b/apache-maven/src/bin/mvn.cmd
@@ -154,7 +154,7 @@ for %%i in ("%M2_HOME%"\boot\plexus-classworlds-*) do set CLASSWORLDS_JAR="%%i"
set CLASSWORLDS_LAUNCHER=org.codehaus.plexus.classworlds.launcher.Launcher
-%MAVEN_JAVA_EXE% %JVM_CONFIG_MAVEN_PROPS% %MAVEN_OPTS% %MAVEN_DEBUG_OPTS% -classpath %CLASSWORLDS_JAR% "-Dclassworlds.conf=%M2_HOME%\bin\m2.conf" "-Dmaven.home=%M2_HOME%" "-Dmaven.multiModuleProjectDirectory=%MAVEN_PROJECTBASEDIR%" %CLASSWORLDS_LAUNCHER% %MAVEN_CMD_LINE_ARGS%
+%MAVEN_JAVA_EXE% %JVM_CONFIG_MAVEN_PROPS% %MAVEN_OPTS% %MAVEN_DEBUG_OPTS% -classpath %CLASSWORLDS_JAR% "-Dclassworlds.conf=%M2_HOME%\bin\m2.conf" "-Dmaven.home=%M2_HOME%" "-Dmaven.multiModuleProjectDirectory=%MAVEN_PROJECTBASEDIR%" "-Dlibrary.jansi.path=%MAVEN_HOME%\lib\ext" %CLASSWORLDS_LAUNCHER% %MAVEN_CMD_LINE_ARGS%
if ERRORLEVEL 1 goto error
goto end
http://git-wip-us.apache.org/repos/asf/maven/blob/0f8b458f/maven-core/pom.xml
----------------------------------------------------------------------
diff --git a/maven-core/pom.xml b/maven-core/pom.xml
index ac1968b..efff5c1 100644
--- a/maven-core/pom.xml
+++ b/maven-core/pom.xml
@@ -75,6 +75,10 @@
<groupId>org.eclipse.aether</groupId>
<artifactId>aether-util</artifactId>
</dependency>
+ <dependency>
+ <groupId>org.apache.maven.shared</groupId>
+ <artifactId>maven-shared-utils</artifactId>
+ </dependency>
<!-- Plexus -->
<dependency>
<groupId>org.eclipse.sisu</groupId>
http://git-wip-us.apache.org/repos/asf/maven/blob/0f8b458f/maven-core/src/main/java/org/apache/maven/lifecycle/LifecycleExecutionException.java
----------------------------------------------------------------------
diff --git a/maven-core/src/main/java/org/apache/maven/lifecycle/LifecycleExecutionException.java b/maven-core/src/main/java/org/apache/maven/lifecycle/LifecycleExecutionException.java
index 349576c..62ae269 100644
--- a/maven-core/src/main/java/org/apache/maven/lifecycle/LifecycleExecutionException.java
+++ b/maven-core/src/main/java/org/apache/maven/lifecycle/LifecycleExecutionException.java
@@ -19,8 +19,11 @@ package org.apache.maven.lifecycle;
* under the License.
*/
+import static org.apache.maven.shared.utils.logging.MessageUtils.buffer;
+
import org.apache.maven.plugin.MojoExecution;
import org.apache.maven.project.MavenProject;
+import org.apache.maven.shared.utils.logging.MessageBuilder;
/**
* @author <a href="mailto:jason@maven.org">Jason van Zyl</a>
@@ -75,34 +78,26 @@ public class LifecycleExecutionException
private static String createMessage( MojoExecution execution, MavenProject project, Throwable cause )
{
- StringBuilder buffer = new StringBuilder( 256 );
+ MessageBuilder buffer = buffer( 256 );
- buffer.append( "Failed to execute goal" );
+ buffer.a( "Failed to execute goal" );
if ( execution != null )
{
- buffer.append( ' ' );
- buffer.append( execution.getGroupId() );
- buffer.append( ':' );
- buffer.append( execution.getArtifactId() );
- buffer.append( ':' );
- buffer.append( execution.getVersion() );
- buffer.append( ':' );
- buffer.append( execution.getGoal() );
- buffer.append( " (" );
- buffer.append( execution.getExecutionId() );
- buffer.append( ")" );
+ buffer.a( ' ' ).a( execution.getGroupId() ).a( ':' );
+ buffer.mojo( execution.getArtifactId() + ':' + execution.getVersion() + ':' + execution.getGoal() );
+ buffer.a( ' ' ).strong( '(' + execution.getExecutionId() + ')' );
}
if ( project != null )
{
- buffer.append( " on project " );
- buffer.append( project.getArtifactId() );
+ buffer.a( " on project " );
+ buffer.project( project.getArtifactId() );
}
if ( cause != null )
{
- buffer.append( ": " ).append( cause.getMessage() );
+ buffer.a( ": " ).failure( cause.getMessage() );
}
return buffer.toString();
http://git-wip-us.apache.org/repos/asf/maven/blob/0f8b458f/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/0f8b458f/maven-embedder/pom.xml
----------------------------------------------------------------------
diff --git a/maven-embedder/pom.xml b/maven-embedder/pom.xml
index e02e43d..04b8da6 100644
--- a/maven-embedder/pom.xml
+++ b/maven-embedder/pom.xml
@@ -47,6 +47,10 @@
<scope>runtime</scope>
</dependency>
<dependency>
+ <groupId>org.apache.maven.shared</groupId>
+ <artifactId>maven-shared-utils</artifactId>
+ </dependency>
+ <dependency>
<groupId>org.codehaus.plexus</groupId>
<artifactId>plexus-utils</artifactId>
</dependency>
http://git-wip-us.apache.org/repos/asf/maven/blob/0f8b458f/maven-embedder/src/main/java/org/apache/maven/cli/CLIManager.java
----------------------------------------------------------------------
diff --git a/maven-embedder/src/main/java/org/apache/maven/cli/CLIManager.java b/maven-embedder/src/main/java/org/apache/maven/cli/CLIManager.java
index f461835..b96e42e 100644
--- a/maven-embedder/src/main/java/org/apache/maven/cli/CLIManager.java
+++ b/maven-embedder/src/main/java/org/apache/maven/cli/CLIManager.java
@@ -118,7 +118,7 @@ public class CLIManager
options.addOption( OptionBuilder.withLongOpt( "non-recursive" ).withDescription( "Do not recurse into sub-projects" ).create( NON_RECURSIVE ) );
options.addOption( OptionBuilder.withLongOpt( "update-snapshots" ).withDescription( "Forces a check for missing releases and updated snapshots on remote repositories" ).create( UPDATE_SNAPSHOTS ) );
options.addOption( OptionBuilder.withLongOpt( "activate-profiles" ).withDescription( "Comma-delimited list of profiles to activate" ).hasArg().create( ACTIVATE_PROFILES ) );
- options.addOption( OptionBuilder.withLongOpt( "batch-mode" ).withDescription( "Run in non-interactive (batch) mode" ).create( BATCH_MODE ) );
+ options.addOption( OptionBuilder.withLongOpt( "batch-mode" ).withDescription( "Run in non-interactive (batch) mode (disables output color)" ).create( BATCH_MODE ) );
options.addOption( OptionBuilder.withLongOpt( "no-snapshot-updates" ).withDescription( "Suppress SNAPSHOT updates" ).create( SUPRESS_SNAPSHOT_UPDATES ) );
options.addOption( OptionBuilder.withLongOpt( "strict-checksums" ).withDescription( "Fail the build if checksums don't match" ).create( CHECKSUM_FAILURE_POLICY ) );
options.addOption( OptionBuilder.withLongOpt( "lax-checksums" ).withDescription( "Warn if checksums don't match" ).create( CHECKSUM_WARNING_POLICY ) );
http://git-wip-us.apache.org/repos/asf/maven/blob/0f8b458f/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 2397d5d..8c1e58a 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.apache.maven.shared.utils.logging.MessageUtils.buffer;
+
import org.codehaus.plexus.util.Os;
import org.slf4j.Logger;
@@ -54,8 +56,8 @@ public final class CLIReportingUtils
{
final String ls = System.getProperty( "line.separator" );
Properties properties = getBuildProperties();
- StringBuilder version = new StringBuilder();
- version.append( createMavenVersionString( properties ) ).append( ls );
+ StringBuilder version = new StringBuilder( 256 );
+ version.append( buffer().strong( createMavenVersionString( properties ) ) ).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/0f8b458f/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 176ce4d..5551ff9 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
@@ -19,6 +19,8 @@ package org.apache.maven.cli;
* under the License.
*/
+import static org.apache.maven.shared.utils.logging.MessageUtils.buffer;
+
import com.google.common.base.Charsets;
import com.google.common.io.Files;
import com.google.inject.AbstractModule;
@@ -62,6 +64,8 @@ import org.apache.maven.model.building.ModelProcessor;
import org.apache.maven.project.MavenProject;
import org.apache.maven.properties.internal.EnvironmentUtils;
import org.apache.maven.properties.internal.SystemProperties;
+import org.apache.maven.shared.utils.logging.MessageBuilder;
+import org.apache.maven.shared.utils.logging.MessageUtils;
import org.apache.maven.toolchain.building.DefaultToolchainsBuildingRequest;
import org.apache.maven.toolchain.building.ToolchainsBuilder;
import org.apache.maven.toolchain.building.ToolchainsBuildingResult;
@@ -107,6 +111,8 @@ import java.util.Map.Entry;
import java.util.Properties;
import java.util.Set;
import java.util.StringTokenizer;
+import java.util.regex.Matcher;
+import java.util.regex.Pattern;
// TODO: push all common bits back to plexus cli and prepare for transition to Guice. We don't need 50 ways to make CLIs
@@ -196,7 +202,12 @@ public class MavenCli
public static int main( String[] args, ClassWorld classWorld )
{
MavenCli cli = new MavenCli();
- return cli.doMain( new CliRequest( args, classWorld ) );
+
+ MessageUtils.systemInstall();
+ int result = cli.doMain( new CliRequest( args, classWorld ) );
+ MessageUtils.systemUninstall();
+
+ return result;
}
// TODO: need to externalize CliRequest
@@ -206,7 +217,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;
@@ -450,11 +465,18 @@ public class MavenCli
// else fall back to default log level specified in conf
// see https://issues.apache.org/jira/browse/MNG-2570
+ if ( cliRequest.commandLine.hasOption( CLIManager.BATCH_MODE ) )
+ {
+ MessageUtils.setColorEnabled( false );
+ }
+
if ( cliRequest.commandLine.hasOption( CLIManager.LOG_FILE ) )
{
File logFile = new File( cliRequest.commandLine.getOptionValue( CLIManager.LOG_FILE ) );
logFile = resolveFile( logFile, cliRequest.workingDirectory );
+ MessageUtils.setColorEnabled( false );
+
// redirect stdout and stderr to file
try
{
@@ -499,6 +521,26 @@ public class MavenCli
{
slf4jLogger.info( "Enabling strict checksum verification on all artifact downloads." );
}
+
+ if ( slf4jLogger.isDebugEnabled() )
+ {
+ slf4jLogger.debug( "Message scheme: " + ( MessageUtils.isColorEnabled() ? "color" : "plain" ) );
+ if ( MessageUtils.isColorEnabled() )
+ {
+ MessageBuilder buff = MessageUtils.buffer();
+ buff.a( "Message styles: " );
+ buff.debug( "debug" ).a( ' ' );
+ buff.info( "info" ).a( ' ' );
+ buff.warning( "warning" ).a( ' ' );
+ buff.error( "error" ).a( ' ' );
+ buff.success( "success" ).a( ' ' );
+ buff.failure( "failure" ).a( ' ' );
+ buff.strong( "strong" ).a( ' ' );
+ buff.mojo( "mojo" ).a( ' ' );
+ buff.project( "project" );
+ slf4jLogger.debug( buff.toString() );
+ }
+ }
}
private void properties( CliRequest cliRequest )
@@ -890,11 +932,13 @@ public class MavenCli
if ( !cliRequest.showErrors )
{
- slf4jLogger.error( "To see the full stack trace of the errors, re-run Maven with the -e switch." );
+ slf4jLogger.error( "To see the full stack trace of the errors, re-run Maven with the "
+ + buffer().strong( "-e" ) + " switch." );
}
if ( !slf4jLogger.isDebugEnabled() )
{
- slf4jLogger.error( "Re-run Maven using the -X switch to enable full debug logging." );
+ slf4jLogger.error( "Re-run Maven using the " + buffer().strong( "-X" )
+ + " switch to enable full debug logging." );
}
if ( !references.isEmpty() )
@@ -905,7 +949,7 @@ public class MavenCli
for ( Map.Entry<String, String> entry : references.entrySet() )
{
- slf4jLogger.error( entry.getValue() + " " + entry.getKey() );
+ slf4jLogger.error( buffer().strong( entry.getValue() ) + " " + entry.getKey() );
}
}
@@ -913,7 +957,8 @@ public class MavenCli
{
slf4jLogger.error( "" );
slf4jLogger.error( "After correcting the problems, you can resume the build with the command" );
- slf4jLogger.error( " mvn <goals> -rf :" + project.getArtifactId() );
+ slf4jLogger.error( buffer().a( " " ).strong( "mvn <goals> -rf :"
+ + project.getArtifactId() ).toString() );
}
if ( MavenExecutionRequest.REACTOR_FAIL_NEVER.equals( cliRequest.request.getReactorFailureBehavior() ) )
@@ -954,19 +999,37 @@ public class MavenCli
{
if ( msg.indexOf( '\n' ) < 0 )
{
- msg += " -> " + referenceKey;
+ msg += " -> " + buffer().strong( referenceKey );
}
else
{
- msg += "\n-> " + referenceKey;
+ msg += "\n-> " + buffer().strong( referenceKey );
}
}
String[] lines = msg.split( "(\r\n)|(\r)|(\n)" );
+ String currentColor = "";
for ( int i = 0; i < lines.length; i++ )
{
- String line = indent + lines[i].trim();
+ // add eventual current color inherited from previous line
+ String line = currentColor + lines[i];
+
+ // look for last ANSI escape sequence to check if nextColor
+ Matcher matcher = LAST_ANSI_SEQUENCE.matcher( line );
+ String nextColor = "";
+ if ( matcher.find() )
+ {
+ nextColor = matcher.group( 1 );
+ if ( ANSI_RESET.equals( nextColor ) )
+ {
+ // last ANSI escape code is reset: no next color
+ nextColor = "";
+ }
+ }
+
+ // effective line, with indent and reset if end is colored
+ line = indent + line + ( "".equals( nextColor ) ? "" : ANSI_RESET );
if ( ( i == lines.length - 1 ) && ( showErrors
|| ( summary.getException() instanceof InternalErrorException ) ) )
@@ -977,6 +1040,8 @@ public class MavenCli
{
slf4jLogger.error( line );
}
+
+ currentColor = nextColor;
}
indent += " ";
@@ -987,6 +1052,10 @@ public class MavenCli
}
}
+ private static final Pattern LAST_ANSI_SEQUENCE = Pattern.compile( "(\u001B\\[[;\\d]*[ -/]*[@-~])[^\u001B]*$" );
+
+ private static final String ANSI_RESET = "\u001B\u005Bm";
+
@SuppressWarnings( "checkstyle:methodlength" )
private void configure( CliRequest cliRequest )
throws Exception
http://git-wip-us.apache.org/repos/asf/maven/blob/0f8b458f/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 ce8d26c..25ec38d 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.apache.maven.shared.utils.logging.MessageUtils.buffer;
import org.apache.commons.lang3.Validate;
import org.apache.maven.execution.AbstractExecutionListener;
@@ -33,6 +34,7 @@ import org.apache.maven.execution.MavenSession;
import org.apache.maven.plugin.MojoExecution;
import org.apache.maven.plugin.descriptor.MojoDescriptor;
import org.apache.maven.project.MavenProject;
+import org.apache.maven.shared.utils.logging.MessageBuilder;
import org.codehaus.plexus.util.StringUtils;
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( buffer().strong( msg ).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( buffer().warning( "SKIPPED" ) );
}
else if ( buildSummary instanceof BuildSuccess )
{
- buffer.append( "SUCCESS [" );
+ buffer.append( buffer().success( "SUCCESS" ) );
+ 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( buffer().failure( "FAILURE" ) );
+ 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( '-' );
+ MessageBuilder buffer = buffer();
if ( session.getResult().hasExceptions() )
{
- logger.info( "BUILD FAILURE" );
+ buffer.failure( "BUILD FAILURE" );
}
else
{
- logger.info( "BUILD SUCCESS" );
+ buffer.success( "BUILD SUCCESS" );
}
+ logger.info( buffer.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,14 +280,13 @@ public class ExecutionEventLogger
{
if ( logger.isInfoEnabled() )
{
- StringBuilder buffer = new StringBuilder( 128 );
+ logger.info( "" );
- buffer.append( "--- " );
+ MessageBuilder buffer = buffer().strong( "--- " );
append( buffer, event.getMojoExecution() );
append( buffer, event.getProject() );
- buffer.append( " ---" );
+ buffer.strong( " ---" );
- logger.info( "" );
logger.info( buffer.toString() );
}
}
@@ -285,16 +300,15 @@ public class ExecutionEventLogger
{
if ( logger.isInfoEnabled() )
{
- StringBuilder buffer = new StringBuilder( 128 );
+ logger.info( "" );
- buffer.append( ">>> " );
+ MessageBuilder buffer = buffer().strong( ">>> " );
append( buffer, event.getMojoExecution() );
- buffer.append( " > " );
+ buffer.strong( " > " );
appendForkInfo( buffer, event.getMojoExecution().getMojoDescriptor() );
append( buffer, event.getProject() );
- buffer.append( " >>>" );
+ buffer.strong( " >>>" );
- logger.info( "" );
logger.info( buffer.toString() );
}
}
@@ -310,54 +324,56 @@ public class ExecutionEventLogger
{
if ( logger.isInfoEnabled() )
{
- StringBuilder buffer = new StringBuilder( 128 );
+ logger.info( "" );
- buffer.append( "<<< " );
+ MessageBuilder buffer = buffer().strong( "<<< " );
append( buffer, event.getMojoExecution() );
- buffer.append( " < " );
+ buffer.strong( " < " );
appendForkInfo( buffer, event.getMojoExecution().getMojoDescriptor() );
append( buffer, event.getProject() );
- buffer.append( " <<<" );
+ buffer.strong( " <<<" );
- logger.info( "" );
logger.info( buffer.toString() );
+
+ logger.info( "" );
}
}
- private void append( StringBuilder buffer, MojoExecution me )
+ private void append( MessageBuilder buffer, MojoExecution me )
{
- buffer.append( me.getArtifactId() ).append( ':' ).append( me.getVersion() );
- buffer.append( ':' ).append( me.getGoal() );
+ buffer.mojo( me.getArtifactId() + ':' + me.getVersion() + ':' + me.getGoal() );
if ( me.getExecutionId() != null )
{
- buffer.append( " (" ).append( me.getExecutionId() ).append( ')' );
+ buffer.a( ' ' ).strong( '(' + me.getExecutionId() + ')' );
}
}
- private void appendForkInfo( StringBuilder buffer, MojoDescriptor md )
+ private void appendForkInfo( MessageBuilder buffer, MojoDescriptor md )
{
+ StringBuilder buff = new StringBuilder();
if ( StringUtils.isNotEmpty( md.getExecutePhase() ) )
{
// forked phase
if ( StringUtils.isNotEmpty( md.getExecuteLifecycle() ) )
{
- buffer.append( '[' );
- buffer.append( md.getExecuteLifecycle() );
- buffer.append( ']' );
+ buff.append( '[' );
+ buff.append( md.getExecuteLifecycle() );
+ buff.append( ']' );
}
- buffer.append( md.getExecutePhase() );
+ buff.append( md.getExecutePhase() );
}
else
{
// forked goal
- buffer.append( ':' );
- buffer.append( md.getExecuteGoal() );
+ buff.append( ':' );
+ buff.append( md.getExecuteGoal() );
}
+ buffer.strong( buff.toString() );
}
- private void append( StringBuilder buffer, MavenProject project )
+ private void append( MessageBuilder buffer, MavenProject project )
{
- buffer.append( " @ " ).append( project.getArtifactId() );
+ buffer.a( " @ " ).project( project.getArtifactId() );
}
@Override
@@ -365,13 +381,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/0f8b458f/maven-embedder/src/site/apt/index.apt.vm
----------------------------------------------------------------------
diff --git a/maven-embedder/src/site/apt/index.apt.vm b/maven-embedder/src/site/apt/index.apt.vm
index 519fdae..17220c9 100644
--- a/maven-embedder/src/site/apt/index.apt.vm
+++ b/maven-embedder/src/site/apt/index.apt.vm
@@ -40,3 +40,8 @@ ${project.name}
* <<<.mvn/maven.config>>> containing Maven command-line parameter,
* <<<.mvn/extensions.xml>>> containing {{{./core-extensions.html}a list of extensions}}.
+
+ * since 3.5.0, output is colorized by default, with color disabled in batch mode: see
+ {{{/shared/maven-shared-utils/apidocs/org/apache/maven/shared/utils/logging/package-summary.html}styled message API}}
+ for more details.
+
\ No newline at end of file
http://git-wip-us.apache.org/repos/asf/maven/blob/0f8b458f/pom.xml
----------------------------------------------------------------------
diff --git a/pom.xml b/pom.xml
index 8ea9b29..f8b67aa 100644
--- a/pom.xml
+++ b/pom.xml
@@ -267,6 +267,16 @@
<version>${plexusInterpolationVersion}</version>
</dependency>
<dependency>
+ <groupId>org.apache.maven.shared</groupId>
+ <artifactId>maven-shared-utils</artifactId>
+ <version>3.1.0</version>
+ </dependency>
+ <dependency>
+ <groupId>org.fusesource.jansi</groupId>
+ <artifactId>jansi</artifactId>
+ <version>1.13</version>
+ </dependency>
+ <dependency>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-api</artifactId>
<version>${slf4jVersion}</version>
[2/2] maven git commit: [MNG-6093] use monkey patched slf4j-simple
provider with Maven color
Posted by hb...@apache.org.
[MNG-6093] use monkey patched slf4j-simple provider with Maven color
Project: http://git-wip-us.apache.org/repos/asf/maven/repo
Commit: http://git-wip-us.apache.org/repos/asf/maven/commit/716a5966
Tree: http://git-wip-us.apache.org/repos/asf/maven/tree/716a5966
Diff: http://git-wip-us.apache.org/repos/asf/maven/diff/716a5966
Branch: refs/heads/MNG-3507
Commit: 716a5966128a3cfc93996a2ab78ab9035327fab9
Parents: 0f8b458
Author: Herv� Boutemy <hb...@apache.org>
Authored: Thu Sep 22 17:46:53 2016 +0200
Committer: Herv� Boutemy <hb...@apache.org>
Committed: Sun Jan 22 23:11:29 2017 +0100
----------------------------------------------------------------------
apache-maven/pom.xml | 4 +-
.../maven/slf4j-configuration.properties | 1 +
maven-slf4j-provider/pom.xml | 116 ++++++++++++++++++
.../java/org/slf4j/impl/MavenSimpleLogger.java | 117 +++++++++++++++++++
.../slf4j/impl/MavenSimpleLoggerFactory.java | 44 +++++++
.../src/main/script/patch-slf4j-simple.groovy | 53 +++++++++
maven-slf4j-provider/src/site/site.xml | 36 ++++++
pom.xml | 6 +
src/site/xdoc/index.xml | 2 +
9 files changed, 377 insertions(+), 2 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/maven/blob/716a5966/apache-maven/pom.xml
----------------------------------------------------------------------
diff --git a/apache-maven/pom.xml b/apache-maven/pom.xml
index 436aa9d..3b77250 100644
--- a/apache-maven/pom.xml
+++ b/apache-maven/pom.xml
@@ -88,8 +88,8 @@
<artifactId>aether-transport-wagon</artifactId>
</dependency>
<dependency>
- <groupId>org.slf4j</groupId>
- <artifactId>slf4j-simple</artifactId>
+ <groupId>org.apache.maven</groupId>
+ <artifactId>maven-slf4j-provider</artifactId>
</dependency>
<dependency>
<groupId>org.fusesource.jansi</groupId>
http://git-wip-us.apache.org/repos/asf/maven/blob/716a5966/maven-embedder/src/main/resources/META-INF/maven/slf4j-configuration.properties
----------------------------------------------------------------------
diff --git a/maven-embedder/src/main/resources/META-INF/maven/slf4j-configuration.properties b/maven-embedder/src/main/resources/META-INF/maven/slf4j-configuration.properties
index 8741836..ae1bc39 100644
--- a/maven-embedder/src/main/resources/META-INF/maven/slf4j-configuration.properties
+++ b/maven-embedder/src/main/resources/META-INF/maven/slf4j-configuration.properties
@@ -18,5 +18,6 @@
# key = Slf4j effective logger factory implementation
# value = corresponding o.a.m.cli.logging.Slf4jConfiguration class
org.slf4j.impl.SimpleLoggerFactory org.apache.maven.cli.logging.impl.Slf4jSimpleConfiguration
+org.slf4j.impl.MavenSimpleLoggerFactory org.apache.maven.cli.logging.impl.Slf4jSimpleConfiguration
org.slf4j.helpers.Log4jLoggerFactory org.apache.maven.cli.logging.impl.Log4j2Configuration
ch.qos.logback.classic.LoggerContext org.apache.maven.cli.logging.impl.LogbackConfiguration
http://git-wip-us.apache.org/repos/asf/maven/blob/716a5966/maven-slf4j-provider/pom.xml
----------------------------------------------------------------------
diff --git a/maven-slf4j-provider/pom.xml b/maven-slf4j-provider/pom.xml
new file mode 100644
index 0000000..81af382
--- /dev/null
+++ b/maven-slf4j-provider/pom.xml
@@ -0,0 +1,116 @@
+<?xml version="1.0" encoding="UTF-8"?>
+
+<!--
+Licensed to the Apache Software Foundation (ASF) under one
+or more contributor license agreements. See the NOTICE file
+distributed with this work for additional information
+regarding copyright ownership. The ASF licenses this file
+to you under the Apache License, Version 2.0 (the
+"License"); you may not use this file except in compliance
+with the License. You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+Unless required by applicable law or agreed to in writing,
+software distributed under the License is distributed on an
+"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+KIND, either express or implied. See the License for the
+specific language governing permissions and limitations
+under the License.
+-->
+
+<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
+ <modelVersion>4.0.0</modelVersion>
+
+ <parent>
+ <groupId>org.apache.maven</groupId>
+ <artifactId>maven</artifactId>
+ <version>3.5.0-SNAPSHOT</version>
+ </parent>
+
+ <artifactId>maven-slf4j-provider</artifactId>
+
+ <name>Maven SLF4J Simple Provider</name>
+ <description>
+ Maven SLF4J provider based on SLF4J's simple provider, monkey-patched to support Maven styled colors
+ for levels and stacktraces rendering.
+ </description>
+
+ <dependencies>
+ <dependency>
+ <groupId>org.slf4j</groupId>
+ <artifactId>slf4j-api</artifactId>
+ </dependency>
+ <dependency>
+ <groupId>org.apache.maven.shared</groupId>
+ <artifactId>maven-shared-utils</artifactId>
+ </dependency>
+ </dependencies>
+
+ <build>
+ <plugins>
+ <plugin>
+ <groupId>org.apache.maven.plugins</groupId>
+ <artifactId>maven-dependency-plugin</artifactId>
+ <configuration>
+ <artifactItems>
+ <artifactItem>
+ <groupId>org.slf4j</groupId>
+ <artifactId>slf4j-simple</artifactId>
+ <version>${slf4jVersion}</version>
+ <type>jar</type>
+ <classifier>sources</classifier>
+ <overWrite>false</overWrite>
+ <outputDirectory>${project.build.directory}/generated-sources/slf4j-simple</outputDirectory>
+ <includes>org/slf4j/impl/*.java</includes>
+ </artifactItem>
+ </artifactItems>
+ </configuration>
+ <executions>
+ <execution>
+ <id>unzip-slf4j-simple</id>
+ <goals>
+ <goal>unpack</goal>
+ </goals>
+ </execution>
+ </executions>
+ </plugin>
+ <plugin>
+ <groupId>org.codehaus.mojo</groupId>
+ <artifactId>build-helper-maven-plugin</artifactId>
+ <version>1.12</version>
+ <executions>
+ <execution>
+ <id>add-slf4j-simple</id>
+ <phase>generate-sources</phase>
+ <goals>
+ <goal>add-source</goal>
+ </goals>
+ <configuration>
+ <sources>
+ <source>${project.build.directory}/generated-sources/slf4j-simple</source>
+ </sources>
+ </configuration>
+ </execution>
+ </executions>
+ </plugin>
+ <plugin>
+ <groupId>org.codehaus.gmaven</groupId>
+ <artifactId>groovy-maven-plugin</artifactId>
+ <version>2.0</version>
+ <executions>
+ <execution>
+ <id>patch-slf4j-simple</id>
+ <phase>process-sources</phase>
+ <goals>
+ <goal>execute</goal>
+ </goals>
+ <configuration>
+ <source>${project.basedir}/src/main/script/patch-slf4j-simple.groovy</source>
+ </configuration>
+ </execution>
+ </executions>
+ </plugin>
+ </plugins>
+ </build>
+</project>
\ No newline at end of file
http://git-wip-us.apache.org/repos/asf/maven/blob/716a5966/maven-slf4j-provider/src/main/java/org/slf4j/impl/MavenSimpleLogger.java
----------------------------------------------------------------------
diff --git a/maven-slf4j-provider/src/main/java/org/slf4j/impl/MavenSimpleLogger.java b/maven-slf4j-provider/src/main/java/org/slf4j/impl/MavenSimpleLogger.java
new file mode 100644
index 0000000..500fd96
--- /dev/null
+++ b/maven-slf4j-provider/src/main/java/org/slf4j/impl/MavenSimpleLogger.java
@@ -0,0 +1,117 @@
+package org.slf4j.impl;
+
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+import static org.apache.maven.shared.utils.logging.MessageUtils.buffer;
+
+import java.io.PrintStream;
+
+/**
+ * Logger for Maven, that support colorization of levels and stacktraces.
+ * This class implements 2 methods introduced in slf4j-simple provider local copy.
+ * @since 3.5.0
+ */
+public class MavenSimpleLogger
+ extends SimpleLogger
+{
+ private static final String NEWLINE = System.getProperty( "line.separator" );
+
+ MavenSimpleLogger( String name )
+ {
+ super( name );
+ }
+
+ @Override
+ protected String renderLevel( int level )
+ {
+ switch ( level )
+ {
+ case LOG_LEVEL_TRACE:
+ return buffer().debug( "TRACE" ).toString();
+ case LOG_LEVEL_DEBUG:
+ return buffer().debug( "DEBUG" ).toString();
+ case LOG_LEVEL_INFO:
+ return buffer().info( "INFO" ).toString();
+ case LOG_LEVEL_WARN:
+ return buffer().warning( "WARNING" ).toString();
+ case LOG_LEVEL_ERROR:
+ default:
+ return buffer().error( "ERROR" ).toString();
+ }
+ }
+
+ @Override
+ protected void renderThrowable( Throwable t, PrintStream stream )
+ {
+ stream.append( buffer().failure( t.getClass().getName() ).toString() );
+ if ( t.getMessage() != null )
+ {
+ stream.append( ": " );
+ stream.append( buffer().failure( t.getMessage() ).toString() );
+ }
+ stream.append( NEWLINE );
+
+ while ( t != null )
+ {
+ for ( StackTraceElement e : t.getStackTrace() )
+ {
+ stream.append( " " );
+ stream.append( buffer().strong( "at" ).toString() );
+ stream.append( " " + e.getClassName() + "." + e.getMethodName() );
+ stream.append( buffer().a( " (" ).strong( getLocation( e ) ).a( ")" ).toString() );
+ stream.append( NEWLINE );
+ }
+
+ t = t.getCause();
+ if ( t != null )
+ {
+ stream.append( buffer().strong( "Caused by" ).a( ": " ).a( t.getClass().getName() ).toString() );
+ if ( t.getMessage() != null )
+ {
+ stream.append( ": " );
+ stream.append( buffer().failure( t.getMessage() ).toString() );
+ }
+ stream.append( NEWLINE );
+ }
+ }
+ }
+
+ protected String getLocation( final StackTraceElement e )
+ {
+ assert e != null;
+
+ if ( e.isNativeMethod() )
+ {
+ return "Native Method";
+ }
+ else if ( e.getFileName() == null )
+ {
+ return "Unknown Source";
+ }
+ else if ( e.getLineNumber() >= 0 )
+ {
+ return String.format( "%s:%s", e.getFileName(), e.getLineNumber() );
+ }
+ else
+ {
+ return e.getFileName();
+ }
+ }
+}
http://git-wip-us.apache.org/repos/asf/maven/blob/716a5966/maven-slf4j-provider/src/main/java/org/slf4j/impl/MavenSimpleLoggerFactory.java
----------------------------------------------------------------------
diff --git a/maven-slf4j-provider/src/main/java/org/slf4j/impl/MavenSimpleLoggerFactory.java b/maven-slf4j-provider/src/main/java/org/slf4j/impl/MavenSimpleLoggerFactory.java
new file mode 100644
index 0000000..d56e346
--- /dev/null
+++ b/maven-slf4j-provider/src/main/java/org/slf4j/impl/MavenSimpleLoggerFactory.java
@@ -0,0 +1,44 @@
+package org.slf4j.impl;
+
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+import org.slf4j.Logger;
+
+public class MavenSimpleLoggerFactory
+ extends SimpleLoggerFactory
+{
+ /**
+ * Return an appropriate {@link MavenSimpleLogger} instance by name.
+ */
+ public Logger getLogger( String name )
+ {
+ Logger simpleLogger = loggerMap.get( name );
+ if ( simpleLogger != null )
+ {
+ return simpleLogger;
+ }
+ else
+ {
+ Logger newInstance = new MavenSimpleLogger( name );
+ Logger oldInstance = loggerMap.putIfAbsent( name, newInstance );
+ return oldInstance == null ? newInstance : oldInstance;
+ }
+ }
+}
http://git-wip-us.apache.org/repos/asf/maven/blob/716a5966/maven-slf4j-provider/src/main/script/patch-slf4j-simple.groovy
----------------------------------------------------------------------
diff --git a/maven-slf4j-provider/src/main/script/patch-slf4j-simple.groovy b/maven-slf4j-provider/src/main/script/patch-slf4j-simple.groovy
new file mode 100644
index 0000000..bba8646
--- /dev/null
+++ b/maven-slf4j-provider/src/main/script/patch-slf4j-simple.groovy
@@ -0,0 +1,53 @@
+
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+dir = new File( basedir, 'target/generated-sources/slf4j-simple/org/slf4j/impl' );
+
+file = new File( dir, 'StaticLoggerBinder.java' );
+content = file.text;
+
+// check if already patched
+if ( content.contains( 'MavenSimpleLoggerFactory' ) )
+{
+ println ' slf4j-simple already patched';
+ return;
+}
+
+
+println ' patching StaticLoggerBinder.java';
+content = content.replaceAll( 'SimpleLoggerFactory', 'MavenSimpleLoggerFactory' );
+file.write( content );
+
+
+println ' patching SimpleLogger.java';
+file = new File( dir, 'SimpleLogger.java' );
+content = file.text;
+content = content.replaceAll( 'private static final int LOG_LEVEL_', 'protected static final int LOG_LEVEL_' );
+content = content.replaceAll( 't.printStackTrace(TARGET_STREAM)', 'renderThrowable(t, TARGET_STREAM);' );
+
+index = content.indexOf( 'switch (level) {' );
+end = content.indexOf( '}', index ) + 1;
+content = content.substring( 0, index ) + 'buf.append(renderLevel(level));' + content.substring( end );
+
+content = content.substring( 0, content.lastIndexOf( '}' ) );
+content += ' protected void renderThrowable(Throwable t, PrintStream stream) {}\n';
+content += ' protected String renderLevel(int level) { return ""; }\n}\n';
+
+file.write( content );
http://git-wip-us.apache.org/repos/asf/maven/blob/716a5966/maven-slf4j-provider/src/site/site.xml
----------------------------------------------------------------------
diff --git a/maven-slf4j-provider/src/site/site.xml b/maven-slf4j-provider/src/site/site.xml
new file mode 100644
index 0000000..3a16bf9
--- /dev/null
+++ b/maven-slf4j-provider/src/site/site.xml
@@ -0,0 +1,36 @@
+<?xml version="1.0" encoding="UTF-8"?>
+
+<!--
+Licensed to the Apache Software Foundation (ASF) under one
+or more contributor license agreements. See the NOTICE file
+distributed with this work for additional information
+regarding copyright ownership. The ASF licenses this file
+to you under the Apache License, Version 2.0 (the
+"License"); you may not use this file except in compliance
+with the License. You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+Unless required by applicable law or agreed to in writing,
+software distributed under the License is distributed on an
+"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+KIND, either express or implied. See the License for the
+specific language governing permissions and limitations
+under the License.
+-->
+
+<project xmlns="http://maven.apache.org/DECORATION/1.0.0"
+ xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+ xsi:schemaLocation="http://maven.apache.org/DECORATION/1.0.0 http://maven.apache.org/xsd/decoration-1.0.0.xsd">
+ <body>
+ <menu name="Overview">
+ <item name="Introduction" href="index.html"/>
+ <item name="JavaDocs" href="apidocs/index.html"/>
+ <item name="Source Xref" href="xref/index.html"/>
+ <!--item name="FAQ" href="faq.html"/-->
+ </menu>
+
+ <menu ref="parent"/>
+ <menu ref="reports"/>
+ </body>
+</project>
\ No newline at end of file
http://git-wip-us.apache.org/repos/asf/maven/blob/716a5966/pom.xml
----------------------------------------------------------------------
diff --git a/pom.xml b/pom.xml
index f8b67aa..fba262b 100644
--- a/pom.xml
+++ b/pom.xml
@@ -84,6 +84,7 @@
<module>maven-artifact</module>
<module>maven-aether-provider</module>
<module>maven-repository-metadata</module>
+ <module>maven-slf4j-provider</module>
<module>maven-embedder</module>
<module>maven-compat</module>
<module>apache-maven</module>
@@ -217,6 +218,11 @@
<artifactId>maven-builder-support</artifactId>
<version>${project.version}</version>
</dependency>
+ <dependency>
+ <groupId>org.apache.maven</groupId>
+ <artifactId>maven-slf4j-provider</artifactId>
+ <version>${project.version}</version>
+ </dependency>
<!--bootstrap-end-comment-->
<!-- Plexus -->
<dependency>
http://git-wip-us.apache.org/repos/asf/maven/blob/716a5966/src/site/xdoc/index.xml
----------------------------------------------------------------------
diff --git a/src/site/xdoc/index.xml b/src/site/xdoc/index.xml
index b98b4ee..11fa0de 100644
--- a/src/site/xdoc/index.xml
+++ b/src/site/xdoc/index.xml
@@ -55,6 +55,8 @@
<area shape="rect" coords="446,234,537,269" alt="maven-settings" href="maven-settings/" />
<area shape="rect" coords="388,284,521,319" alt="maven-model-builder" href="maven-model-builder/" />
<area shape="rect" coords="409,342,500,378" alt="maven-model" href="maven-model/" />
+ <area shape="rect" coords="TODO" alt="maven-slf4j-provider" href="maven-slf4j-provider/" />
+ <area shape="rect" coords="88,59,192,94" alt="slf4j-api" href="http://www.slf4j.org/manual.html" />
<area shape="rect" coords="551,58,707,94" alt="commons-cli" href="http://commons.apache.org/cli/" />
<area shape="rect" coords="551,116,739,152" alt="wagon-provider-api" href="http://maven.apache.org/wagon/wagon-provider-api/" />
<area shape="rect" coords="550,175,690,211" alt="plexus-sec-dispatcher" href="https://github.com/codehaus-plexus/plexus-sec-dispatcher" />