o Fixed repo logging to go consistently through listener

git-svn-id: https://svn.apache.org/repos/asf/maven/maven-3/trunk@998715 13f79535-47bb-0310-9956-ffa450edef68
This commit is contained in:
Benjamin Bentmann 2010-09-19 18:54:25 +00:00
parent 3bbe5bcd80
commit 11afa6961f
8 changed files with 221 additions and 146 deletions

View File

@ -73,6 +73,7 @@
import org.sonatype.aether.resolution.ArtifactResult;
import org.sonatype.aether.resolution.VersionRequest;
import org.sonatype.aether.resolution.VersionResolutionException;
import org.sonatype.aether.resolution.VersionResult;
import org.sonatype.aether.spi.locator.Service;
import org.sonatype.aether.spi.locator.ServiceLocator;
import org.sonatype.aether.spi.log.Logger;
@ -221,7 +222,9 @@ private Model loadPom( RepositorySystemSession session, ArtifactDescriptorReques
{
VersionRequest versionRequest =
new VersionRequest( artifact, request.getRepositories(), request.getRequestContext() );
versionResolver.resolveVersion( session, versionRequest );
VersionResult versionResult = versionResolver.resolveVersion( session, versionRequest );
artifact = artifact.setVersion( versionResult.getVersion() );
}
catch ( VersionResolutionException e )
{

View File

@ -19,7 +19,6 @@
* under the License.
*/
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.util.ArrayList;
@ -46,7 +45,6 @@
import org.sonatype.aether.impl.VersionRangeResolver;
import org.sonatype.aether.metadata.Metadata;
import org.sonatype.aether.repository.ArtifactRepository;
import org.sonatype.aether.repository.LocalRepositoryManager;
import org.sonatype.aether.repository.RemoteRepository;
import org.sonatype.aether.repository.WorkspaceReader;
import org.sonatype.aether.resolution.MetadataRequest;
@ -160,12 +158,16 @@ private Map<String, ArtifactRepository> getVersions( RepositorySystemSession ses
MAVEN_METADATA_XML, Metadata.Nature.RELEASE_OR_SNAPSHOT );
List<MetadataRequest> metadataRequests = new ArrayList<MetadataRequest>( request.getRepositories().size() );
metadataRequests.add( new MetadataRequest( metadata, null, request.getRequestContext() ) );
for ( RemoteRepository repository : request.getRepositories() )
{
MetadataRequest metadataRequest = new MetadataRequest( metadata, repository, request.getRequestContext() );
metadataRequest.setDeleteLocalCopyIfMissing( true );
metadataRequests.add( metadataRequest );
}
List<MetadataResult> metadataResults = metadataResolver.resolveMetadata( session, metadataRequests );
WorkspaceReader workspace = session.getWorkspaceReader();
@ -178,30 +180,22 @@ private Map<String, ArtifactRepository> getVersions( RepositorySystemSession ses
}
}
LocalRepositoryManager lrm = session.getLocalRepositoryManager();
File localMetadataFile = new File( lrm.getRepository().getBasedir(), lrm.getPathForLocalMetadata( metadata ) );
if ( localMetadataFile.isFile() )
{
metadata = metadata.setFile( localMetadataFile );
Versioning versioning = readVersions( session, metadata, result );
for ( String version : versioning.getVersions() )
{
if ( !versionIndex.containsKey( version ) )
{
versionIndex.put( version, lrm.getRepository() );
}
}
}
for ( MetadataResult metadataResult : metadataResults )
{
result.addException( metadataResult.getException() );
Versioning versioning = readVersions( session, metadataResult.getMetadata(), result );
ArtifactRepository repository = metadataResult.getRequest().getRepository();
if ( repository == null )
{
repository = session.getLocalRepository();
}
Versioning versioning = readVersions( session, metadataResult.getMetadata(), repository, result );
for ( String version : versioning.getVersions() )
{
if ( !versionIndex.containsKey( version ) )
{
versionIndex.put( version, metadataResult.getRequest().getRepository() );
versionIndex.put( version, repository );
}
}
}
@ -209,7 +203,8 @@ private Map<String, ArtifactRepository> getVersions( RepositorySystemSession ses
return versionIndex;
}
private Versioning readVersions( RepositorySystemSession session, Metadata metadata, VersionRangeResult result )
private Versioning readVersions( RepositorySystemSession session, Metadata metadata, ArtifactRepository repository,
VersionRangeResult result )
{
Versioning versioning = null;
@ -229,7 +224,7 @@ private Versioning readVersions( RepositorySystemSession session, Metadata metad
}
catch ( Exception e )
{
invalidMetadata( session, metadata, e );
invalidMetadata( session, metadata, repository, e );
result.addException( e );
}
finally
@ -240,13 +235,15 @@ private Versioning readVersions( RepositorySystemSession session, Metadata metad
return ( versioning != null ) ? versioning : new Versioning();
}
private void invalidMetadata( RepositorySystemSession session, Metadata metadata, Exception exception )
private void invalidMetadata( RepositorySystemSession session, Metadata metadata, ArtifactRepository repository,
Exception exception )
{
RepositoryListener listener = session.getRepositoryListener();
if ( listener != null )
{
DefaultRepositoryEvent event = new DefaultRepositoryEvent( session, metadata );
event.setException( exception );
event.setRepository( repository );
listener.metadataInvalid( event );
}
}

View File

@ -49,7 +49,6 @@
import org.sonatype.aether.impl.internal.CacheUtils;
import org.sonatype.aether.metadata.Metadata;
import org.sonatype.aether.repository.ArtifactRepository;
import org.sonatype.aether.repository.LocalRepositoryManager;
import org.sonatype.aether.repository.RemoteRepository;
import org.sonatype.aether.repository.WorkspaceReader;
import org.sonatype.aether.repository.WorkspaceRepository;
@ -174,6 +173,9 @@ else if ( version.endsWith( SNAPSHOT ) )
else
{
List<MetadataRequest> metadataRequests = new ArrayList<MetadataRequest>( request.getRepositories().size() );
metadataRequests.add( new MetadataRequest( metadata, null, request.getRequestContext() ) );
for ( RemoteRepository repository : request.getRepositories() )
{
MetadataRequest metadataRequest =
@ -182,25 +184,23 @@ else if ( version.endsWith( SNAPSHOT ) )
metadataRequest.setFavorLocalRepository( true );
metadataRequests.add( metadataRequest );
}
List<MetadataResult> metadataResults = metadataResolver.resolveMetadata( session, metadataRequests );
LocalRepositoryManager lrm = session.getLocalRepositoryManager();
File localMetadataFile =
new File( lrm.getRepository().getBasedir(), lrm.getPathForLocalMetadata( metadata ) );
if ( localMetadataFile.isFile() )
{
metadata = metadata.setFile( localMetadataFile );
}
Map<String, VersionInfo> infos = new HashMap<String, VersionInfo>();
merge( artifact, infos, readVersions( session, metadata, result ),
session.getLocalRepositoryManager().getRepository() );
for ( MetadataResult metadataResult : metadataResults )
{
result.addException( metadataResult.getException() );
merge( artifact, infos, readVersions( session, metadataResult.getMetadata(), result ),
metadataResult.getRequest().getRepository() );
ArtifactRepository repository = metadataResult.getRequest().getRepository();
if ( repository == null )
{
repository = session.getLocalRepository();
}
Versioning versioning = readVersions( session, metadataResult.getMetadata(), repository, result );
merge( artifact, infos, versioning, repository );
}
if ( RELEASE.equals( version ) )
@ -269,7 +269,8 @@ private boolean resolve( VersionResult result, Map<String, VersionInfo> infos, S
return info != null;
}
private Versioning readVersions( RepositorySystemSession session, Metadata metadata, VersionResult result )
private Versioning readVersions( RepositorySystemSession session, Metadata metadata, ArtifactRepository repository,
VersionResult result )
{
Versioning versioning = null;
@ -289,7 +290,7 @@ private Versioning readVersions( RepositorySystemSession session, Metadata metad
}
catch ( Exception e )
{
invalidMetadata( session, metadata, e );
invalidMetadata( session, metadata, repository, e );
result.addException( e );
}
finally
@ -300,13 +301,15 @@ private Versioning readVersions( RepositorySystemSession session, Metadata metad
return ( versioning != null ) ? versioning : new Versioning();
}
private void invalidMetadata( RepositorySystemSession session, Metadata metadata, Exception exception )
private void invalidMetadata( RepositorySystemSession session, Metadata metadata, ArtifactRepository repository,
Exception exception )
{
RepositoryListener listener = session.getRepositoryListener();
if ( listener != null )
{
DefaultRepositoryEvent event = new DefaultRepositoryEvent( session, metadata );
event.setException( exception );
event.setRepository( repository );
listener.metadataInvalid( event );
}
}

View File

@ -96,7 +96,6 @@
import org.sonatype.aether.util.graph.transformer.JavaDependencyContextRefiner;
import org.sonatype.aether.util.graph.transformer.JavaEffectiveScopeCalculator;
import org.sonatype.aether.util.graph.traverser.FatArtifactTraverser;
import org.sonatype.aether.util.listener.AbstractRepositoryListener;
import org.sonatype.aether.util.repository.ChainedWorkspaceReader;
import org.sonatype.aether.util.repository.DefaultAuthenticationSelector;
import org.sonatype.aether.util.repository.DefaultMirrorSelector;
@ -421,43 +420,7 @@ public RepositorySystemSession newRepositorySession( MavenExecutionRequest reque
session.setTransferListener( request.getTransferListener() );
session.setRepositoryListener( new AbstractRepositoryListener()
{
@Override
public void artifactInstalling( RepositoryEvent event )
{
logger.info( "Installing " + event.getArtifact().getFile() + " to " + event.getFile() );
}
@Override
public void metadataInstalling( RepositoryEvent event )
{
logger.debug( "Installing " + event.getMetadata() + " to " + event.getFile() );
}
@Override
public void artifactDescriptorInvalid( RepositoryEvent event )
{
if ( logger.isDebugEnabled() )
{
logger.warn( "The POM for " + event.getArtifact() + " is invalid"
+ ", transitive dependencies (if any) will not be available: "
+ event.getException().getMessage() );
}
else
{
logger.warn( "The POM for " + event.getArtifact() + " is invalid"
+ ", transitive dependencies (if any) will not be available"
+ ", enable debug logging for more details" );
}
}
@Override
public void artifactDescriptorMissing( RepositoryEvent event )
{
logger.warn( "The POM for " + event.getArtifact() + " is missing, no dependency information available" );
}
} );
session.setRepositoryListener( new LoggingRepositoryListener( logger ) );
return session;
}

View File

@ -0,0 +1,128 @@
package org.apache.maven;
/*
* 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.codehaus.plexus.logging.Logger;
import org.sonatype.aether.RepositoryEvent;
import org.sonatype.aether.transfer.MetadataNotFoundException;
import org.sonatype.aether.util.listener.AbstractRepositoryListener;
/**
* @author Benjamin Bentmann
*/
class LoggingRepositoryListener
extends AbstractRepositoryListener
{
private final Logger logger;
public LoggingRepositoryListener( Logger logger )
{
this.logger = logger;
}
@Override
public void artifactInstalling( RepositoryEvent event )
{
logger.info( "Installing " + event.getArtifact().getFile() + " to " + event.getFile() );
}
@Override
public void metadataInstalling( RepositoryEvent event )
{
logger.debug( "Installing " + event.getMetadata() + " to " + event.getFile() );
}
@Override
public void metadataResolved( RepositoryEvent event )
{
Exception e = event.getException();
if ( e != null )
{
if ( e instanceof MetadataNotFoundException )
{
logger.debug( e.getMessage() );
}
else if ( logger.isDebugEnabled() )
{
logger.warn( e.getMessage(), e );
}
else
{
logger.warn( e.getMessage() );
}
}
}
@Override
public void metadataInvalid( RepositoryEvent event )
{
StringBuilder buffer = new StringBuilder( 256 );
buffer.append( "The metadata " );
if ( event.getMetadata().getFile() != null )
{
buffer.append( event.getMetadata().getFile() );
}
else
{
buffer.append( event.getMetadata() );
}
buffer.append( " is invalid" );
if ( event.getException() != null )
{
buffer.append( ": " );
buffer.append( event.getException().getMessage() );
}
if ( logger.isDebugEnabled() )
{
logger.warn( buffer.toString(), event.getException() );
}
else
{
logger.warn( buffer.toString() );
}
}
@Override
public void artifactDescriptorInvalid( RepositoryEvent event )
{
StringBuilder buffer = new StringBuilder( 256 );
buffer.append( "The POM for " );
buffer.append( event.getArtifact() );
buffer.append( " is invalid, transitive dependencies (if any) will not be available" );
if ( logger.isDebugEnabled() )
{
logger.warn( buffer + ": " + event.getException().getMessage() );
}
else
{
logger.warn( buffer + ", enable debug logging for more details" );
}
}
@Override
public void artifactDescriptorMissing( RepositoryEvent event )
{
logger.warn( "The POM for " + event.getArtifact() + " is missing, no dependency information available" );
}
}

View File

@ -19,7 +19,6 @@
* under the License.
*/
import java.io.File;
import java.io.IOException;
import java.util.ArrayList;
import java.util.Collections;
@ -39,14 +38,16 @@
import org.codehaus.plexus.component.annotations.Component;
import org.codehaus.plexus.component.annotations.Requirement;
import org.codehaus.plexus.logging.Logger;
import org.sonatype.aether.RepositoryListener;
import org.sonatype.aether.RepositorySystem;
import org.sonatype.aether.RepositorySystemSession;
import org.sonatype.aether.repository.ArtifactRepository;
import org.sonatype.aether.repository.RemoteRepository;
import org.sonatype.aether.repository.RepositoryPolicy;
import org.sonatype.aether.resolution.MetadataRequest;
import org.sonatype.aether.resolution.MetadataResult;
import org.sonatype.aether.transfer.MetadataNotFoundException;
import org.sonatype.aether.util.DefaultRepositorySystemSession;
import org.sonatype.aether.util.listener.DefaultRepositoryEvent;
import org.sonatype.aether.util.metadata.DefaultMetadata;
/**
@ -207,25 +208,6 @@ private PluginPrefixResult processResults( PluginPrefixRequest request, List<Met
{
for ( MetadataResult res : results )
{
if ( res.getException() != null )
{
if ( res.getException() instanceof MetadataNotFoundException )
{
logger.debug( "Could not find " + res.getRequest().getMetadata() + " in "
+ res.getRequest().getRepository() );
}
else if ( logger.isDebugEnabled() )
{
logger.warn( "Could not retrieve " + res.getRequest().getMetadata() + " from "
+ res.getRequest().getRepository() + ": " + res.getException().getMessage(), res.getException() );
}
else
{
logger.warn( "Could not retrieve " + res.getRequest().getMetadata() + " from "
+ res.getRequest().getRepository() + ": " + res.getException().getMessage() );
}
}
org.sonatype.aether.metadata.Metadata metadata = res.getMetadata();
if ( metadata != null )
@ -237,7 +219,7 @@ else if ( logger.isDebugEnabled() )
}
PluginPrefixResult result =
resolveFromRepository( request, metadata.getGroupId(), metadata.getFile(), repository );
resolveFromRepository( request, metadata.getGroupId(), metadata, repository );
if ( result != null )
{
@ -255,15 +237,16 @@ else if ( logger.isDebugEnabled() )
}
private PluginPrefixResult resolveFromRepository( PluginPrefixRequest request, String pluginGroup,
File metadataFile, ArtifactRepository repository )
org.sonatype.aether.metadata.Metadata metadata,
ArtifactRepository repository )
{
if ( metadataFile != null && metadataFile.isFile() )
if ( metadata != null && metadata.getFile() != null && metadata.getFile().isFile() )
{
try
{
Map<String, ?> options = Collections.singletonMap( MetadataReader.IS_STRICT, Boolean.FALSE );
Metadata pluginGroupMetadata = metadataReader.read( metadataFile, options );
Metadata pluginGroupMetadata = metadataReader.read( metadata.getFile(), options );
List<org.apache.maven.artifact.repository.metadata.Plugin> plugins = pluginGroupMetadata.getPlugins();
@ -280,18 +263,24 @@ private PluginPrefixResult resolveFromRepository( PluginPrefixRequest request, S
}
catch ( IOException e )
{
if ( logger.isDebugEnabled() )
{
logger.warn( "Error reading plugin group metadata: " + e.getMessage(), e );
}
else
{
logger.warn( "Error reading plugin group metadata: " + e.getMessage() );
}
invalidMetadata( request.getRepositorySession(), metadata, repository, e );
}
}
return null;
}
private void invalidMetadata( RepositorySystemSession session, org.sonatype.aether.metadata.Metadata metadata,
ArtifactRepository repository, Exception exception )
{
RepositoryListener listener = session.getRepositoryListener();
if ( listener != null )
{
DefaultRepositoryEvent event = new DefaultRepositoryEvent( session, metadata );
event.setException( exception );
event.setRepository( repository );
listener.metadataInvalid( event );
}
}
}

View File

@ -19,7 +19,6 @@
* under the License.
*/
import java.io.File;
import java.io.IOException;
import java.util.ArrayList;
import java.util.Collections;
@ -39,13 +38,15 @@
import org.codehaus.plexus.component.annotations.Requirement;
import org.codehaus.plexus.logging.Logger;
import org.codehaus.plexus.util.StringUtils;
import org.sonatype.aether.RepositoryListener;
import org.sonatype.aether.RepositorySystem;
import org.sonatype.aether.RepositorySystemSession;
import org.sonatype.aether.repository.ArtifactRepository;
import org.sonatype.aether.repository.LocalRepository;
import org.sonatype.aether.repository.RemoteRepository;
import org.sonatype.aether.resolution.MetadataRequest;
import org.sonatype.aether.resolution.MetadataResult;
import org.sonatype.aether.transfer.MetadataNotFoundException;
import org.sonatype.aether.util.listener.DefaultRepositoryEvent;
import org.sonatype.aether.util.metadata.DefaultMetadata;
/**
@ -122,29 +123,13 @@ private PluginVersionResult resolveFromRepository( PluginVersionRequest request
for ( MetadataResult res : results )
{
if ( res.getException() != null )
ArtifactRepository repository = res.getRequest().getRepository();
if ( repository == null )
{
if ( res.getException() instanceof MetadataNotFoundException )
{
logger.debug( "Could not find " + res.getRequest().getMetadata() + " in "
+ res.getRequest().getRepository() );
}
else if ( logger.isDebugEnabled() )
{
logger.warn( "Could not retrieve " + res.getRequest().getMetadata() + " from "
+ res.getRequest().getRepository() + ": " + res.getException().getMessage(), res.getException() );
}
else
{
logger.warn( "Could not retrieve " + res.getRequest().getMetadata() + " from "
+ res.getRequest().getRepository() + ": " + res.getException().getMessage() );
}
repository = request.getRepositorySession().getLocalRepository();
}
if ( res.getMetadata() != null )
{
mergeMetadata( versions, res.getMetadata().getFile(), res.getRequest().getRepository() );
}
mergeMetadata( request.getRepositorySession(), versions, res.getMetadata(), repository );
}
if ( StringUtils.isNotEmpty( versions.releaseVersion ) )
@ -167,32 +152,39 @@ else if ( StringUtils.isNotEmpty( versions.latestVersion ) )
return result;
}
private void mergeMetadata( Versions versions, File metadataFile, ArtifactRepository repository )
private void mergeMetadata( RepositorySystemSession session, Versions versions,
org.sonatype.aether.metadata.Metadata metadata, ArtifactRepository repository )
{
if ( metadataFile != null && metadataFile.isFile() )
if ( metadata != null && metadata.getFile() != null && metadata.getFile().isFile() )
{
try
{
Map<String, ?> options = Collections.singletonMap( MetadataReader.IS_STRICT, Boolean.FALSE );
Metadata repoMetadata = metadataReader.read( metadataFile, options );
Metadata repoMetadata = metadataReader.read( metadata.getFile(), options );
mergeMetadata( versions, repoMetadata, repository );
}
catch ( IOException e )
{
if ( logger.isDebugEnabled() )
{
logger.warn( "Failed to read metadata " + metadataFile + ": " + e.getMessage(), e );
}
else
{
logger.warn( "Failed to read metadata " + metadataFile + ": " + e.getMessage() );
}
invalidMetadata( session, metadata, repository, e );
}
}
}
private void invalidMetadata( RepositorySystemSession session, org.sonatype.aether.metadata.Metadata metadata,
ArtifactRepository repository, Exception exception )
{
RepositoryListener listener = session.getRepositoryListener();
if ( listener != null )
{
DefaultRepositoryEvent event = new DefaultRepositoryEvent( session, metadata );
event.setException( exception );
event.setRepository( repository );
listener.metadataInvalid( event );
}
}
private void mergeMetadata( Versions versions, Metadata source, ArtifactRepository repository )
{
Versioning versioning = source.getVersioning();

View File

@ -48,7 +48,7 @@ public void transferInitiated( TransferEvent event )
public void transferSucceeded( TransferEvent event )
{
TransferResource artifact = event.getResource();
TransferResource resource = event.getResource();
long contentLength = event.getTransferredBytes();
if ( contentLength >= 0 )
{
@ -56,7 +56,7 @@ public void transferSucceeded( TransferEvent event )
String len = contentLength >= 1024 ? toKB( contentLength ) + " KB" : contentLength + " B";
String throughput = "";
long duration = System.currentTimeMillis() - artifact.getTransferStartTime();
long duration = System.currentTimeMillis() - resource.getTransferStartTime();
if ( duration > 0 )
{
DecimalFormat format = new DecimalFormat( "0.0", new DecimalFormatSymbols( Locale.ENGLISH ) );
@ -64,7 +64,7 @@ public void transferSucceeded( TransferEvent event )
throughput = " at " + format.format( kbPerSec ) + " KB/sec";
}
out.println( type + ": " + artifact.getRepositoryUrl() + artifact.getResourceName() + " (" + len
out.println( type + ": " + resource.getRepositoryUrl() + resource.getResourceName() + " (" + len
+ throughput + ")" );
}
}