mirror of https://github.com/apache/maven.git
MNG-5374: Fix transfer listener after the JSR330 merge
For the following cases I have done the following: 1) Logging to the console: I simply restored the class that was there such that when logging to the console it uses System.out as it did and the d ownload progress appears as it did. 2) Logging in batch mode: the batch mode transfer listener uses an SLF4J logger and the batch mode transfer listener doesn't report download progr ess so there is no issue. Download progress would just create a bunch of noise. The size and the speed at which it is downloaded are logged. 3) Logging to a file: same as 2) except it's all diverted to the specified file. 4) I created two protected methods in MavenCli so that integrators can supply their own console and batch transfer listeners if they wish. git-svn-id: https://svn.apache.org/repos/asf/maven/maven-3/trunk@1407913 13f79535-47bb-0310-9956-ffa450edef68
This commit is contained in:
parent
ed3893b188
commit
d698618204
|
@ -21,6 +21,7 @@
|
||||||
|
|
||||||
import java.io.File;
|
import java.io.File;
|
||||||
import java.io.FileNotFoundException;
|
import java.io.FileNotFoundException;
|
||||||
|
import java.io.FileOutputStream;
|
||||||
import java.io.PrintStream;
|
import java.io.PrintStream;
|
||||||
import java.util.ArrayList;
|
import java.util.ArrayList;
|
||||||
import java.util.Arrays;
|
import java.util.Arrays;
|
||||||
|
@ -43,6 +44,7 @@
|
||||||
import org.apache.maven.cli.transfer.BatchModeMavenTransferListener;
|
import org.apache.maven.cli.transfer.BatchModeMavenTransferListener;
|
||||||
import org.apache.maven.cli.transfer.ConsoleMavenTransferListener;
|
import org.apache.maven.cli.transfer.ConsoleMavenTransferListener;
|
||||||
import org.apache.maven.cli.transfer.QuietMavenTransferListener;
|
import org.apache.maven.cli.transfer.QuietMavenTransferListener;
|
||||||
|
import org.apache.maven.cli.transfer.Slf4jMavenTransferListener;
|
||||||
import org.apache.maven.eventspy.internal.EventSpyDispatcher;
|
import org.apache.maven.eventspy.internal.EventSpyDispatcher;
|
||||||
import org.apache.maven.exception.DefaultExceptionHandler;
|
import org.apache.maven.exception.DefaultExceptionHandler;
|
||||||
import org.apache.maven.exception.ExceptionHandler;
|
import org.apache.maven.exception.ExceptionHandler;
|
||||||
|
@ -320,6 +322,15 @@ else if ( cliRequest.quiet )
|
||||||
File logFile = new File( cliRequest.commandLine.getOptionValue( CLIManager.LOG_FILE ) );
|
File logFile = new File( cliRequest.commandLine.getOptionValue( CLIManager.LOG_FILE ) );
|
||||||
logFile = resolveFile( logFile, cliRequest.workingDirectory );
|
logFile = resolveFile( logFile, cliRequest.workingDirectory );
|
||||||
System.setProperty("org.slf4j.simpleLogger.logFile", logFile.getAbsolutePath());
|
System.setProperty("org.slf4j.simpleLogger.logFile", logFile.getAbsolutePath());
|
||||||
|
try {
|
||||||
|
PrintStream ps = new PrintStream(new FileOutputStream(logFile));
|
||||||
|
System.setOut(ps);
|
||||||
|
System.setErr(ps);
|
||||||
|
} catch (FileNotFoundException e) {
|
||||||
|
//
|
||||||
|
// Ignore
|
||||||
|
//
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
plexusLoggerManager = new Slf4jLoggerManager();
|
plexusLoggerManager = new Slf4jLoggerManager();
|
||||||
|
@ -872,14 +883,18 @@ else if ( profileAction.startsWith( "+" ) )
|
||||||
if ( quiet )
|
if ( quiet )
|
||||||
{
|
{
|
||||||
transferListener = new QuietMavenTransferListener();
|
transferListener = new QuietMavenTransferListener();
|
||||||
}
|
}
|
||||||
else if ( request.isInteractiveMode() )
|
else if ( request.isInteractiveMode() && !cliRequest.commandLine.hasOption( CLIManager.LOG_FILE ))
|
||||||
{
|
{
|
||||||
transferListener = new ConsoleMavenTransferListener( slf4jLogger );
|
//
|
||||||
|
// If we're logging to a file then we don't want the console transfer listener as it will spew
|
||||||
|
// download progress all over the place
|
||||||
|
//
|
||||||
|
transferListener = getConsoleTransferListener();
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
transferListener = new BatchModeMavenTransferListener( slf4jLogger );
|
transferListener = getBatchTransferListener();
|
||||||
}
|
}
|
||||||
|
|
||||||
ExecutionListener executionListener = new ExecutionEventLogger( slf4jLogger );
|
ExecutionListener executionListener = new ExecutionEventLogger( slf4jLogger );
|
||||||
|
@ -1136,26 +1151,21 @@ public ExitException( int exitCode )
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
private PrintStreamLogger setupLogger( int loggingLevel )
|
|
||||||
{
|
|
||||||
PrintStreamLogger logger = new PrintStreamLogger( new PrintStreamLogger.Provider()
|
|
||||||
{
|
|
||||||
public PrintStream getStream()
|
|
||||||
{
|
|
||||||
return System.out;
|
|
||||||
}
|
|
||||||
} );
|
|
||||||
|
|
||||||
logger.setThreshold( loggingLevel );
|
|
||||||
|
|
||||||
return logger;
|
|
||||||
}
|
|
||||||
|
|
||||||
//
|
//
|
||||||
// Customizations available via the CLI
|
// Customizations available via the CLI
|
||||||
//
|
//
|
||||||
|
|
||||||
|
protected TransferListener getConsoleTransferListener()
|
||||||
|
{
|
||||||
|
return new ConsoleMavenTransferListener( System.out );
|
||||||
|
}
|
||||||
|
|
||||||
|
protected TransferListener getBatchTransferListener()
|
||||||
|
{
|
||||||
|
return new Slf4jMavenTransferListener( slf4jLogger );
|
||||||
|
}
|
||||||
|
|
||||||
protected void customizeContainer( PlexusContainer container )
|
protected void customizeContainer( PlexusContainer container )
|
||||||
{
|
{
|
||||||
}
|
}
|
||||||
|
|
|
@ -19,11 +19,11 @@
|
||||||
* under the License.
|
* under the License.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
import java.io.PrintStream;
|
||||||
import java.text.DecimalFormat;
|
import java.text.DecimalFormat;
|
||||||
import java.text.DecimalFormatSymbols;
|
import java.text.DecimalFormatSymbols;
|
||||||
import java.util.Locale;
|
import java.util.Locale;
|
||||||
|
|
||||||
import org.slf4j.Logger;
|
|
||||||
import org.sonatype.aether.transfer.AbstractTransferListener;
|
import org.sonatype.aether.transfer.AbstractTransferListener;
|
||||||
import org.sonatype.aether.transfer.TransferCancelledException;
|
import org.sonatype.aether.transfer.TransferCancelledException;
|
||||||
import org.sonatype.aether.transfer.TransferEvent;
|
import org.sonatype.aether.transfer.TransferEvent;
|
||||||
|
@ -33,13 +33,11 @@ public abstract class AbstractMavenTransferListener
|
||||||
extends AbstractTransferListener
|
extends AbstractTransferListener
|
||||||
{
|
{
|
||||||
|
|
||||||
protected Logger out;
|
protected PrintStream out;
|
||||||
//protected PrintStream out;
|
|
||||||
|
|
||||||
protected AbstractMavenTransferListener( Logger out )
|
protected AbstractMavenTransferListener( PrintStream out )
|
||||||
{
|
{
|
||||||
this.out = out;
|
this.out = out;
|
||||||
//this.out = ( out != null ) ? out : System.out;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
@ -47,7 +45,7 @@ public void transferInitiated( TransferEvent event )
|
||||||
{
|
{
|
||||||
String message = event.getRequestType() == TransferEvent.RequestType.PUT ? "Uploading" : "Downloading";
|
String message = event.getRequestType() == TransferEvent.RequestType.PUT ? "Uploading" : "Downloading";
|
||||||
|
|
||||||
out.info( message + ": " + event.getResource().getRepositoryUrl() + event.getResource().getResourceName() );
|
out.println( message + ": " + event.getResource().getRepositoryUrl() + event.getResource().getResourceName() );
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
@ -56,7 +54,7 @@ public void transferCorrupted( TransferEvent event )
|
||||||
{
|
{
|
||||||
TransferResource resource = event.getResource();
|
TransferResource resource = event.getResource();
|
||||||
|
|
||||||
out.warn( "[WARNING] " + event.getException().getMessage() + " for " + resource.getRepositoryUrl()
|
out.println( "[WARNING] " + event.getException().getMessage() + " for " + resource.getRepositoryUrl()
|
||||||
+ resource.getResourceName() );
|
+ resource.getResourceName() );
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -79,7 +77,7 @@ public void transferSucceeded( TransferEvent event )
|
||||||
throughput = " at " + format.format( kbPerSec ) + " KB/sec";
|
throughput = " at " + format.format( kbPerSec ) + " KB/sec";
|
||||||
}
|
}
|
||||||
|
|
||||||
out.info( type + ": " + resource.getRepositoryUrl() + resource.getResourceName() + " (" + len
|
out.println( type + ": " + resource.getRepositoryUrl() + resource.getResourceName() + " (" + len
|
||||||
+ throughput + ")" );
|
+ throughput + ")" );
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,5 +1,7 @@
|
||||||
package org.apache.maven.cli.transfer;
|
package org.apache.maven.cli.transfer;
|
||||||
|
|
||||||
|
import java.io.PrintStream;
|
||||||
|
|
||||||
import org.slf4j.Logger;
|
import org.slf4j.Logger;
|
||||||
|
|
||||||
/*
|
/*
|
||||||
|
@ -24,7 +26,7 @@
|
||||||
public class BatchModeMavenTransferListener
|
public class BatchModeMavenTransferListener
|
||||||
extends AbstractMavenTransferListener
|
extends AbstractMavenTransferListener
|
||||||
{
|
{
|
||||||
public BatchModeMavenTransferListener( Logger out )
|
public BatchModeMavenTransferListener( PrintStream out )
|
||||||
{
|
{
|
||||||
super( out );
|
super( out );
|
||||||
}
|
}
|
||||||
|
|
|
@ -19,10 +19,10 @@
|
||||||
* under the License.
|
* under the License.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
import java.io.PrintStream;
|
||||||
import java.util.Map;
|
import java.util.Map;
|
||||||
import java.util.concurrent.ConcurrentHashMap;
|
import java.util.concurrent.ConcurrentHashMap;
|
||||||
|
|
||||||
import org.slf4j.Logger;
|
|
||||||
import org.sonatype.aether.transfer.TransferCancelledException;
|
import org.sonatype.aether.transfer.TransferCancelledException;
|
||||||
import org.sonatype.aether.transfer.TransferEvent;
|
import org.sonatype.aether.transfer.TransferEvent;
|
||||||
import org.sonatype.aether.transfer.TransferResource;
|
import org.sonatype.aether.transfer.TransferResource;
|
||||||
|
@ -40,7 +40,7 @@ public class ConsoleMavenTransferListener
|
||||||
|
|
||||||
private int lastLength;
|
private int lastLength;
|
||||||
|
|
||||||
public ConsoleMavenTransferListener( Logger out )
|
public ConsoleMavenTransferListener( PrintStream out )
|
||||||
{
|
{
|
||||||
super( out );
|
super( out );
|
||||||
}
|
}
|
||||||
|
@ -70,7 +70,7 @@ public void transferProgressed( TransferEvent event )
|
||||||
pad( buffer, pad );
|
pad( buffer, pad );
|
||||||
buffer.append( '\r' );
|
buffer.append( '\r' );
|
||||||
|
|
||||||
out.info( buffer.toString() );
|
out.print( buffer.toString() );
|
||||||
}
|
}
|
||||||
|
|
||||||
private String getStatus( long complete, long total )
|
private String getStatus( long complete, long total )
|
||||||
|
@ -127,7 +127,7 @@ private void transferCompleted( TransferEvent event )
|
||||||
StringBuilder buffer = new StringBuilder( 64 );
|
StringBuilder buffer = new StringBuilder( 64 );
|
||||||
pad( buffer, lastLength );
|
pad( buffer, lastLength );
|
||||||
buffer.append( '\r' );
|
buffer.append( '\r' );
|
||||||
out.info( buffer.toString() );
|
out.print( buffer.toString() );
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
|
@ -0,0 +1,89 @@
|
||||||
|
package org.apache.maven.cli.transfer;
|
||||||
|
|
||||||
|
/*
|
||||||
|
* 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 java.text.DecimalFormat;
|
||||||
|
import java.text.DecimalFormatSymbols;
|
||||||
|
import java.util.Locale;
|
||||||
|
|
||||||
|
import org.slf4j.Logger;
|
||||||
|
import org.sonatype.aether.transfer.AbstractTransferListener;
|
||||||
|
import org.sonatype.aether.transfer.TransferCancelledException;
|
||||||
|
import org.sonatype.aether.transfer.TransferEvent;
|
||||||
|
import org.sonatype.aether.transfer.TransferResource;
|
||||||
|
|
||||||
|
public class Slf4jMavenTransferListener
|
||||||
|
extends AbstractTransferListener
|
||||||
|
{
|
||||||
|
|
||||||
|
protected Logger out;
|
||||||
|
|
||||||
|
public Slf4jMavenTransferListener( Logger out )
|
||||||
|
{
|
||||||
|
this.out = out;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void transferInitiated( TransferEvent event )
|
||||||
|
{
|
||||||
|
String message = event.getRequestType() == TransferEvent.RequestType.PUT ? "Uploading" : "Downloading";
|
||||||
|
|
||||||
|
out.info( message + ": " + event.getResource().getRepositoryUrl() + event.getResource().getResourceName() );
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void transferCorrupted( TransferEvent event )
|
||||||
|
throws TransferCancelledException
|
||||||
|
{
|
||||||
|
TransferResource resource = event.getResource();
|
||||||
|
|
||||||
|
out.warn( event.getException().getMessage() + " for " + resource.getRepositoryUrl() + resource.getResourceName() );
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void transferSucceeded( TransferEvent event )
|
||||||
|
{
|
||||||
|
TransferResource resource = event.getResource();
|
||||||
|
long contentLength = event.getTransferredBytes();
|
||||||
|
if ( contentLength >= 0 )
|
||||||
|
{
|
||||||
|
String type = ( event.getRequestType() == TransferEvent.RequestType.PUT ? "Uploaded" : "Downloaded" );
|
||||||
|
String len = contentLength >= 1024 ? toKB( contentLength ) + " KB" : contentLength + " B";
|
||||||
|
|
||||||
|
String throughput = "";
|
||||||
|
long duration = System.currentTimeMillis() - resource.getTransferStartTime();
|
||||||
|
if ( duration > 0 )
|
||||||
|
{
|
||||||
|
DecimalFormat format = new DecimalFormat( "0.0", new DecimalFormatSymbols( Locale.ENGLISH ) );
|
||||||
|
double kbPerSec = ( contentLength / 1024.0 ) / ( duration / 1000.0 );
|
||||||
|
throughput = " at " + format.format( kbPerSec ) + " KB/sec";
|
||||||
|
}
|
||||||
|
|
||||||
|
out.info( type + ": " + resource.getRepositoryUrl() + resource.getResourceName() + " (" + len
|
||||||
|
+ throughput + ")" );
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
protected long toKB( long bytes )
|
||||||
|
{
|
||||||
|
return ( bytes + 1023 ) / 1024;
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
Loading…
Reference in New Issue