You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@maven.apache.org by hb...@apache.org on 2016/09/03 20:24:01 UTC
[38/51] [partial] maven-aether git commit: [MNG-6007] rename Aether
to Maven Artifact Resolver
http://git-wip-us.apache.org/repos/asf/maven-aether/blob/27f8bd73/aether-impl/src/main/java/org/eclipse/aether/internal/impl/DefaultArtifactResolver.java
----------------------------------------------------------------------
diff --git a/aether-impl/src/main/java/org/eclipse/aether/internal/impl/DefaultArtifactResolver.java b/aether-impl/src/main/java/org/eclipse/aether/internal/impl/DefaultArtifactResolver.java
deleted file mode 100644
index 37d296e..0000000
--- a/aether-impl/src/main/java/org/eclipse/aether/internal/impl/DefaultArtifactResolver.java
+++ /dev/null
@@ -1,773 +0,0 @@
-package org.eclipse.aether.internal.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 java.io.File;
-import java.io.IOException;
-import java.util.ArrayList;
-import java.util.Collection;
-import java.util.Collections;
-import java.util.Iterator;
-import java.util.List;
-import java.util.concurrent.atomic.AtomicBoolean;
-
-import javax.inject.Inject;
-import javax.inject.Named;
-
-import org.eclipse.aether.RepositoryEvent;
-import org.eclipse.aether.RepositoryEvent.EventType;
-import org.eclipse.aether.RepositorySystemSession;
-import org.eclipse.aether.RequestTrace;
-import org.eclipse.aether.SyncContext;
-import org.eclipse.aether.artifact.Artifact;
-import org.eclipse.aether.artifact.ArtifactProperties;
-import org.eclipse.aether.impl.ArtifactResolver;
-import org.eclipse.aether.impl.OfflineController;
-import org.eclipse.aether.impl.RemoteRepositoryManager;
-import org.eclipse.aether.impl.RepositoryConnectorProvider;
-import org.eclipse.aether.impl.RepositoryEventDispatcher;
-import org.eclipse.aether.impl.SyncContextFactory;
-import org.eclipse.aether.impl.UpdateCheck;
-import org.eclipse.aether.impl.UpdateCheckManager;
-import org.eclipse.aether.impl.VersionResolver;
-import org.eclipse.aether.repository.ArtifactRepository;
-import org.eclipse.aether.repository.LocalArtifactRegistration;
-import org.eclipse.aether.repository.LocalArtifactRequest;
-import org.eclipse.aether.repository.LocalArtifactResult;
-import org.eclipse.aether.repository.LocalRepository;
-import org.eclipse.aether.repository.LocalRepositoryManager;
-import org.eclipse.aether.repository.RemoteRepository;
-import org.eclipse.aether.repository.RepositoryPolicy;
-import org.eclipse.aether.repository.WorkspaceReader;
-import org.eclipse.aether.resolution.ArtifactRequest;
-import org.eclipse.aether.resolution.ArtifactResolutionException;
-import org.eclipse.aether.resolution.ArtifactResult;
-import org.eclipse.aether.resolution.ResolutionErrorPolicy;
-import org.eclipse.aether.resolution.VersionRequest;
-import org.eclipse.aether.resolution.VersionResolutionException;
-import org.eclipse.aether.resolution.VersionResult;
-import org.eclipse.aether.spi.connector.ArtifactDownload;
-import org.eclipse.aether.spi.connector.RepositoryConnector;
-import org.eclipse.aether.spi.io.FileProcessor;
-import org.eclipse.aether.spi.locator.Service;
-import org.eclipse.aether.spi.locator.ServiceLocator;
-import org.eclipse.aether.spi.log.Logger;
-import org.eclipse.aether.spi.log.LoggerFactory;
-import org.eclipse.aether.spi.log.NullLoggerFactory;
-import org.eclipse.aether.transfer.ArtifactNotFoundException;
-import org.eclipse.aether.transfer.ArtifactTransferException;
-import org.eclipse.aether.transfer.NoRepositoryConnectorException;
-import org.eclipse.aether.transfer.RepositoryOfflineException;
-import org.eclipse.aether.util.ConfigUtils;
-
-/**
- */
-@Named
-public class DefaultArtifactResolver
- implements ArtifactResolver, Service
-{
-
- private static final String CONFIG_PROP_SNAPSHOT_NORMALIZATION = "aether.artifactResolver.snapshotNormalization";
-
- private Logger logger = NullLoggerFactory.LOGGER;
-
- private FileProcessor fileProcessor;
-
- private RepositoryEventDispatcher repositoryEventDispatcher;
-
- private VersionResolver versionResolver;
-
- private UpdateCheckManager updateCheckManager;
-
- private RepositoryConnectorProvider repositoryConnectorProvider;
-
- private RemoteRepositoryManager remoteRepositoryManager;
-
- private SyncContextFactory syncContextFactory;
-
- private OfflineController offlineController;
-
- public DefaultArtifactResolver()
- {
- // enables default constructor
- }
-
- @Inject
- DefaultArtifactResolver( FileProcessor fileProcessor, RepositoryEventDispatcher repositoryEventDispatcher,
- VersionResolver versionResolver, UpdateCheckManager updateCheckManager,
- RepositoryConnectorProvider repositoryConnectorProvider,
- RemoteRepositoryManager remoteRepositoryManager, SyncContextFactory syncContextFactory,
- OfflineController offlineController, LoggerFactory loggerFactory )
- {
- setFileProcessor( fileProcessor );
- setRepositoryEventDispatcher( repositoryEventDispatcher );
- setVersionResolver( versionResolver );
- setUpdateCheckManager( updateCheckManager );
- setRepositoryConnectorProvider( repositoryConnectorProvider );
- setRemoteRepositoryManager( remoteRepositoryManager );
- setSyncContextFactory( syncContextFactory );
- setOfflineController( offlineController );
- setLoggerFactory( loggerFactory );
- }
-
- public void initService( ServiceLocator locator )
- {
- setLoggerFactory( locator.getService( LoggerFactory.class ) );
- setFileProcessor( locator.getService( FileProcessor.class ) );
- setRepositoryEventDispatcher( locator.getService( RepositoryEventDispatcher.class ) );
- setVersionResolver( locator.getService( VersionResolver.class ) );
- setUpdateCheckManager( locator.getService( UpdateCheckManager.class ) );
- setRepositoryConnectorProvider( locator.getService( RepositoryConnectorProvider.class ) );
- setRemoteRepositoryManager( locator.getService( RemoteRepositoryManager.class ) );
- setSyncContextFactory( locator.getService( SyncContextFactory.class ) );
- setOfflineController( locator.getService( OfflineController.class ) );
- }
-
- public DefaultArtifactResolver setLoggerFactory( LoggerFactory loggerFactory )
- {
- this.logger = NullLoggerFactory.getSafeLogger( loggerFactory, getClass() );
- return this;
- }
-
- public DefaultArtifactResolver setFileProcessor( FileProcessor fileProcessor )
- {
- if ( fileProcessor == null )
- {
- throw new IllegalArgumentException( "file processor has not been specified" );
- }
- this.fileProcessor = fileProcessor;
- return this;
- }
-
- public DefaultArtifactResolver setRepositoryEventDispatcher( RepositoryEventDispatcher repositoryEventDispatcher )
- {
- if ( repositoryEventDispatcher == null )
- {
- throw new IllegalArgumentException( "repository event dispatcher has not been specified" );
- }
- this.repositoryEventDispatcher = repositoryEventDispatcher;
- return this;
- }
-
- public DefaultArtifactResolver setVersionResolver( VersionResolver versionResolver )
- {
- if ( versionResolver == null )
- {
- throw new IllegalArgumentException( "version resolver has not been specified" );
- }
- this.versionResolver = versionResolver;
- return this;
- }
-
- public DefaultArtifactResolver setUpdateCheckManager( UpdateCheckManager updateCheckManager )
- {
- if ( updateCheckManager == null )
- {
- throw new IllegalArgumentException( "update check manager has not been specified" );
- }
- this.updateCheckManager = updateCheckManager;
- return this;
- }
-
- public DefaultArtifactResolver setRepositoryConnectorProvider( RepositoryConnectorProvider repositoryConnectorProvider )
- {
- if ( repositoryConnectorProvider == null )
- {
- throw new IllegalArgumentException( "repository connector provider has not been specified" );
- }
- this.repositoryConnectorProvider = repositoryConnectorProvider;
- return this;
- }
-
- public DefaultArtifactResolver setRemoteRepositoryManager( RemoteRepositoryManager remoteRepositoryManager )
- {
- if ( remoteRepositoryManager == null )
- {
- throw new IllegalArgumentException( "remote repository manager has not been specified" );
- }
- this.remoteRepositoryManager = remoteRepositoryManager;
- return this;
- }
-
- public DefaultArtifactResolver setSyncContextFactory( SyncContextFactory syncContextFactory )
- {
- if ( syncContextFactory == null )
- {
- throw new IllegalArgumentException( "sync context factory has not been specified" );
- }
- this.syncContextFactory = syncContextFactory;
- return this;
- }
-
- public DefaultArtifactResolver setOfflineController( OfflineController offlineController )
- {
- if ( offlineController == null )
- {
- throw new IllegalArgumentException( "offline controller has not been specified" );
- }
- this.offlineController = offlineController;
- return this;
- }
-
- public ArtifactResult resolveArtifact( RepositorySystemSession session, ArtifactRequest request )
- throws ArtifactResolutionException
- {
- return resolveArtifacts( session, Collections.singleton( request ) ).get( 0 );
- }
-
- public List<ArtifactResult> resolveArtifacts( RepositorySystemSession session,
- Collection<? extends ArtifactRequest> requests )
- throws ArtifactResolutionException
- {
- SyncContext syncContext = syncContextFactory.newInstance( session, false );
-
- try
- {
- Collection<Artifact> artifacts = new ArrayList<Artifact>( requests.size() );
- for ( ArtifactRequest request : requests )
- {
- if ( request.getArtifact().getProperty( ArtifactProperties.LOCAL_PATH, null ) != null )
- {
- continue;
- }
- artifacts.add( request.getArtifact() );
- }
-
- syncContext.acquire( artifacts, null );
-
- return resolve( session, requests );
- }
- finally
- {
- syncContext.close();
- }
- }
-
- private List<ArtifactResult> resolve( RepositorySystemSession session,
- Collection<? extends ArtifactRequest> requests )
- throws ArtifactResolutionException
- {
- List<ArtifactResult> results = new ArrayList<ArtifactResult>( requests.size() );
- boolean failures = false;
-
- LocalRepositoryManager lrm = session.getLocalRepositoryManager();
- WorkspaceReader workspace = session.getWorkspaceReader();
-
- List<ResolutionGroup> groups = new ArrayList<ResolutionGroup>();
-
- for ( ArtifactRequest request : requests )
- {
- RequestTrace trace = RequestTrace.newChild( request.getTrace(), request );
-
- ArtifactResult result = new ArtifactResult( request );
- results.add( result );
-
- Artifact artifact = request.getArtifact();
- List<RemoteRepository> repos = request.getRepositories();
-
- artifactResolving( session, trace, artifact );
-
- String localPath = artifact.getProperty( ArtifactProperties.LOCAL_PATH, null );
- if ( localPath != null )
- {
- // unhosted artifact, just validate file
- File file = new File( localPath );
- if ( !file.isFile() )
- {
- failures = true;
- result.addException( new ArtifactNotFoundException( artifact, null ) );
- }
- else
- {
- artifact = artifact.setFile( file );
- result.setArtifact( artifact );
- artifactResolved( session, trace, artifact, null, result.getExceptions() );
- }
- continue;
- }
-
- VersionResult versionResult;
- try
- {
- VersionRequest versionRequest = new VersionRequest( artifact, repos, request.getRequestContext() );
- versionRequest.setTrace( trace );
- versionResult = versionResolver.resolveVersion( session, versionRequest );
- }
- catch ( VersionResolutionException e )
- {
- result.addException( e );
- continue;
- }
-
- artifact = artifact.setVersion( versionResult.getVersion() );
-
- if ( versionResult.getRepository() != null )
- {
- if ( versionResult.getRepository() instanceof RemoteRepository )
- {
- repos = Collections.singletonList( (RemoteRepository) versionResult.getRepository() );
- }
- else
- {
- repos = Collections.emptyList();
- }
- }
-
- if ( workspace != null )
- {
- File file = workspace.findArtifact( artifact );
- if ( file != null )
- {
- artifact = artifact.setFile( file );
- result.setArtifact( artifact );
- result.setRepository( workspace.getRepository() );
- artifactResolved( session, trace, artifact, result.getRepository(), null );
- continue;
- }
- }
-
- LocalArtifactResult local =
- lrm.find( session, new LocalArtifactRequest( artifact, repos, request.getRequestContext() ) );
- if ( isLocallyInstalled( local, versionResult ) )
- {
- if ( local.getRepository() != null )
- {
- result.setRepository( local.getRepository() );
- }
- else
- {
- result.setRepository( lrm.getRepository() );
- }
- try
- {
- artifact = artifact.setFile( getFile( session, artifact, local.getFile() ) );
- result.setArtifact( artifact );
- artifactResolved( session, trace, artifact, result.getRepository(), null );
- }
- catch ( ArtifactTransferException e )
- {
- result.addException( e );
- }
- if ( !local.isAvailable() )
- {
- /*
- * NOTE: Interop with simple local repository: An artifact installed by a simple local repo manager
- * will not show up in the repository tracking file of the enhanced local repository. If however the
- * maven-metadata-local.xml tells us the artifact was installed locally, we sync the repository
- * tracking file.
- */
- lrm.add( session, new LocalArtifactRegistration( artifact ) );
- }
- continue;
- }
- else if ( local.getFile() != null )
- {
- logger.debug( "Verifying availability of " + local.getFile() + " from " + repos );
- }
-
- AtomicBoolean resolved = new AtomicBoolean( false );
- Iterator<ResolutionGroup> groupIt = groups.iterator();
- for ( RemoteRepository repo : repos )
- {
- if ( !repo.getPolicy( artifact.isSnapshot() ).isEnabled() )
- {
- continue;
- }
-
- try
- {
- Utils.checkOffline( session, offlineController, repo );
- }
- catch ( RepositoryOfflineException e )
- {
- Exception exception =
- new ArtifactNotFoundException( artifact, repo, "Cannot access " + repo.getId() + " ("
- + repo.getUrl() + ") in offline mode and the artifact " + artifact
- + " has not been downloaded from it before.", e );
- result.addException( exception );
- continue;
- }
-
- ResolutionGroup group = null;
- while ( groupIt.hasNext() )
- {
- ResolutionGroup t = groupIt.next();
- if ( t.matches( repo ) )
- {
- group = t;
- break;
- }
- }
- if ( group == null )
- {
- group = new ResolutionGroup( repo );
- groups.add( group );
- groupIt = Collections.<ResolutionGroup>emptyList().iterator();
- }
- group.items.add( new ResolutionItem( trace, artifact, resolved, result, local, repo ) );
- }
- }
-
- for ( ResolutionGroup group : groups )
- {
- performDownloads( session, group );
- }
-
- for ( ArtifactResult result : results )
- {
- ArtifactRequest request = result.getRequest();
-
- Artifact artifact = result.getArtifact();
- if ( artifact == null || artifact.getFile() == null )
- {
- failures = true;
- if ( result.getExceptions().isEmpty() )
- {
- Exception exception = new ArtifactNotFoundException( request.getArtifact(), null );
- result.addException( exception );
- }
- RequestTrace trace = RequestTrace.newChild( request.getTrace(), request );
- artifactResolved( session, trace, request.getArtifact(), null, result.getExceptions() );
- }
- }
-
- if ( failures )
- {
- throw new ArtifactResolutionException( results );
- }
-
- return results;
- }
-
- private boolean isLocallyInstalled( LocalArtifactResult lar, VersionResult vr )
- {
- if ( lar.isAvailable() )
- {
- return true;
- }
- if ( lar.getFile() != null )
- {
- if ( vr.getRepository() instanceof LocalRepository )
- {
- // resolution of (snapshot) version found locally installed artifact
- return true;
- }
- else if ( vr.getRepository() == null && lar.getRequest().getRepositories().isEmpty() )
- {
- // resolution of version range found locally installed artifact
- return true;
- }
- }
- return false;
- }
-
- private File getFile( RepositorySystemSession session, Artifact artifact, File file )
- throws ArtifactTransferException
- {
- if ( artifact.isSnapshot() && !artifact.getVersion().equals( artifact.getBaseVersion() )
- && ConfigUtils.getBoolean( session, true, CONFIG_PROP_SNAPSHOT_NORMALIZATION ) )
- {
- String name = file.getName().replace( artifact.getVersion(), artifact.getBaseVersion() );
- File dst = new File( file.getParent(), name );
-
- boolean copy = dst.length() != file.length() || dst.lastModified() != file.lastModified();
- if ( copy )
- {
- try
- {
- fileProcessor.copy( file, dst );
- dst.setLastModified( file.lastModified() );
- }
- catch ( IOException e )
- {
- throw new ArtifactTransferException( artifact, null, e );
- }
- }
-
- file = dst;
- }
-
- return file;
- }
-
- private void performDownloads( RepositorySystemSession session, ResolutionGroup group )
- {
- List<ArtifactDownload> downloads = gatherDownloads( session, group );
- if ( downloads.isEmpty() )
- {
- return;
- }
-
- for ( ArtifactDownload download : downloads )
- {
- artifactDownloading( session, download.getTrace(), download.getArtifact(), group.repository );
- }
-
- try
- {
- RepositoryConnector connector =
- repositoryConnectorProvider.newRepositoryConnector( session, group.repository );
- try
- {
- connector.get( downloads, null );
- }
- finally
- {
- connector.close();
- }
- }
- catch ( NoRepositoryConnectorException e )
- {
- for ( ArtifactDownload download : downloads )
- {
- download.setException( new ArtifactTransferException( download.getArtifact(), group.repository, e ) );
- }
- }
-
- evaluateDownloads( session, group );
- }
-
- private List<ArtifactDownload> gatherDownloads( RepositorySystemSession session, ResolutionGroup group )
- {
- LocalRepositoryManager lrm = session.getLocalRepositoryManager();
- List<ArtifactDownload> downloads = new ArrayList<ArtifactDownload>();
-
- for ( ResolutionItem item : group.items )
- {
- Artifact artifact = item.artifact;
-
- if ( item.resolved.get() )
- {
- // resolved in previous resolution group
- continue;
- }
-
- ArtifactDownload download = new ArtifactDownload();
- download.setArtifact( artifact );
- download.setRequestContext( item.request.getRequestContext() );
- download.setListener( SafeTransferListener.wrap( session, logger ) );
- download.setTrace( item.trace );
- if ( item.local.getFile() != null )
- {
- download.setFile( item.local.getFile() );
- download.setExistenceCheck( true );
- }
- else
- {
- String path =
- lrm.getPathForRemoteArtifact( artifact, group.repository, item.request.getRequestContext() );
- download.setFile( new File( lrm.getRepository().getBasedir(), path ) );
- }
-
- boolean snapshot = artifact.isSnapshot();
- RepositoryPolicy policy =
- remoteRepositoryManager.getPolicy( session, group.repository, !snapshot, snapshot );
-
- int errorPolicy = Utils.getPolicy( session, artifact, group.repository );
- if ( ( errorPolicy & ResolutionErrorPolicy.CACHE_ALL ) != 0 )
- {
- UpdateCheck<Artifact, ArtifactTransferException> check =
- new UpdateCheck<Artifact, ArtifactTransferException>();
- check.setItem( artifact );
- check.setFile( download.getFile() );
- check.setFileValid( false );
- check.setRepository( group.repository );
- check.setPolicy( policy.getUpdatePolicy() );
- item.updateCheck = check;
- updateCheckManager.checkArtifact( session, check );
- if ( !check.isRequired() )
- {
- item.result.addException( check.getException() );
- continue;
- }
- }
-
- download.setChecksumPolicy( policy.getChecksumPolicy() );
- download.setRepositories( item.repository.getMirroredRepositories() );
- downloads.add( download );
- item.download = download;
- }
-
- return downloads;
- }
-
- private void evaluateDownloads( RepositorySystemSession session, ResolutionGroup group )
- {
- LocalRepositoryManager lrm = session.getLocalRepositoryManager();
-
- for ( ResolutionItem item : group.items )
- {
- ArtifactDownload download = item.download;
- if ( download == null )
- {
- continue;
- }
-
- Artifact artifact = download.getArtifact();
- if ( download.getException() == null )
- {
- item.resolved.set( true );
- item.result.setRepository( group.repository );
- try
- {
- artifact = artifact.setFile( getFile( session, artifact, download.getFile() ) );
- item.result.setArtifact( artifact );
-
- lrm.add( session,
- new LocalArtifactRegistration( artifact, group.repository, download.getSupportedContexts() ) );
- }
- catch ( ArtifactTransferException e )
- {
- download.setException( e );
- item.result.addException( e );
- }
- }
- else
- {
- item.result.addException( download.getException() );
- }
-
- /*
- * NOTE: Touch after registration with local repo to ensure concurrent resolution is not rejected with
- * "already updated" via session data when actual update to local repo is still pending.
- */
- if ( item.updateCheck != null )
- {
- item.updateCheck.setException( download.getException() );
- updateCheckManager.touchArtifact( session, item.updateCheck );
- }
-
- artifactDownloaded( session, download.getTrace(), artifact, group.repository, download.getException() );
- if ( download.getException() == null )
- {
- artifactResolved( session, download.getTrace(), artifact, group.repository, null );
- }
- }
- }
-
- private void artifactResolving( RepositorySystemSession session, RequestTrace trace, Artifact artifact )
- {
- RepositoryEvent.Builder event = new RepositoryEvent.Builder( session, EventType.ARTIFACT_RESOLVING );
- event.setTrace( trace );
- event.setArtifact( artifact );
-
- repositoryEventDispatcher.dispatch( event.build() );
- }
-
- private void artifactResolved( RepositorySystemSession session, RequestTrace trace, Artifact artifact,
- ArtifactRepository repository, List<Exception> exceptions )
- {
- RepositoryEvent.Builder event = new RepositoryEvent.Builder( session, EventType.ARTIFACT_RESOLVED );
- event.setTrace( trace );
- event.setArtifact( artifact );
- event.setRepository( repository );
- event.setExceptions( exceptions );
- if ( artifact != null )
- {
- event.setFile( artifact.getFile() );
- }
-
- repositoryEventDispatcher.dispatch( event.build() );
- }
-
- private void artifactDownloading( RepositorySystemSession session, RequestTrace trace, Artifact artifact,
- RemoteRepository repository )
- {
- RepositoryEvent.Builder event = new RepositoryEvent.Builder( session, EventType.ARTIFACT_DOWNLOADING );
- event.setTrace( trace );
- event.setArtifact( artifact );
- event.setRepository( repository );
-
- repositoryEventDispatcher.dispatch( event.build() );
- }
-
- private void artifactDownloaded( RepositorySystemSession session, RequestTrace trace, Artifact artifact,
- RemoteRepository repository, Exception exception )
- {
- RepositoryEvent.Builder event = new RepositoryEvent.Builder( session, EventType.ARTIFACT_DOWNLOADED );
- event.setTrace( trace );
- event.setArtifact( artifact );
- event.setRepository( repository );
- event.setException( exception );
- if ( artifact != null )
- {
- event.setFile( artifact.getFile() );
- }
-
- repositoryEventDispatcher.dispatch( event.build() );
- }
-
- static class ResolutionGroup
- {
-
- final RemoteRepository repository;
-
- final List<ResolutionItem> items = new ArrayList<ResolutionItem>();
-
- ResolutionGroup( RemoteRepository repository )
- {
- this.repository = repository;
- }
-
- boolean matches( RemoteRepository repo )
- {
- return repository.getUrl().equals( repo.getUrl() )
- && repository.getContentType().equals( repo.getContentType() )
- && repository.isRepositoryManager() == repo.isRepositoryManager();
- }
-
- }
-
- static class ResolutionItem
- {
-
- final RequestTrace trace;
-
- final ArtifactRequest request;
-
- final ArtifactResult result;
-
- final LocalArtifactResult local;
-
- final RemoteRepository repository;
-
- final Artifact artifact;
-
- final AtomicBoolean resolved;
-
- ArtifactDownload download;
-
- UpdateCheck<Artifact, ArtifactTransferException> updateCheck;
-
- ResolutionItem( RequestTrace trace, Artifact artifact, AtomicBoolean resolved, ArtifactResult result,
- LocalArtifactResult local, RemoteRepository repository )
- {
- this.trace = trace;
- this.artifact = artifact;
- this.resolved = resolved;
- this.result = result;
- this.request = result.getRequest();
- this.local = local;
- this.repository = repository;
- }
-
- }
-
-}
http://git-wip-us.apache.org/repos/asf/maven-aether/blob/27f8bd73/aether-impl/src/main/java/org/eclipse/aether/internal/impl/DefaultChecksumPolicyProvider.java
----------------------------------------------------------------------
diff --git a/aether-impl/src/main/java/org/eclipse/aether/internal/impl/DefaultChecksumPolicyProvider.java b/aether-impl/src/main/java/org/eclipse/aether/internal/impl/DefaultChecksumPolicyProvider.java
deleted file mode 100644
index 20c0484..0000000
--- a/aether-impl/src/main/java/org/eclipse/aether/internal/impl/DefaultChecksumPolicyProvider.java
+++ /dev/null
@@ -1,121 +0,0 @@
-package org.eclipse.aether.internal.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 javax.inject.Inject;
-import javax.inject.Named;
-
-import org.eclipse.aether.RepositorySystemSession;
-import org.eclipse.aether.repository.RemoteRepository;
-import org.eclipse.aether.repository.RepositoryPolicy;
-import org.eclipse.aether.spi.connector.checksum.ChecksumPolicy;
-import org.eclipse.aether.spi.connector.checksum.ChecksumPolicyProvider;
-import org.eclipse.aether.spi.locator.Service;
-import org.eclipse.aether.spi.locator.ServiceLocator;
-import org.eclipse.aether.spi.log.LoggerFactory;
-import org.eclipse.aether.spi.log.NullLoggerFactory;
-import org.eclipse.aether.transfer.TransferResource;
-
-/**
- */
-@Named
-public final class DefaultChecksumPolicyProvider
- implements ChecksumPolicyProvider, Service
-{
-
- private static final int ORDINAL_IGNORE = 0;
-
- private static final int ORDINAL_WARN = 1;
-
- private static final int ORDINAL_FAIL = 2;
-
- private LoggerFactory loggerFactory = NullLoggerFactory.INSTANCE;
-
- public DefaultChecksumPolicyProvider()
- {
- // enables default constructor
- }
-
- @Inject
- DefaultChecksumPolicyProvider( LoggerFactory loggerFactory )
- {
- setLoggerFactory( loggerFactory );
- }
-
- public void initService( ServiceLocator locator )
- {
- setLoggerFactory( locator.getService( LoggerFactory.class ) );
- }
-
- public DefaultChecksumPolicyProvider setLoggerFactory( LoggerFactory loggerFactory )
- {
- this.loggerFactory = loggerFactory;
- return this;
- }
-
- public ChecksumPolicy newChecksumPolicy( RepositorySystemSession session, RemoteRepository repository,
- TransferResource resource, String policy )
- {
- if ( RepositoryPolicy.CHECKSUM_POLICY_IGNORE.equals( policy ) )
- {
- return null;
- }
- if ( RepositoryPolicy.CHECKSUM_POLICY_FAIL.equals( policy ) )
- {
- return new FailChecksumPolicy( loggerFactory, resource );
- }
- return new WarnChecksumPolicy( loggerFactory, resource );
- }
-
- public String getEffectiveChecksumPolicy( RepositorySystemSession session, String policy1, String policy2 )
- {
- if ( policy1 != null && policy1.equals( policy2 ) )
- {
- return policy1;
- }
- int ordinal1 = ordinalOfPolicy( policy1 );
- int ordinal2 = ordinalOfPolicy( policy2 );
- if ( ordinal2 < ordinal1 )
- {
- return ( ordinal2 != ORDINAL_WARN ) ? policy2 : RepositoryPolicy.CHECKSUM_POLICY_WARN;
- }
- else
- {
- return ( ordinal1 != ORDINAL_WARN ) ? policy1 : RepositoryPolicy.CHECKSUM_POLICY_WARN;
- }
- }
-
- private static int ordinalOfPolicy( String policy )
- {
- if ( RepositoryPolicy.CHECKSUM_POLICY_FAIL.equals( policy ) )
- {
- return ORDINAL_FAIL;
- }
- else if ( RepositoryPolicy.CHECKSUM_POLICY_IGNORE.equals( policy ) )
- {
- return ORDINAL_IGNORE;
- }
- else
- {
- return ORDINAL_WARN;
- }
- }
-
-}
http://git-wip-us.apache.org/repos/asf/maven-aether/blob/27f8bd73/aether-impl/src/main/java/org/eclipse/aether/internal/impl/DefaultDependencyCollectionContext.java
----------------------------------------------------------------------
diff --git a/aether-impl/src/main/java/org/eclipse/aether/internal/impl/DefaultDependencyCollectionContext.java b/aether-impl/src/main/java/org/eclipse/aether/internal/impl/DefaultDependencyCollectionContext.java
deleted file mode 100644
index 1ad6cc7..0000000
--- a/aether-impl/src/main/java/org/eclipse/aether/internal/impl/DefaultDependencyCollectionContext.java
+++ /dev/null
@@ -1,86 +0,0 @@
-package org.eclipse.aether.internal.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 java.util.List;
-
-import org.eclipse.aether.RepositorySystemSession;
-import org.eclipse.aether.artifact.Artifact;
-import org.eclipse.aether.collection.DependencyCollectionContext;
-import org.eclipse.aether.graph.Dependency;
-
-/**
- * @see DefaultDependencyCollector
- */
-final class DefaultDependencyCollectionContext
- implements DependencyCollectionContext
-{
-
- private final RepositorySystemSession session;
-
- private Artifact artifact;
-
- private Dependency dependency;
-
- private List<Dependency> managedDependencies;
-
- public DefaultDependencyCollectionContext( RepositorySystemSession session, Artifact artifact,
- Dependency dependency, List<Dependency> managedDependencies )
- {
- this.session = session;
- this.artifact = ( dependency != null ) ? dependency.getArtifact() : artifact;
- this.dependency = dependency;
- this.managedDependencies = managedDependencies;
- }
-
- public RepositorySystemSession getSession()
- {
- return session;
- }
-
- public Artifact getArtifact()
- {
- return artifact;
- }
-
- public Dependency getDependency()
- {
- return dependency;
- }
-
- public List<Dependency> getManagedDependencies()
- {
- return managedDependencies;
- }
-
- public void set( Dependency dependency, List<Dependency> managedDependencies )
- {
- artifact = dependency.getArtifact();
- this.dependency = dependency;
- this.managedDependencies = managedDependencies;
- }
-
- @Override
- public String toString()
- {
- return String.valueOf( getDependency() );
- }
-
-}
http://git-wip-us.apache.org/repos/asf/maven-aether/blob/27f8bd73/aether-impl/src/main/java/org/eclipse/aether/internal/impl/DefaultDependencyCollector.java
----------------------------------------------------------------------
diff --git a/aether-impl/src/main/java/org/eclipse/aether/internal/impl/DefaultDependencyCollector.java b/aether-impl/src/main/java/org/eclipse/aether/internal/impl/DefaultDependencyCollector.java
deleted file mode 100644
index 4fb8374..0000000
--- a/aether-impl/src/main/java/org/eclipse/aether/internal/impl/DefaultDependencyCollector.java
+++ /dev/null
@@ -1,876 +0,0 @@
-package org.eclipse.aether.internal.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 java.util.ArrayList;
-import java.util.Collection;
-import java.util.Collections;
-import java.util.HashSet;
-import java.util.LinkedHashMap;
-import java.util.List;
-import java.util.Map;
-
-import javax.inject.Inject;
-import javax.inject.Named;
-
-import org.eclipse.aether.DefaultRepositorySystemSession;
-import org.eclipse.aether.RepositoryException;
-import org.eclipse.aether.RepositorySystemSession;
-import org.eclipse.aether.RequestTrace;
-import org.eclipse.aether.artifact.Artifact;
-import org.eclipse.aether.artifact.ArtifactProperties;
-import org.eclipse.aether.collection.CollectRequest;
-import org.eclipse.aether.collection.CollectResult;
-import org.eclipse.aether.collection.DependencyCollectionException;
-import org.eclipse.aether.collection.DependencyGraphTransformer;
-import org.eclipse.aether.collection.DependencyManagement;
-import org.eclipse.aether.collection.DependencyManager;
-import org.eclipse.aether.collection.DependencySelector;
-import org.eclipse.aether.collection.DependencyTraverser;
-import org.eclipse.aether.collection.VersionFilter;
-import org.eclipse.aether.graph.DefaultDependencyNode;
-import org.eclipse.aether.graph.Dependency;
-import org.eclipse.aether.graph.DependencyNode;
-import org.eclipse.aether.impl.ArtifactDescriptorReader;
-import org.eclipse.aether.impl.DependencyCollector;
-import org.eclipse.aether.impl.RemoteRepositoryManager;
-import org.eclipse.aether.impl.VersionRangeResolver;
-import org.eclipse.aether.repository.ArtifactRepository;
-import org.eclipse.aether.repository.RemoteRepository;
-import org.eclipse.aether.resolution.ArtifactDescriptorException;
-import org.eclipse.aether.resolution.ArtifactDescriptorRequest;
-import org.eclipse.aether.resolution.ArtifactDescriptorResult;
-import org.eclipse.aether.resolution.VersionRangeRequest;
-import org.eclipse.aether.resolution.VersionRangeResolutionException;
-import org.eclipse.aether.resolution.VersionRangeResult;
-import org.eclipse.aether.spi.locator.Service;
-import org.eclipse.aether.spi.locator.ServiceLocator;
-import org.eclipse.aether.spi.log.Logger;
-import org.eclipse.aether.spi.log.LoggerFactory;
-import org.eclipse.aether.spi.log.NullLoggerFactory;
-import org.eclipse.aether.util.ConfigUtils;
-import org.eclipse.aether.util.graph.manager.DependencyManagerUtils;
-import org.eclipse.aether.util.graph.transformer.TransformationContextKeys;
-import org.eclipse.aether.version.Version;
-
-/**
- */
-@Named
-public class DefaultDependencyCollector
- implements DependencyCollector, Service
-{
-
- private static final String CONFIG_PROP_MAX_EXCEPTIONS = "aether.dependencyCollector.maxExceptions";
-
- private static final String CONFIG_PROP_MAX_CYCLES = "aether.dependencyCollector.maxCycles";
-
- private Logger logger = NullLoggerFactory.LOGGER;
-
- private RemoteRepositoryManager remoteRepositoryManager;
-
- private ArtifactDescriptorReader descriptorReader;
-
- private VersionRangeResolver versionRangeResolver;
-
- public DefaultDependencyCollector()
- {
- // enables default constructor
- }
-
- @Inject
- DefaultDependencyCollector( RemoteRepositoryManager remoteRepositoryManager,
- ArtifactDescriptorReader artifactDescriptorReader,
- VersionRangeResolver versionRangeResolver, LoggerFactory loggerFactory )
- {
- setRemoteRepositoryManager( remoteRepositoryManager );
- setArtifactDescriptorReader( artifactDescriptorReader );
- setVersionRangeResolver( versionRangeResolver );
- setLoggerFactory( loggerFactory );
- }
-
- public void initService( ServiceLocator locator )
- {
- setLoggerFactory( locator.getService( LoggerFactory.class ) );
- setRemoteRepositoryManager( locator.getService( RemoteRepositoryManager.class ) );
- setArtifactDescriptorReader( locator.getService( ArtifactDescriptorReader.class ) );
- setVersionRangeResolver( locator.getService( VersionRangeResolver.class ) );
- }
-
- public DefaultDependencyCollector setLoggerFactory( LoggerFactory loggerFactory )
- {
- this.logger = NullLoggerFactory.getSafeLogger( loggerFactory, getClass() );
- return this;
- }
-
- public DefaultDependencyCollector setRemoteRepositoryManager( RemoteRepositoryManager remoteRepositoryManager )
- {
- if ( remoteRepositoryManager == null )
- {
- throw new IllegalArgumentException( "remote repository manager has not been specified" );
- }
- this.remoteRepositoryManager = remoteRepositoryManager;
- return this;
- }
-
- public DefaultDependencyCollector setArtifactDescriptorReader( ArtifactDescriptorReader artifactDescriptorReader )
- {
- if ( artifactDescriptorReader == null )
- {
- throw new IllegalArgumentException( "artifact descriptor reader has not been specified" );
- }
- descriptorReader = artifactDescriptorReader;
- return this;
- }
-
- public DefaultDependencyCollector setVersionRangeResolver( VersionRangeResolver versionRangeResolver )
- {
- if ( versionRangeResolver == null )
- {
- throw new IllegalArgumentException( "version range resolver has not been specified" );
- }
- this.versionRangeResolver = versionRangeResolver;
- return this;
- }
-
- public CollectResult collectDependencies( RepositorySystemSession session, CollectRequest request )
- throws DependencyCollectionException
- {
- session = optimizeSession( session );
-
- RequestTrace trace = RequestTrace.newChild( request.getTrace(), request );
-
- CollectResult result = new CollectResult( request );
-
- DependencySelector depSelector = session.getDependencySelector();
- DependencyManager depManager = session.getDependencyManager();
- DependencyTraverser depTraverser = session.getDependencyTraverser();
- VersionFilter verFilter = session.getVersionFilter();
-
- Dependency root = request.getRoot();
- List<RemoteRepository> repositories = request.getRepositories();
- List<Dependency> dependencies = request.getDependencies();
- List<Dependency> managedDependencies = request.getManagedDependencies();
-
- Map<String, Object> stats = logger.isDebugEnabled() ? new LinkedHashMap<String, Object>() : null;
- long time1 = System.nanoTime();
-
- DefaultDependencyNode node;
- if ( root != null )
- {
- List<? extends Version> versions;
- VersionRangeResult rangeResult;
- try
- {
- VersionRangeRequest rangeRequest =
- new VersionRangeRequest( root.getArtifact(), request.getRepositories(),
- request.getRequestContext() );
- rangeRequest.setTrace( trace );
- rangeResult = versionRangeResolver.resolveVersionRange( session, rangeRequest );
- versions = filterVersions( root, rangeResult, verFilter, new DefaultVersionFilterContext( session ) );
- }
- catch ( VersionRangeResolutionException e )
- {
- result.addException( e );
- throw new DependencyCollectionException( result, e.getMessage() );
- }
-
- Version version = versions.get( versions.size() - 1 );
- root = root.setArtifact( root.getArtifact().setVersion( version.toString() ) );
-
- ArtifactDescriptorResult descriptorResult;
- try
- {
- ArtifactDescriptorRequest descriptorRequest = new ArtifactDescriptorRequest();
- descriptorRequest.setArtifact( root.getArtifact() );
- descriptorRequest.setRepositories( request.getRepositories() );
- descriptorRequest.setRequestContext( request.getRequestContext() );
- descriptorRequest.setTrace( trace );
- if ( isLackingDescriptor( root.getArtifact() ) )
- {
- descriptorResult = new ArtifactDescriptorResult( descriptorRequest );
- }
- else
- {
- descriptorResult = descriptorReader.readArtifactDescriptor( session, descriptorRequest );
- }
- }
- catch ( ArtifactDescriptorException e )
- {
- result.addException( e );
- throw new DependencyCollectionException( result, e.getMessage() );
- }
-
- root = root.setArtifact( descriptorResult.getArtifact() );
-
- if ( !session.isIgnoreArtifactDescriptorRepositories() )
- {
- repositories = remoteRepositoryManager.aggregateRepositories( session, repositories,
- descriptorResult.getRepositories(),
- true );
- }
- dependencies = mergeDeps( dependencies, descriptorResult.getDependencies() );
- managedDependencies = mergeDeps( managedDependencies, descriptorResult.getManagedDependencies() );
-
- node = new DefaultDependencyNode( root );
- node.setRequestContext( request.getRequestContext() );
- node.setRelocations( descriptorResult.getRelocations() );
- node.setVersionConstraint( rangeResult.getVersionConstraint() );
- node.setVersion( version );
- node.setAliases( descriptorResult.getAliases() );
- node.setRepositories( request.getRepositories() );
- }
- else
- {
- node = new DefaultDependencyNode( request.getRootArtifact() );
- }
-
- result.setRoot( node );
-
- boolean traverse = root == null || depTraverser == null || depTraverser.traverseDependency( root );
- String errorPath = null;
- if ( traverse && !dependencies.isEmpty() )
- {
- DataPool pool = new DataPool( session );
-
- NodeStack nodes = new NodeStack();
- nodes.push( node );
-
- DefaultDependencyCollectionContext context =
- new DefaultDependencyCollectionContext( session, request.getRootArtifact(), root, managedDependencies );
-
- DefaultVersionFilterContext versionContext = new DefaultVersionFilterContext( session );
-
- Args args = new Args( session, trace, pool, nodes, context, versionContext, request );
- Results results = new Results( result, session );
-
- process( args, results, dependencies, repositories,
- depSelector != null ? depSelector.deriveChildSelector( context ) : null,
- depManager != null ? depManager.deriveChildManager( context ) : null,
- depTraverser != null ? depTraverser.deriveChildTraverser( context ) : null,
- verFilter != null ? verFilter.deriveChildFilter( context ) : null );
-
- errorPath = results.errorPath;
- }
-
- long time2 = System.nanoTime();
-
- DependencyGraphTransformer transformer = session.getDependencyGraphTransformer();
- if ( transformer != null )
- {
- try
- {
- DefaultDependencyGraphTransformationContext context =
- new DefaultDependencyGraphTransformationContext( session );
- context.put( TransformationContextKeys.STATS, stats );
- result.setRoot( transformer.transformGraph( node, context ) );
- }
- catch ( RepositoryException e )
- {
- result.addException( e );
- }
- }
-
- if ( stats != null )
- {
- long time3 = System.nanoTime();
- stats.put( "DefaultDependencyCollector.collectTime", time2 - time1 );
- stats.put( "DefaultDependencyCollector.transformTime", time3 - time2 );
- logger.debug( "Dependency collection stats: " + stats );
- }
-
- if ( errorPath != null )
- {
- throw new DependencyCollectionException( result, "Failed to collect dependencies at " + errorPath );
- }
- if ( !result.getExceptions().isEmpty() )
- {
- throw new DependencyCollectionException( result );
- }
-
- return result;
- }
-
- private static RepositorySystemSession optimizeSession( RepositorySystemSession session )
- {
- DefaultRepositorySystemSession optimized = new DefaultRepositorySystemSession( session );
- optimized.setArtifactTypeRegistry( CachingArtifactTypeRegistry.newInstance( session ) );
- return optimized;
- }
-
- private List<Dependency> mergeDeps( List<Dependency> dominant, List<Dependency> recessive )
- {
- List<Dependency> result;
- if ( dominant == null || dominant.isEmpty() )
- {
- result = recessive;
- }
- else if ( recessive == null || recessive.isEmpty() )
- {
- result = dominant;
- }
- else
- {
- int initialCapacity = dominant.size() + recessive.size();
- result = new ArrayList<Dependency>( initialCapacity );
- Collection<String> ids = new HashSet<String>( initialCapacity, 1.0f );
- for ( Dependency dependency : dominant )
- {
- ids.add( getId( dependency.getArtifact() ) );
- result.add( dependency );
- }
- for ( Dependency dependency : recessive )
- {
- if ( !ids.contains( getId( dependency.getArtifact() ) ) )
- {
- result.add( dependency );
- }
- }
- }
- return result;
- }
-
- private static String getId( Artifact a )
- {
- return a.getGroupId() + ':' + a.getArtifactId() + ':' + a.getClassifier() + ':' + a.getExtension();
- }
-
- private void process( final Args args, Results results, List<Dependency> dependencies,
- List<RemoteRepository> repositories, DependencySelector depSelector,
- DependencyManager depManager, DependencyTraverser depTraverser, VersionFilter verFilter )
- {
- for ( Dependency dependency : dependencies )
- {
- processDependency( args, results, repositories, depSelector, depManager, depTraverser, verFilter,
- dependency );
- }
- }
-
- private void processDependency( Args args, Results results, List<RemoteRepository> repositories,
- DependencySelector depSelector, DependencyManager depManager,
- DependencyTraverser depTraverser, VersionFilter verFilter, Dependency dependency )
- {
-
- List<Artifact> relocations = Collections.emptyList();
- boolean disableVersionManagement = false;
- processDependency( args, results, repositories, depSelector, depManager, depTraverser, verFilter, dependency,
- relocations, disableVersionManagement );
- }
-
- private void processDependency( Args args, Results results, List<RemoteRepository> repositories,
- DependencySelector depSelector, DependencyManager depManager,
- DependencyTraverser depTraverser, VersionFilter verFilter, Dependency dependency,
- List<Artifact> relocations, boolean disableVersionManagement )
- {
- PremanagedDependency preManaged =
- PremanagedDependency.create( depManager, dependency, disableVersionManagement, args.premanagedState );
-
- dependency = preManaged.managedDependency;
-
- if ( depSelector != null && !depSelector.selectDependency( dependency ) )
- {
- return;
- }
-
- boolean noDescriptor = isLackingDescriptor( dependency.getArtifact() );
-
- boolean traverse = !noDescriptor && ( depTraverser == null || depTraverser.traverseDependency( dependency ) );
-
- List<? extends Version> versions;
- VersionRangeResult rangeResult;
- try
- {
- VersionRangeRequest rangeRequest = createVersionRangeRequest( args, repositories, dependency );
-
- rangeResult = cachedResolveRangeResult( rangeRequest, args.pool, args.session );
-
- versions = filterVersions( dependency, rangeResult, verFilter, args.versionContext );
- }
- catch ( VersionRangeResolutionException e )
- {
- results.addException( dependency, e, args.nodes );
- return;
- }
-
- for ( Version version : versions )
- {
- Artifact originalArtifact = dependency.getArtifact().setVersion( version.toString() );
- Dependency d = dependency.setArtifact( originalArtifact );
-
- ArtifactDescriptorRequest descriptorRequest = createArtifactDescriptorRequest( args, repositories, d );
-
- final ArtifactDescriptorResult descriptorResult =
- getArtifactDescriptorResult( args, results, noDescriptor, d, descriptorRequest );
- if ( descriptorResult != null )
- {
- d = d.setArtifact( descriptorResult.getArtifact() );
-
- DependencyNode node = args.nodes.top();
-
- int cycleEntry = args.nodes.find( d.getArtifact() );
- if ( cycleEntry >= 0 )
- {
- results.addCycle( args.nodes, cycleEntry, d );
- DependencyNode cycleNode = args.nodes.get( cycleEntry );
- if ( cycleNode.getDependency() != null )
- {
- DefaultDependencyNode child =
- createDependencyNode( node, relocations, preManaged, rangeResult, version, d,
- descriptorResult, cycleNode );
- node.getChildren().add( child );
- continue;
- }
- }
-
- if ( !descriptorResult.getRelocations().isEmpty() )
- {
- boolean disableVersionManagementSubsequently =
- originalArtifact.getGroupId().equals( d.getArtifact().getGroupId() )
- && originalArtifact.getArtifactId().equals( d.getArtifact().getArtifactId() );
-
- processDependency( args, results, repositories, depSelector, depManager, depTraverser, verFilter, d,
- descriptorResult.getRelocations(), disableVersionManagementSubsequently );
- return;
- }
- else
- {
- d = args.pool.intern( d );
-
- List<RemoteRepository> repos =
- getRemoteRepositories( rangeResult.getRepository( version ), repositories );
-
- DefaultDependencyNode child =
- createDependencyNode( node, relocations, preManaged, rangeResult, version, d,
- descriptorResult.getAliases(), repos, args.request.getRequestContext() );
-
- node.getChildren().add( child );
-
- boolean recurse = traverse && !descriptorResult.getDependencies().isEmpty();
- if ( recurse )
- {
- doRecurse( args, results, repositories, depSelector, depManager, depTraverser, verFilter, d,
- descriptorResult, child );
- }
- }
- }
- else
- {
- DependencyNode node = args.nodes.top();
- List<RemoteRepository> repos =
- getRemoteRepositories( rangeResult.getRepository( version ), repositories );
- DefaultDependencyNode child =
- createDependencyNode( node, relocations, preManaged, rangeResult, version, d, null, repos,
- args.request.getRequestContext() );
- node.getChildren().add( child );
- }
- }
- }
-
- private void doRecurse( Args args, Results results, List<RemoteRepository> repositories,
- DependencySelector depSelector, DependencyManager depManager,
- DependencyTraverser depTraverser, VersionFilter verFilter, Dependency d,
- ArtifactDescriptorResult descriptorResult, DefaultDependencyNode child )
- {
- DefaultDependencyCollectionContext context = args.collectionContext;
- context.set( d, descriptorResult.getManagedDependencies() );
-
- DependencySelector childSelector = depSelector != null ? depSelector.deriveChildSelector( context ) : null;
- DependencyManager childManager = depManager != null ? depManager.deriveChildManager( context ) : null;
- DependencyTraverser childTraverser = depTraverser != null ? depTraverser.deriveChildTraverser( context ) : null;
- VersionFilter childFilter = verFilter != null ? verFilter.deriveChildFilter( context ) : null;
-
- final List<RemoteRepository> childRepos = args.ignoreRepos
- ? repositories
- : remoteRepositoryManager.aggregateRepositories( args.session, repositories,
- descriptorResult.getRepositories(), true );
-
- Object key =
- args.pool.toKey( d.getArtifact(), childRepos, childSelector, childManager, childTraverser, childFilter );
-
- List<DependencyNode> children = args.pool.getChildren( key );
- if ( children == null )
- {
- args.pool.putChildren( key, child.getChildren() );
-
- args.nodes.push( child );
-
- process( args, results, descriptorResult.getDependencies(), childRepos, childSelector, childManager,
- childTraverser, childFilter );
-
- args.nodes.pop();
- }
- else
- {
- child.setChildren( children );
- }
- }
-
- private ArtifactDescriptorResult getArtifactDescriptorResult( Args args, Results results, boolean noDescriptor,
- Dependency d,
- ArtifactDescriptorRequest descriptorRequest )
- {
- return noDescriptor
- ? new ArtifactDescriptorResult( descriptorRequest )
- : resolveCachedArtifactDescriptor( args.pool, descriptorRequest, args.session, d, results, args );
- }
-
- private ArtifactDescriptorResult resolveCachedArtifactDescriptor( DataPool pool,
- ArtifactDescriptorRequest descriptorRequest,
- RepositorySystemSession session, Dependency d,
- Results results, Args args )
- {
- Object key = pool.toKey( descriptorRequest );
- ArtifactDescriptorResult descriptorResult = pool.getDescriptor( key, descriptorRequest );
- if ( descriptorResult == null )
- {
- try
- {
- descriptorResult = descriptorReader.readArtifactDescriptor( session, descriptorRequest );
- pool.putDescriptor( key, descriptorResult );
- }
- catch ( ArtifactDescriptorException e )
- {
- results.addException( d, e, args.nodes );
- pool.putDescriptor( key, e );
- return null;
- }
-
- }
- else if ( descriptorResult == DataPool.NO_DESCRIPTOR )
- {
- return null;
- }
-
- return descriptorResult;
- }
-
- private static DefaultDependencyNode createDependencyNode( DependencyNode parent,
- List<Artifact> relocations,
- PremanagedDependency preManaged,
- VersionRangeResult rangeResult, Version version,
- Dependency d, Collection<Artifact> aliases,
- List<RemoteRepository> repos, String requestContext )
- {
- DefaultDependencyNode child = new DefaultDependencyNode( parent, d );
- preManaged.applyTo( child );
- child.setRelocations( relocations );
- child.setVersionConstraint( rangeResult.getVersionConstraint() );
- child.setVersion( version );
- child.setAliases( aliases );
- child.setRepositories( repos );
- child.setRequestContext( requestContext );
- return child;
- }
-
- private static DefaultDependencyNode createDependencyNode( DependencyNode parent,
- List<Artifact> relocations,
- PremanagedDependency preManaged,
- VersionRangeResult rangeResult, Version version,
- Dependency d, ArtifactDescriptorResult descriptorResult,
- DependencyNode cycleNode )
- {
- DefaultDependencyNode child =
- createDependencyNode( parent, relocations, preManaged, rangeResult, version, d,
- descriptorResult.getAliases(), cycleNode.getRepositories(),
- cycleNode.getRequestContext() );
-
- child.setChildren( cycleNode.getChildren() );
- return child;
- }
-
- private static ArtifactDescriptorRequest createArtifactDescriptorRequest( Args args,
- List<RemoteRepository> repositories,
- Dependency d )
- {
- ArtifactDescriptorRequest descriptorRequest = new ArtifactDescriptorRequest();
- descriptorRequest.setArtifact( d.getArtifact() );
- descriptorRequest.setRepositories( repositories );
- descriptorRequest.setRequestContext( args.request.getRequestContext() );
- descriptorRequest.setTrace( args.trace );
- return descriptorRequest;
- }
-
- private static VersionRangeRequest createVersionRangeRequest( Args args, List<RemoteRepository> repositories,
- Dependency dependency )
- {
- VersionRangeRequest rangeRequest = new VersionRangeRequest();
- rangeRequest.setArtifact( dependency.getArtifact() );
- rangeRequest.setRepositories( repositories );
- rangeRequest.setRequestContext( args.request.getRequestContext() );
- rangeRequest.setTrace( args.trace );
- return rangeRequest;
- }
-
- private VersionRangeResult cachedResolveRangeResult( VersionRangeRequest rangeRequest, DataPool pool,
- RepositorySystemSession session )
- throws VersionRangeResolutionException
- {
- Object key = pool.toKey( rangeRequest );
- VersionRangeResult rangeResult = pool.getConstraint( key, rangeRequest );
- if ( rangeResult == null )
- {
- rangeResult = versionRangeResolver.resolveVersionRange( session, rangeRequest );
- pool.putConstraint( key, rangeResult );
- }
- return rangeResult;
- }
-
-
- private static boolean isLackingDescriptor( Artifact artifact )
- {
- return artifact.getProperty( ArtifactProperties.LOCAL_PATH, null ) != null;
- }
-
- private static List<RemoteRepository> getRemoteRepositories( ArtifactRepository repository,
- List<RemoteRepository> repositories )
- {
- if ( repository instanceof RemoteRepository )
- {
- return Collections.singletonList( (RemoteRepository) repository );
- }
- if ( repository != null )
- {
- return Collections.emptyList();
- }
- return repositories;
- }
-
- private static List<? extends Version> filterVersions( Dependency dependency, VersionRangeResult rangeResult,
- VersionFilter verFilter,
- DefaultVersionFilterContext verContext )
- throws VersionRangeResolutionException
- {
- if ( rangeResult.getVersions().isEmpty() )
- {
- throw new VersionRangeResolutionException( rangeResult,
- "No versions available for " + dependency.getArtifact()
- + " within specified range" );
- }
-
- List<? extends Version> versions;
- if ( verFilter != null && rangeResult.getVersionConstraint().getRange() != null )
- {
- verContext.set( dependency, rangeResult );
- try
- {
- verFilter.filterVersions( verContext );
- }
- catch ( RepositoryException e )
- {
- throw new VersionRangeResolutionException( rangeResult,
- "Failed to filter versions for " + dependency.getArtifact()
- + ": " + e.getMessage(), e );
- }
- versions = verContext.get();
- if ( versions.isEmpty() )
- {
- throw new VersionRangeResolutionException( rangeResult,
- "No acceptable versions for " + dependency.getArtifact()
- + ": " + rangeResult.getVersions() );
- }
- }
- else
- {
- versions = rangeResult.getVersions();
- }
- return versions;
- }
-
- static class Args
- {
-
- final RepositorySystemSession session;
-
- final boolean ignoreRepos;
-
- final boolean premanagedState;
-
- final RequestTrace trace;
-
- final DataPool pool;
-
- final NodeStack nodes;
-
- final DefaultDependencyCollectionContext collectionContext;
-
- final DefaultVersionFilterContext versionContext;
-
- final CollectRequest request;
-
-
- public Args( RepositorySystemSession session, RequestTrace trace, DataPool pool, NodeStack nodes,
- DefaultDependencyCollectionContext collectionContext, DefaultVersionFilterContext versionContext,
- CollectRequest request )
- {
- this.session = session;
- this.request = request;
- this.ignoreRepos = session.isIgnoreArtifactDescriptorRepositories();
- this.premanagedState = ConfigUtils.getBoolean( session, false, DependencyManagerUtils.CONFIG_PROP_VERBOSE );
- this.trace = trace;
- this.pool = pool;
- this.nodes = nodes;
- this.collectionContext = collectionContext;
- this.versionContext = versionContext;
- }
-
- }
-
- static class Results
- {
-
- private final CollectResult result;
-
- final int maxExceptions;
-
- final int maxCycles;
-
- String errorPath;
-
- public Results( CollectResult result, RepositorySystemSession session )
- {
- this.result = result;
- this.maxExceptions = ConfigUtils.getInteger( session, 50, CONFIG_PROP_MAX_EXCEPTIONS );
- this.maxCycles = ConfigUtils.getInteger( session, 10, CONFIG_PROP_MAX_CYCLES );
- }
-
- public void addException( Dependency dependency, Exception e, NodeStack nodes )
- {
- if ( maxExceptions < 0 || result.getExceptions().size() < maxExceptions )
- {
- result.addException( e );
- if ( errorPath == null )
- {
- StringBuilder buffer = new StringBuilder( 256 );
- for ( int i = 0; i < nodes.size(); i++ )
- {
- if ( buffer.length() > 0 )
- {
- buffer.append( " -> " );
- }
- Dependency dep = nodes.get( i ).getDependency();
- if ( dep != null )
- {
- buffer.append( dep.getArtifact() );
- }
- }
- if ( buffer.length() > 0 )
- {
- buffer.append( " -> " );
- }
- buffer.append( dependency.getArtifact() );
- errorPath = buffer.toString();
- }
- }
- }
-
- public void addCycle( NodeStack nodes, int cycleEntry, Dependency dependency )
- {
- if ( maxCycles < 0 || result.getCycles().size() < maxCycles )
- {
- result.addCycle( new DefaultDependencyCycle( nodes, cycleEntry, dependency ) );
- }
- }
-
- }
-
- static class PremanagedDependency
- {
- final String premanagedVersion;
-
- final String premanagedScope;
-
- final Boolean premanagedOptional;
-
- final int managedBits;
-
- final Dependency managedDependency;
-
- final boolean premanagedState;
-
- PremanagedDependency( String premanagedVersion, String premanagedScope, Boolean premanagedOptional,
- int managedBits, Dependency managedDependency, boolean premanagedState )
- {
- this.premanagedVersion = premanagedVersion;
- this.premanagedScope = premanagedScope;
- this.premanagedOptional = premanagedOptional;
- this.managedBits = managedBits;
- this.managedDependency = managedDependency;
- this.premanagedState = premanagedState;
- }
-
- static PremanagedDependency create( DependencyManager depManager, Dependency dependency,
- boolean disableVersionManagement, boolean premanagedState )
- {
- DependencyManagement depMngt = depManager != null ? depManager.manageDependency( dependency ) : null;
-
- int managedBits = 0;
- String premanagedVersion = null;
- String premanagedScope = null;
- Boolean premanagedOptional = null;
-
- if ( depMngt != null )
- {
- if ( depMngt.getVersion() != null && !disableVersionManagement )
- {
- Artifact artifact = dependency.getArtifact();
- premanagedVersion = artifact.getVersion();
- dependency = dependency.setArtifact( artifact.setVersion( depMngt.getVersion() ) );
- managedBits |= DependencyNode.MANAGED_VERSION;
- }
- if ( depMngt.getProperties() != null )
- {
- Artifact artifact = dependency.getArtifact();
- dependency = dependency.setArtifact( artifact.setProperties( depMngt.getProperties() ) );
- managedBits |= DependencyNode.MANAGED_PROPERTIES;
- }
- if ( depMngt.getScope() != null )
- {
- premanagedScope = dependency.getScope();
- dependency = dependency.setScope( depMngt.getScope() );
- managedBits |= DependencyNode.MANAGED_SCOPE;
- }
- if ( depMngt.getOptional() != null )
- {
- premanagedOptional = dependency.isOptional();
- dependency = dependency.setOptional( depMngt.getOptional() );
- managedBits |= DependencyNode.MANAGED_OPTIONAL;
- }
- if ( depMngt.getExclusions() != null )
- {
- dependency = dependency.setExclusions( depMngt.getExclusions() );
- managedBits |= DependencyNode.MANAGED_EXCLUSIONS;
- }
- }
- return new PremanagedDependency( premanagedVersion, premanagedScope, premanagedOptional, managedBits,
- dependency, premanagedState );
- }
-
- public void applyTo( DefaultDependencyNode child )
- {
- child.setManagedBits( managedBits );
- if ( premanagedState )
- {
- child.setData( DependencyManagerUtils.NODE_DATA_PREMANAGED_VERSION, premanagedVersion );
- child.setData( DependencyManagerUtils.NODE_DATA_PREMANAGED_SCOPE, premanagedScope );
- child.setData( DependencyManagerUtils.NODE_DATA_PREMANAGED_OPTIONAL, premanagedOptional );
- }
- }
- }
-
-}
http://git-wip-us.apache.org/repos/asf/maven-aether/blob/27f8bd73/aether-impl/src/main/java/org/eclipse/aether/internal/impl/DefaultDependencyCycle.java
----------------------------------------------------------------------
diff --git a/aether-impl/src/main/java/org/eclipse/aether/internal/impl/DefaultDependencyCycle.java b/aether-impl/src/main/java/org/eclipse/aether/internal/impl/DefaultDependencyCycle.java
deleted file mode 100644
index 5ffcf67..0000000
--- a/aether-impl/src/main/java/org/eclipse/aether/internal/impl/DefaultDependencyCycle.java
+++ /dev/null
@@ -1,87 +0,0 @@
-package org.eclipse.aether.internal.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 java.util.Arrays;
-import java.util.Collections;
-import java.util.List;
-
-import org.eclipse.aether.graph.Dependency;
-import org.eclipse.aether.graph.DependencyCycle;
-import org.eclipse.aether.graph.DependencyNode;
-import org.eclipse.aether.util.artifact.ArtifactIdUtils;
-
-/**
- * @see DefaultDependencyCollector
- */
-final class DefaultDependencyCycle
- implements DependencyCycle
-{
-
- private final List<Dependency> dependencies;
-
- private final int cycleEntry;
-
- public DefaultDependencyCycle( NodeStack nodes, int cycleEntry, Dependency dependency )
- {
- // skip root node unless it actually has a dependency or is considered the cycle entry (due to its label)
- int offset = ( cycleEntry > 0 && nodes.get( 0 ).getDependency() == null ) ? 1 : 0;
- Dependency[] dependencies = new Dependency[nodes.size() - offset + 1];
- for ( int i = 0, n = dependencies.length - 1; i < n; i++ )
- {
- DependencyNode node = nodes.get( i + offset );
- dependencies[i] = node.getDependency();
- // when cycle starts at root artifact as opposed to root dependency, synthesize a dependency
- if ( dependencies[i] == null )
- {
- dependencies[i] = new Dependency( node.getArtifact(), null );
- }
- }
- dependencies[dependencies.length - 1] = dependency;
- this.dependencies = Collections.unmodifiableList( Arrays.asList( dependencies ) );
- this.cycleEntry = cycleEntry;
- }
-
- public List<Dependency> getPrecedingDependencies()
- {
- return dependencies.subList( 0, cycleEntry );
- }
-
- public List<Dependency> getCyclicDependencies()
- {
- return dependencies.subList( cycleEntry, dependencies.size() );
- }
-
- @Override
- public String toString()
- {
- StringBuilder buffer = new StringBuilder( 256 );
- for ( int i = 0, n = dependencies.size(); i < n; i++ )
- {
- if ( i > 0 )
- {
- buffer.append( " -> " );
- }
- buffer.append( ArtifactIdUtils.toVersionlessId( dependencies.get( i ).getArtifact() ) );
- }
- return buffer.toString();
- }
-
-}
http://git-wip-us.apache.org/repos/asf/maven-aether/blob/27f8bd73/aether-impl/src/main/java/org/eclipse/aether/internal/impl/DefaultDependencyGraphTransformationContext.java
----------------------------------------------------------------------
diff --git a/aether-impl/src/main/java/org/eclipse/aether/internal/impl/DefaultDependencyGraphTransformationContext.java b/aether-impl/src/main/java/org/eclipse/aether/internal/impl/DefaultDependencyGraphTransformationContext.java
deleted file mode 100644
index d877ad6..0000000
--- a/aether-impl/src/main/java/org/eclipse/aether/internal/impl/DefaultDependencyGraphTransformationContext.java
+++ /dev/null
@@ -1,80 +0,0 @@
-package org.eclipse.aether.internal.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 java.util.HashMap;
-import java.util.Map;
-
-import org.eclipse.aether.RepositorySystemSession;
-import org.eclipse.aether.collection.DependencyGraphTransformationContext;
-
-/**
- */
-class DefaultDependencyGraphTransformationContext
- implements DependencyGraphTransformationContext
-{
-
- private final RepositorySystemSession session;
-
- private final Map<Object, Object> map;
-
- public DefaultDependencyGraphTransformationContext( RepositorySystemSession session )
- {
- this.session = session;
- this.map = new HashMap<Object, Object>();
- }
-
- public RepositorySystemSession getSession()
- {
- return session;
- }
-
- public Object get( Object key )
- {
- if ( key == null )
- {
- throw new IllegalArgumentException( "key must not be null" );
- }
- return map.get( key );
- }
-
- public Object put( Object key, Object value )
- {
- if ( key == null )
- {
- throw new IllegalArgumentException( "key must not be null" );
- }
- if ( value != null )
- {
- return map.put( key, value );
- }
- else
- {
- return map.remove( key );
- }
- }
-
- @Override
- public String toString()
- {
- return String.valueOf( map );
- }
-
-}