Author: jdcasey Date: Thu Aug 27 16:58:21 2009 New Revision: 808520 URL: http://svn.apache.org/viewvc?rev=808520&view=rev Log: clean up the API some more, to avoid duplicate storage for remote repositories, eliminate the resulting simplistic wrapper around the local repository, then use the MavenSession as a better local-repository wrapper that can also supply caches and online/offline flags in 3.x without the need to change the API further.
Added: maven/shared/trunk/maven-artifact-resolver/src/test/java/org/apache/maven/shared/artifact/resolver/CumlativeScopeArtifactFilterTest.java (with props) Removed: maven/shared/trunk/maven-artifact-resolver/src/main/java/org/apache/maven/artifact/ maven/shared/trunk/maven-artifact-resolver/src/main/java/org/apache/maven/shared/artifact/resolver/DefaultRepositoryRequest.java maven/shared/trunk/maven-artifact-resolver/src/test/java/org/apache/maven/shared/artifact/resolver/CumlativeScopeArtifactFilter.java Modified: maven/shared/trunk/maven-artifact-resolver/pom.xml maven/shared/trunk/maven-artifact-resolver/src/main/java/org/apache/maven/ProjectDependenciesResolver.java maven/shared/trunk/maven-artifact-resolver/src/main/java/org/apache/maven/shared/artifact/resolver/CumulativeScopeArtifactFilter.java maven/shared/trunk/maven-artifact-resolver/src/main/java/org/apache/maven/shared/artifact/resolver/DefaultProjectDependenciesResolver.java Modified: maven/shared/trunk/maven-artifact-resolver/pom.xml URL: http://svn.apache.org/viewvc/maven/shared/trunk/maven-artifact-resolver/pom.xml?rev=808520&r1=808519&r2=808520&view=diff ============================================================================== --- maven/shared/trunk/maven-artifact-resolver/pom.xml (original) +++ maven/shared/trunk/maven-artifact-resolver/pom.xml Thu Aug 27 16:58:21 2009 @@ -21,31 +21,35 @@ </dependency> <dependency> <groupId>org.apache.maven</groupId> - <artifactId>maven-core</artifactId> + <artifactId>maven-artifact-manager</artifactId> <version>2.2.1</version> <type>jar</type> <scope>compile</scope> </dependency> <dependency> <groupId>org.apache.maven</groupId> - <artifactId>maven-artifact-manager</artifactId> + <artifactId>maven-artifact</artifactId> <version>2.2.1</version> <type>jar</type> <scope>compile</scope> </dependency> <dependency> <groupId>org.apache.maven</groupId> - <artifactId>maven-artifact</artifactId> + <artifactId>maven-project</artifactId> <version>2.2.1</version> <type>jar</type> <scope>compile</scope> </dependency> <dependency> + <groupId>org.easymock</groupId> + <artifactId>easymock</artifactId> + <version>2.4</version> + <scope>test</scope> + </dependency> + <dependency> <groupId>org.apache.maven</groupId> - <artifactId>maven-project</artifactId> + <artifactId>maven-core</artifactId> <version>2.2.1</version> - <type>jar</type> - <scope>compile</scope> </dependency> </dependencies> Modified: maven/shared/trunk/maven-artifact-resolver/src/main/java/org/apache/maven/ProjectDependenciesResolver.java URL: http://svn.apache.org/viewvc/maven/shared/trunk/maven-artifact-resolver/src/main/java/org/apache/maven/ProjectDependenciesResolver.java?rev=808520&r1=808519&r2=808520&view=diff ============================================================================== --- maven/shared/trunk/maven-artifact-resolver/src/main/java/org/apache/maven/ProjectDependenciesResolver.java (original) +++ maven/shared/trunk/maven-artifact-resolver/src/main/java/org/apache/maven/ProjectDependenciesResolver.java Thu Aug 27 16:58:21 2009 @@ -19,17 +19,16 @@ * under the License. */ -import java.util.Collection; -import java.util.Set; - import org.apache.maven.artifact.Artifact; -import org.apache.maven.artifact.repository.ArtifactRepository; -import org.apache.maven.artifact.repository.RepositoryRequest; import org.apache.maven.artifact.resolver.ArtifactNotFoundException; import org.apache.maven.artifact.resolver.ArtifactResolutionException; +import org.apache.maven.execution.MavenSession; import org.apache.maven.model.Dependency; import org.apache.maven.project.MavenProject; +import java.util.Collection; +import java.util.Set; + /** * Common interface for plugins and other third-party components running inside a Maven runtime to * resolve the transitive dependency closure for various {...@link MavenProject} instances. @@ -45,16 +44,14 @@ * * @param projects The projects whose dependencies should be resolved. * @param scopes The list of scopes to resolve. These scopes may imply other scopes. - * @param repositoryRequest The request containing a {...@link RepositoryCache}, along with - * zero or more {...@link ArtifactRepository} remote repositories, a local {...@link ArtifactRepository}, - * and a flag determining whether to run in offline mode. + * @param session Contains the local repository, along with other settings related to artifact resolution. * @return The set of resolved artifacts. If the projects contain no dependencies, this will return an empty set. * @throws ArtifactResolutionException In case {...@link Artifact} instances cannot be created from * project {...@link Dependency} instances, or artifact resolution fails. * @throws ArtifactNotFoundException In cases where one or more dependency artifacts cannot be found in the * various repositories. */ - public Set<Artifact> resolve( Collection<MavenProject> projects, Collection<String> scopes, RepositoryRequest repositoryRequest ) + public Set<Artifact> resolve( Collection<MavenProject> projects, Collection<String> scopes, MavenSession session ) throws ArtifactResolutionException, ArtifactNotFoundException; /** @@ -63,15 +60,13 @@ * * @param project The project whose dependencies should be resolved. * @param scopes The list of scopes to resolve. These scopes may imply other scopes. - * @param repositoryRequest The request containing a {...@link RepositoryCache}, along with - * zero or more {...@link ArtifactRepository} remote repositories, a local {...@link ArtifactRepository}, - * and a flag determining whether to run in offline mode. + * @param session Contains the local repository, along with other settings related to artifact resolution. * @return The set of resolved artifacts. If the project contains no dependencies, this will return an empty set. * @throws ArtifactResolutionException In case {...@link Artifact} instances cannot be created from the * project {...@link Dependency} instance, or artifact resolution fails. * @throws ArtifactNotFoundException In cases where one or more dependency artifacts cannot be found in the * various repositories. */ - public Set<Artifact> resolve( MavenProject project, Collection<String> scopes, RepositoryRequest repositoryRequest ) + public Set<Artifact> resolve( MavenProject project, Collection<String> scopes, MavenSession session ) throws ArtifactResolutionException, ArtifactNotFoundException; } Modified: maven/shared/trunk/maven-artifact-resolver/src/main/java/org/apache/maven/shared/artifact/resolver/CumulativeScopeArtifactFilter.java URL: http://svn.apache.org/viewvc/maven/shared/trunk/maven-artifact-resolver/src/main/java/org/apache/maven/shared/artifact/resolver/CumulativeScopeArtifactFilter.java?rev=808520&r1=808519&r2=808520&view=diff ============================================================================== --- maven/shared/trunk/maven-artifact-resolver/src/main/java/org/apache/maven/shared/artifact/resolver/CumulativeScopeArtifactFilter.java (original) +++ maven/shared/trunk/maven-artifact-resolver/src/main/java/org/apache/maven/shared/artifact/resolver/CumulativeScopeArtifactFilter.java Thu Aug 27 16:58:21 2009 @@ -34,7 +34,7 @@ * @author jdcasey * @version $Id$ */ -public class CumulativeScopeArtifactFilter +final class CumulativeScopeArtifactFilter implements ArtifactFilter { private boolean compileScope; @@ -50,7 +50,7 @@ /** * Create a new filter with all scopes disabled. */ - public CumulativeScopeArtifactFilter() + CumulativeScopeArtifactFilter() { } @@ -58,7 +58,7 @@ * Create a new filter with the specified scope and its implied scopes enabled. * @param scope The scope to enable, along with all implied scopes. */ - public CumulativeScopeArtifactFilter( String scope ) + CumulativeScopeArtifactFilter( String scope ) { addScope( scope ); } @@ -67,7 +67,7 @@ * Enable a new scope, along with its implied scopes, in this filter. * @param scope The scope to enable, along with all implied scopes. */ - public void addScope( String scope ) + void addScope( String scope ) { if ( DefaultArtifact.SCOPE_COMPILE.equals( scope ) ) { Modified: maven/shared/trunk/maven-artifact-resolver/src/main/java/org/apache/maven/shared/artifact/resolver/DefaultProjectDependenciesResolver.java URL: http://svn.apache.org/viewvc/maven/shared/trunk/maven-artifact-resolver/src/main/java/org/apache/maven/shared/artifact/resolver/DefaultProjectDependenciesResolver.java?rev=808520&r1=808519&r2=808520&view=diff ============================================================================== --- maven/shared/trunk/maven-artifact-resolver/src/main/java/org/apache/maven/shared/artifact/resolver/DefaultProjectDependenciesResolver.java (original) +++ maven/shared/trunk/maven-artifact-resolver/src/main/java/org/apache/maven/shared/artifact/resolver/DefaultProjectDependenciesResolver.java Thu Aug 27 16:58:21 2009 @@ -24,14 +24,13 @@ import org.apache.maven.ProjectDependenciesResolver; import org.apache.maven.artifact.Artifact; import org.apache.maven.artifact.factory.ArtifactFactory; -import org.apache.maven.artifact.manager.WagonManager; import org.apache.maven.artifact.metadata.ArtifactMetadataSource; -import org.apache.maven.artifact.repository.RepositoryRequest; import org.apache.maven.artifact.resolver.ArtifactNotFoundException; import org.apache.maven.artifact.resolver.ArtifactResolutionException; import org.apache.maven.artifact.resolver.ArtifactResolutionResult; import org.apache.maven.artifact.resolver.ArtifactResolver; import org.apache.maven.artifact.resolver.MultipleArtifactsNotFoundException; +import org.apache.maven.execution.MavenSession; import org.apache.maven.project.MavenProject; import org.apache.maven.project.artifact.InvalidDependencyVersionException; @@ -50,7 +49,7 @@ * @see ProjectDependenciesResolver * @plexus.component role="org.apache.maven.shared.artifact.resolver.ProjectDependenciesResolver" role-hint="default" */ -public class DefaultProjectDependenciesResolver +public final class DefaultProjectDependenciesResolver implements ProjectDependenciesResolver { @@ -70,15 +69,10 @@ private ArtifactMetadataSource metadataSource; /** - * @plexus.requirement - */ - private WagonManager wagonManager; - - /** * {...@inheritdoc} */ @SuppressWarnings( "unchecked" ) - public Set<Artifact> resolve( Collection<MavenProject> projects, Collection<String> scopes, RepositoryRequest repositoryRequest ) + public Set<Artifact> resolve( final Collection<MavenProject> projects, final Collection<String> scopes, final MavenSession session ) throws ArtifactResolutionException, ArtifactNotFoundException { if ( projects == null || projects.isEmpty() ) @@ -86,105 +80,95 @@ return Collections.emptySet(); } - boolean online = wagonManager.isOnline(); Set<Artifact> resolved = new LinkedHashSet<Artifact>(); - try + CumulativeScopeArtifactFilter scopeFilter = new CumulativeScopeArtifactFilter(); + if ( scopes == null ) { - wagonManager.setOnline( !repositoryRequest.isOffline() ); - - CumulativeScopeArtifactFilter scopeFilter = new CumulativeScopeArtifactFilter(); - if ( scopes == null ) + scopeFilter.addScope( Artifact.SCOPE_COMPILE ); + } + else + { + for ( String scope : scopes ) { - scopeFilter.addScope( Artifact.SCOPE_COMPILE ); + scopeFilter.addScope( scope ); } - else + } + + for ( MavenProject project : projects ) + { + Set<Artifact> depArtifacts = (Set<Artifact>) project.getDependencyArtifacts(); + if ( depArtifacts == null ) { - for ( String scope : scopes ) + try { - scopeFilter.addScope( scope ); + depArtifacts = project.createArtifacts( artifactFactory, null, scopeFilter ); + } + catch ( InvalidDependencyVersionException e ) + { + throw new ArtifactResolutionException( "Failed to create Artifact instances for project dependencies: " + + e.getMessage(), null, e ); } } - for ( MavenProject project : projects ) + if ( depArtifacts == null || depArtifacts.isEmpty() ) + { + continue; + } + + for ( Iterator<Artifact> it = depArtifacts.iterator(); it.hasNext(); ) { - Set<Artifact> depArtifacts = (Set<Artifact>) project.getDependencyArtifacts(); - if ( depArtifacts == null ) + Artifact artifact = it.next(); + if ( resolved.contains( artifact ) ) { - try - { - depArtifacts = project.createArtifacts( artifactFactory, null, scopeFilter ); - } - catch ( InvalidDependencyVersionException e ) - { - throw new ArtifactResolutionException( "Failed to create Artifact instances for project dependencies: " - + e.getMessage(), null, e ); - } + // already resolved, don't do it again. + it.remove(); } - - if ( depArtifacts == null || depArtifacts.isEmpty() ) + } + + Artifact projectArtifact = project.getArtifact(); + if ( projectArtifact == null ) + { + projectArtifact = artifactFactory.createProjectArtifact( project.getGroupId(), project.getArtifactId(), + project.getVersion() ); + } + + try + { + ArtifactResolutionResult result = resolver.resolveTransitively( depArtifacts, projectArtifact, + project.getManagedVersionMap(), + session.getLocalRepository(), + project.getRemoteArtifactRepositories(), + metadataSource, scopeFilter ); + + if ( result.getArtifacts() != null && !result.getArtifacts().isEmpty() ) { - continue; + resolved.addAll( result.getArtifacts() ); } - - for ( Iterator<Artifact> it = depArtifacts.iterator(); it.hasNext(); ) + } + catch ( MultipleArtifactsNotFoundException me ) + { + Set<String> projectIds = getProjectIds( projects ); + Collection<Artifact> missing = new HashSet<Artifact>( me.getMissingArtifacts() ); + for ( Iterator<Artifact> it = missing.iterator(); it.hasNext(); ) { Artifact artifact = it.next(); - if ( resolved.contains( artifact ) ) + if ( projectIds.contains( getProjectReferenceId( artifact.getGroupId(), artifact.getArtifactId(), + artifact.getVersion() ) ) ) { - // already resolved, don't do it again. it.remove(); } } - - Artifact projectArtifact = project.getArtifact(); - if ( projectArtifact == null ) - { - projectArtifact = artifactFactory.createProjectArtifact( project.getGroupId(), project.getArtifactId(), - project.getVersion() ); - } - - try - { - ArtifactResolutionResult result = resolver.resolveTransitively( depArtifacts, projectArtifact, - project.getManagedVersionMap(), - repositoryRequest.getLocalRepository(), - repositoryRequest.getRemoteRepositories(), - metadataSource, scopeFilter ); - if ( result.getArtifacts() != null && !result.getArtifacts().isEmpty() ) - { - resolved.addAll( result.getArtifacts() ); - } + if ( missing.isEmpty() ) + { + resolved.addAll( me.getResolvedArtifacts() ); } - catch ( MultipleArtifactsNotFoundException me ) + else { - Set<String> projectIds = getProjectIds( projects ); - Collection<Artifact> missing = new HashSet<Artifact>( me.getMissingArtifacts() ); - for ( Iterator<Artifact> it = missing.iterator(); it.hasNext(); ) - { - Artifact artifact = it.next(); - if ( projectIds.contains( getProjectReferenceId( artifact.getGroupId(), artifact.getArtifactId(), - artifact.getVersion() ) ) ) - { - it.remove(); - } - } - - if ( missing.isEmpty() ) - { - resolved.addAll( me.getResolvedArtifacts() ); - } - else - { - throw me; - } + throw me; } } } - finally - { - wagonManager.setOnline( online ); - } return resolved; } @@ -192,15 +176,15 @@ /** * {...@inheritdoc} */ - public Set<Artifact> resolve( MavenProject project, Collection<String> scopes, RepositoryRequest repositoryRequest ) + public Set<Artifact> resolve( final MavenProject project, final Collection<String> scopes, final MavenSession session ) throws ArtifactResolutionException, ArtifactNotFoundException { Collection<MavenProject> projects = Collections.singleton( project ); - return resolve( projects, scopes, repositoryRequest ); + return resolve( projects, scopes, session ); } - private Set<String> getProjectIds( Collection<MavenProject> projects ) + private Set<String> getProjectIds( final Collection<MavenProject> projects ) { Set<String> ids = new HashSet<String>(); if ( projects != null && !projects.isEmpty() ) Added: maven/shared/trunk/maven-artifact-resolver/src/test/java/org/apache/maven/shared/artifact/resolver/CumlativeScopeArtifactFilterTest.java URL: http://svn.apache.org/viewvc/maven/shared/trunk/maven-artifact-resolver/src/test/java/org/apache/maven/shared/artifact/resolver/CumlativeScopeArtifactFilterTest.java?rev=808520&view=auto ============================================================================== --- maven/shared/trunk/maven-artifact-resolver/src/test/java/org/apache/maven/shared/artifact/resolver/CumlativeScopeArtifactFilterTest.java (added) +++ maven/shared/trunk/maven-artifact-resolver/src/test/java/org/apache/maven/shared/artifact/resolver/CumlativeScopeArtifactFilterTest.java Thu Aug 27 16:58:21 2009 @@ -0,0 +1,14 @@ +package org.apache.maven.shared.artifact.resolver; + +import org.junit.Test; + +public class CumlativeScopeArtifactFilterTest +{ + + @Test + public void testNothingEnabledWhenNoScopesAdded() + { + + } + +} Propchange: maven/shared/trunk/maven-artifact-resolver/src/test/java/org/apache/maven/shared/artifact/resolver/CumlativeScopeArtifactFilterTest.java ------------------------------------------------------------------------------ svn:eol-style = native