mirror of https://github.com/apache/maven.git
[MNG-3507] added color to Maven execution output messages
This commit is contained in:
parent
8b66162052
commit
b80915b882
|
@ -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>
|
||||
|
|
|
@ -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} "$@"
|
||||
|
|
|
@ -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
|
||||
|
||||
|
|
|
@ -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>
|
||||
|
|
|
@ -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();
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -46,6 +46,10 @@
|
|||
<artifactId>maven-compat</artifactId>
|
||||
<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>
|
||||
|
|
|
@ -108,7 +108,7 @@ public class CLIManager
|
|||
{
|
||||
options = new Options();
|
||||
options.addOption( OptionBuilder.withLongOpt( "help" ).withDescription( "Display help information" ).create( HELP ) );
|
||||
options.addOption( OptionBuilder.withLongOpt( "file" ).hasArg().withDescription( "Force the use of an alternate POM file (or directory with pom.xml)." ).create( ALTERNATE_POM_FILE ) );
|
||||
options.addOption( OptionBuilder.withLongOpt( "file" ).hasArg().withDescription( "Force the use of an alternate POM file (or directory with pom.xml, disables output color)" ).create( ALTERNATE_POM_FILE ) );
|
||||
options.addOption( OptionBuilder.withLongOpt( "define" ).hasArg().withDescription( "Define a system property" ).create( SET_SYSTEM_PROPERTY ) );
|
||||
options.addOption( OptionBuilder.withLongOpt( "offline" ).withDescription( "Work offline" ).create( OFFLINE ) );
|
||||
options.addOption( OptionBuilder.withLongOpt( "version" ).withDescription( "Display version information" ).create( VERSION ) );
|
||||
|
@ -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 ) );
|
||||
|
|
|
@ -19,6 +19,8 @@ package org.apache.maven.cli;
|
|||
* under the License.
|
||||
*/
|
||||
|
||||
import static org.apache.maven.shared.utils.logging.MessageUtils.buffer;
|
||||
|
||||
import java.io.IOException;
|
||||
import java.io.InputStream;
|
||||
import java.text.SimpleDateFormat;
|
||||
|
@ -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 "
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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,56 +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
|
||||
|
@ -367,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( '>' );
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
|
|
@ -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.
|
||||
|
10
pom.xml
10
pom.xml
|
@ -266,6 +266,16 @@
|
|||
<artifactId>plexus-interpolation</artifactId>
|
||||
<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>
|
||||
|
|
Loading…
Reference in New Issue