You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@maven.apache.org by be...@apache.org on 2009/08/30 18:09:33 UTC
svn commit: r809365 - in /maven/components/trunk:
maven-compat/src/main/java/org/apache/maven/artifact/resolver/filter/
maven-core/src/main/java/org/apache/maven/
maven-core/src/main/java/org/apache/maven/lifecycle/
maven-core/src/test/java/org/apache/...
Author: bentmann
Date: Sun Aug 30 16:09:32 2009
New Revision: 809365
URL: http://svn.apache.org/viewvc?rev=809365&view=rev
Log:
o Synced ProjectDependenciesResolver with MSHARED-126
Added:
maven/components/trunk/maven-compat/src/main/java/org/apache/maven/artifact/resolver/filter/AbstractScopeArtifactFilter.java
- copied, changed from r809322, maven/components/trunk/maven-compat/src/main/java/org/apache/maven/artifact/resolver/filter/ScopeArtifactFilter.java
maven/components/trunk/maven-compat/src/main/java/org/apache/maven/artifact/resolver/filter/CumulativeScopeArtifactFilter.java
- copied, changed from r809325, maven/shared/trunk/maven-artifact-resolver/src/main/java/org/apache/maven/shared/artifact/resolver/CumulativeScopeArtifactFilter.java
Modified:
maven/components/trunk/maven-compat/src/main/java/org/apache/maven/artifact/resolver/filter/ScopeArtifactFilter.java
maven/components/trunk/maven-core/src/main/java/org/apache/maven/DefaultProjectDependenciesResolver.java
maven/components/trunk/maven-core/src/main/java/org/apache/maven/ProjectDependenciesResolver.java
maven/components/trunk/maven-core/src/main/java/org/apache/maven/lifecycle/DefaultLifecycleExecutor.java
maven/components/trunk/maven-core/src/test/java/org/apache/maven/AbstractCoreMavenComponentTestCase.java
maven/components/trunk/maven-core/src/test/java/org/apache/maven/ProjectDependenciesResolverTest.java
Copied: maven/components/trunk/maven-compat/src/main/java/org/apache/maven/artifact/resolver/filter/AbstractScopeArtifactFilter.java (from r809322, maven/components/trunk/maven-compat/src/main/java/org/apache/maven/artifact/resolver/filter/ScopeArtifactFilter.java)
URL: http://svn.apache.org/viewvc/maven/components/trunk/maven-compat/src/main/java/org/apache/maven/artifact/resolver/filter/AbstractScopeArtifactFilter.java?p2=maven/components/trunk/maven-compat/src/main/java/org/apache/maven/artifact/resolver/filter/AbstractScopeArtifactFilter.java&p1=maven/components/trunk/maven-compat/src/main/java/org/apache/maven/artifact/resolver/filter/ScopeArtifactFilter.java&r1=809322&r2=809365&rev=809365&view=diff
==============================================================================
--- maven/components/trunk/maven-compat/src/main/java/org/apache/maven/artifact/resolver/filter/ScopeArtifactFilter.java (original)
+++ maven/components/trunk/maven-compat/src/main/java/org/apache/maven/artifact/resolver/filter/AbstractScopeArtifactFilter.java Sun Aug 30 16:09:32 2009
@@ -27,40 +27,32 @@
* @author <a href="mailto:brett@apache.org">Brett Porter</a>
* @version $Id$
*/
-public class ScopeArtifactFilter
+abstract class AbstractScopeArtifactFilter
implements ArtifactFilter
{
- private final boolean compileScope;
- private final boolean runtimeScope;
+ private boolean compileScope;
- private final boolean testScope;
+ private boolean runtimeScope;
- private final boolean providedScope;
+ private boolean testScope;
- private final boolean systemScope;
+ private boolean providedScope;
- private final String scope;
-
- public ScopeArtifactFilter( String scope )
+ private boolean systemScope;
+
+ void addScope( String scope )
{
- this.scope = scope;
-
if ( Artifact.SCOPE_COMPILE.equals( scope ) )
{
systemScope = true;
providedScope = true;
compileScope = true;
- runtimeScope = false;
- testScope = false;
}
else if ( Artifact.SCOPE_RUNTIME.equals( scope ) )
{
- systemScope = false;
- providedScope = false;
compileScope = true;
runtimeScope = true;
- testScope = false;
}
else if ( Artifact.SCOPE_COMPILE_PLUS_RUNTIME.equals( scope ) )
{
@@ -68,15 +60,12 @@
providedScope = true;
compileScope = true;
runtimeScope = true;
- testScope = false;
}
else if ( Artifact.SCOPE_RUNTIME_PLUS_SYSTEM.equals( scope ) )
{
systemScope = true;
- providedScope = false;
compileScope = true;
runtimeScope = true;
- testScope = false;
}
else if ( Artifact.SCOPE_TEST.equals( scope ) )
{
@@ -86,14 +75,6 @@
runtimeScope = true;
testScope = true;
}
- else
- {
- systemScope = false;
- providedScope = false;
- compileScope = false;
- runtimeScope = false;
- testScope = false;
- }
}
public boolean include( Artifact artifact )
@@ -124,41 +105,4 @@
}
}
- public String getScope()
- {
- return scope;
- }
-
- @Override
- public int hashCode()
- {
- int hash = 17;
-
- hash = hash * 31 + ( scope != null ? scope.hashCode() : 0 );
-
- return hash;
- }
-
- @Override
- public boolean equals( Object obj )
- {
- if ( this == obj )
- {
- return true;
- }
-
- if ( !( obj instanceof ScopeArtifactFilter ) )
- {
- return false;
- }
-
- ScopeArtifactFilter other = (ScopeArtifactFilter) obj;
-
- return equals( scope, other.scope );
- }
-
- private static boolean equals( String str1, String str2 )
- {
- return str1 != null ? str1.equals( str2 ) : str2 == null;
- }
}
Copied: maven/components/trunk/maven-compat/src/main/java/org/apache/maven/artifact/resolver/filter/CumulativeScopeArtifactFilter.java (from r809325, maven/shared/trunk/maven-artifact-resolver/src/main/java/org/apache/maven/shared/artifact/resolver/CumulativeScopeArtifactFilter.java)
URL: http://svn.apache.org/viewvc/maven/components/trunk/maven-compat/src/main/java/org/apache/maven/artifact/resolver/filter/CumulativeScopeArtifactFilter.java?p2=maven/components/trunk/maven-compat/src/main/java/org/apache/maven/artifact/resolver/filter/CumulativeScopeArtifactFilter.java&p1=maven/shared/trunk/maven-artifact-resolver/src/main/java/org/apache/maven/shared/artifact/resolver/CumulativeScopeArtifactFilter.java&r1=809325&r2=809365&rev=809365&view=diff
==============================================================================
--- maven/shared/trunk/maven-artifact-resolver/src/main/java/org/apache/maven/shared/artifact/resolver/CumulativeScopeArtifactFilter.java (original)
+++ maven/components/trunk/maven-compat/src/main/java/org/apache/maven/artifact/resolver/filter/CumulativeScopeArtifactFilter.java Sun Aug 30 16:09:32 2009
@@ -1,4 +1,4 @@
-package org.apache.maven.shared.artifact.resolver;
+package org.apache.maven.artifact.resolver.filter;
/*
* Licensed to the Apache Software Foundation (ASF) under one
@@ -20,59 +20,38 @@
*/
import java.util.Collection;
-
-import org.apache.maven.artifact.Artifact;
-import org.apache.maven.artifact.resolver.filter.ArtifactFilter;
-import org.apache.maven.artifact.resolver.filter.ScopeArtifactFilter;
+import java.util.HashSet;
+import java.util.Set;
/**
- * Filter to only retain objects in the given scope or better. This implementation allows the
- * accumulation of multiple scopes and their associated implied scopes, so that the user can filter
- * apply a series of implication rules in a single step. This should be a more efficient implementation
- * of multiple standard {@link ScopeArtifactFilter} instances ORed together.
- *
+ * Filter to only retain objects in the given scope or better. This implementation allows the accumulation of multiple
+ * scopes and their associated implied scopes, so that the user can filter apply a series of implication rules in a
+ * single step. This should be a more efficient implementation of multiple standard {@link ScopeArtifactFilter}
+ * instances ORed together.
+ *
* @author <a href="mailto:brett@apache.org">Brett Porter</a>
* @author jdcasey
* @version $Id$
*/
-final class CumulativeScopeArtifactFilter
- implements ArtifactFilter
+public class CumulativeScopeArtifactFilter
+ extends AbstractScopeArtifactFilter
{
- private boolean compileScope;
-
- private boolean runtimeScope;
-
- private boolean testScope;
-
- private boolean providedScope;
-
- private boolean systemScope;
- /**
- * Create a new filter with all scopes disabled.
- */
- CumulativeScopeArtifactFilter()
- {
- }
-
- /**
- * Create a new filter with the specified scope and its implied scopes enabled.
- * @param scope The scope to enable, along with all implied scopes.
- */
- CumulativeScopeArtifactFilter( String scope )
- {
- addScope( scope );
- }
+ private Set<String> scopes;
/**
* Create a new filter with the specified scopes and their implied scopes enabled.
*
* @param scopes The scopes to enable, along with all implied scopes, may be {@code null}.
*/
- CumulativeScopeArtifactFilter( Collection<String> scopes )
+ public CumulativeScopeArtifactFilter( Collection<String> scopes )
{
+ this.scopes = new HashSet<String>();
+
if ( scopes != null )
{
+ this.scopes.addAll( scopes );
+
for ( String scope : scopes )
{
addScope( scope );
@@ -80,65 +59,37 @@
}
}
- /**
- * Enable a new scope, along with its implied scopes, in this filter.
- * @param scope The scope to enable, along with all implied scopes.
- */
- void addScope( String scope )
+ public Set<String> getScopes()
{
- if ( Artifact.SCOPE_COMPILE.equals( scope ) )
- {
- systemScope = true;
- providedScope = true;
- compileScope = true;
- }
- else if ( Artifact.SCOPE_RUNTIME.equals( scope ) )
- {
- compileScope = true;
- runtimeScope = true;
- }
- else if ( Artifact.SCOPE_TEST.equals( scope ) )
- {
- systemScope = true;
- providedScope = true;
- compileScope = true;
- runtimeScope = true;
- testScope = true;
- }
- else if ( Artifact.SCOPE_PROVIDED.equals( scope ) )
- {
- providedScope = true;
- }
+ return scopes;
}
- /**
- * {@inheritDoc}
- */
- public boolean include( Artifact artifact )
+ @Override
+ public int hashCode()
{
- if ( Artifact.SCOPE_COMPILE.equals( artifact.getScope() ) )
- {
- return compileScope;
- }
- else if ( Artifact.SCOPE_RUNTIME.equals( artifact.getScope() ) )
- {
- return runtimeScope;
- }
- else if ( Artifact.SCOPE_TEST.equals( artifact.getScope() ) )
- {
- return testScope;
- }
- else if ( Artifact.SCOPE_PROVIDED.equals( artifact.getScope() ) )
- {
- return providedScope;
- }
- else if ( Artifact.SCOPE_SYSTEM.equals( artifact.getScope() ) )
+ int hash = 17;
+
+ hash = hash * 31 + scopes.hashCode();
+
+ return hash;
+ }
+
+ @Override
+ public boolean equals( Object obj )
+ {
+ if ( this == obj )
{
- return systemScope;
+ return true;
}
- else
+
+ if ( !( obj instanceof CumulativeScopeArtifactFilter ) )
{
- return true;
+ return false;
}
+
+ CumulativeScopeArtifactFilter that = (CumulativeScopeArtifactFilter) obj;
+
+ return scopes.equals( that.scopes );
}
+
}
Modified: maven/components/trunk/maven-compat/src/main/java/org/apache/maven/artifact/resolver/filter/ScopeArtifactFilter.java
URL: http://svn.apache.org/viewvc/maven/components/trunk/maven-compat/src/main/java/org/apache/maven/artifact/resolver/filter/ScopeArtifactFilter.java?rev=809365&r1=809364&r2=809365&view=diff
==============================================================================
--- maven/components/trunk/maven-compat/src/main/java/org/apache/maven/artifact/resolver/filter/ScopeArtifactFilter.java (original)
+++ maven/components/trunk/maven-compat/src/main/java/org/apache/maven/artifact/resolver/filter/ScopeArtifactFilter.java Sun Aug 30 16:09:32 2009
@@ -19,8 +19,6 @@
* under the License.
*/
-import org.apache.maven.artifact.Artifact;
-
/**
* Filter to only retain objects in the given artifactScope or better.
*
@@ -28,100 +26,16 @@
* @version $Id$
*/
public class ScopeArtifactFilter
- implements ArtifactFilter
+ extends AbstractScopeArtifactFilter
{
- private final boolean compileScope;
-
- private final boolean runtimeScope;
-
- private final boolean testScope;
-
- private final boolean providedScope;
-
- private final boolean systemScope;
private final String scope;
-
+
public ScopeArtifactFilter( String scope )
{
this.scope = scope;
-
- if ( Artifact.SCOPE_COMPILE.equals( scope ) )
- {
- systemScope = true;
- providedScope = true;
- compileScope = true;
- runtimeScope = false;
- testScope = false;
- }
- else if ( Artifact.SCOPE_RUNTIME.equals( scope ) )
- {
- systemScope = false;
- providedScope = false;
- compileScope = true;
- runtimeScope = true;
- testScope = false;
- }
- else if ( Artifact.SCOPE_COMPILE_PLUS_RUNTIME.equals( scope ) )
- {
- systemScope = true;
- providedScope = true;
- compileScope = true;
- runtimeScope = true;
- testScope = false;
- }
- else if ( Artifact.SCOPE_RUNTIME_PLUS_SYSTEM.equals( scope ) )
- {
- systemScope = true;
- providedScope = false;
- compileScope = true;
- runtimeScope = true;
- testScope = false;
- }
- else if ( Artifact.SCOPE_TEST.equals( scope ) )
- {
- systemScope = true;
- providedScope = true;
- compileScope = true;
- runtimeScope = true;
- testScope = true;
- }
- else
- {
- systemScope = false;
- providedScope = false;
- compileScope = false;
- runtimeScope = false;
- testScope = false;
- }
- }
- public boolean include( Artifact artifact )
- {
- if ( Artifact.SCOPE_COMPILE.equals( artifact.getScope() ) )
- {
- return compileScope;
- }
- else if ( Artifact.SCOPE_RUNTIME.equals( artifact.getScope() ) )
- {
- return runtimeScope;
- }
- else if ( Artifact.SCOPE_TEST.equals( artifact.getScope() ) )
- {
- return testScope;
- }
- else if ( Artifact.SCOPE_PROVIDED.equals( artifact.getScope() ) )
- {
- return providedScope;
- }
- else if ( Artifact.SCOPE_SYSTEM.equals( artifact.getScope() ) )
- {
- return systemScope;
- }
- else
- {
- return true;
- }
+ addScope( scope );
}
public String getScope()
@@ -146,19 +60,20 @@
{
return true;
}
-
+
if ( !( obj instanceof ScopeArtifactFilter ) )
{
return false;
}
-
+
ScopeArtifactFilter other = (ScopeArtifactFilter) obj;
return equals( scope, other.scope );
}
- private static boolean equals( String str1, String str2 )
+ private static <T> boolean equals( T str1, T str2 )
{
return str1 != null ? str1.equals( str2 ) : str2 == null;
}
+
}
Modified: maven/components/trunk/maven-core/src/main/java/org/apache/maven/DefaultProjectDependenciesResolver.java
URL: http://svn.apache.org/viewvc/maven/components/trunk/maven-core/src/main/java/org/apache/maven/DefaultProjectDependenciesResolver.java?rev=809365&r1=809364&r2=809365&view=diff
==============================================================================
--- maven/components/trunk/maven-core/src/main/java/org/apache/maven/DefaultProjectDependenciesResolver.java (original)
+++ maven/components/trunk/maven-core/src/main/java/org/apache/maven/DefaultProjectDependenciesResolver.java Sun Aug 30 16:09:32 2009
@@ -20,21 +20,23 @@
*/
import java.util.Collection;
+import java.util.Collections;
import java.util.HashSet;
+import java.util.Iterator;
import java.util.LinkedHashSet;
import java.util.Set;
import org.apache.maven.artifact.Artifact;
-import org.apache.maven.artifact.repository.RepositoryRequest;
+import org.apache.maven.artifact.ArtifactUtils;
import org.apache.maven.artifact.resolver.ArtifactNotFoundException;
import org.apache.maven.artifact.resolver.ArtifactResolutionException;
import org.apache.maven.artifact.resolver.ArtifactResolutionRequest;
import org.apache.maven.artifact.resolver.ArtifactResolutionResult;
+import org.apache.maven.artifact.resolver.MultipleArtifactsNotFoundException;
import org.apache.maven.artifact.resolver.ResolutionErrorHandler;
import org.apache.maven.artifact.resolver.filter.ArtifactFilter;
-import org.apache.maven.artifact.resolver.filter.OrArtifactFilter;
-import org.apache.maven.artifact.resolver.filter.ScopeArtifactFilter;
-import org.apache.maven.model.Dependency;
+import org.apache.maven.artifact.resolver.filter.CumulativeScopeArtifactFilter;
+import org.apache.maven.execution.MavenSession;
import org.apache.maven.project.MavenProject;
import org.apache.maven.project.artifact.ProjectArtifact;
import org.apache.maven.repository.RepositorySystem;
@@ -45,17 +47,32 @@
public class DefaultProjectDependenciesResolver
implements ProjectDependenciesResolver
{
+
@Requirement
private RepositorySystem repositorySystem;
-
+
@Requirement
private ResolutionErrorHandler resolutionErrorHandler;
-
- 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
- {
+ {
+ return resolve( Collections.singleton( project ), scopes, session );
+ }
+
+ public Set<Artifact> resolve( Collection<? extends MavenProject> projects, Collection<String> scopes,
+ MavenSession session )
+ throws ArtifactResolutionException, ArtifactNotFoundException
+ {
+ Set<Artifact> resolved = new LinkedHashSet<Artifact>();
+
+ if ( projects == null || projects.isEmpty() )
+ {
+ return resolved;
+ }
+
/*
-
+
Logic for transitve global exclusions
List<String> exclusions = new ArrayList<String>();
@@ -85,46 +102,67 @@
}
*/
- OrArtifactFilter scopeFilter = new OrArtifactFilter();
-
- for ( String scope : scopes )
- {
- scopeFilter.add( new ScopeArtifactFilter( scope ) );
- }
+ ArtifactFilter scopeFilter = new CumulativeScopeArtifactFilter( scopes );
ArtifactFilter filter = scopeFilter;
- ArtifactResolutionRequest request = new ArtifactResolutionRequest( repositoryRequest )
- .setArtifact( new ProjectArtifact( project ) )
+ ArtifactResolutionRequest request = new ArtifactResolutionRequest()
.setResolveRoot( false )
.setResolveTransitively( true )
- .setManagedVersionMap( project.getManagedVersionMap() )
- .setFilter( filter );
+ .setFilter( filter )
+ .setLocalRepository( session.getLocalRepository() )
+ .setOffline( session.isOffline() )
+ .setCache( session.getRepositoryCache() );
// FIXME setTransferListener
-
- ArtifactResolutionResult result = repositorySystem.resolve( request );
- project.setArtifacts( result.getArtifacts() );
+ Set<String> projectIds = null;
- Set<String> directDependencies = new HashSet<String>( project.getDependencies().size() * 2 );
- for ( Dependency dependency : project.getDependencies() )
+ for ( MavenProject project : projects )
{
- directDependencies.add( dependency.getManagementKey() );
- }
+ request.setArtifact( new ProjectArtifact( project ) );
+ request.setManagedVersionMap( project.getManagedVersionMap() );
+ request.setRemoteRepositories( project.getRemoteArtifactRepositories() );
- Set<Artifact> dependencyArtifacts = new LinkedHashSet<Artifact>( project.getDependencies().size() * 2 );
- for ( Artifact artifact : result.getArtifacts() )
- {
- if ( directDependencies.contains( artifact.getDependencyConflictId() ) )
+ ArtifactResolutionResult result = repositorySystem.resolve( request );
+
+ try
{
- dependencyArtifacts.add( artifact );
+ resolutionErrorHandler.throwErrors( request, result );
}
- }
- project.setDependencyArtifacts( dependencyArtifacts );
+ catch ( MultipleArtifactsNotFoundException e )
+ {
+ if ( projectIds == null )
+ {
+ projectIds = new HashSet<String>( projects.size() * 2 );
+
+ for ( MavenProject p : projects )
+ {
+ String key = ArtifactUtils.key( p.getGroupId(), p.getArtifactId(), p.getVersion() );
+ projectIds.add( key );
+ }
+ }
+
+ Collection<Artifact> missing = new HashSet<Artifact>( e.getMissingArtifacts() );
- resolutionErrorHandler.throwErrors( request, result );
+ for ( Iterator<Artifact> it = missing.iterator(); it.hasNext(); )
+ {
+ String key = ArtifactUtils.key( it.next() );
+ if ( projectIds.contains( key ) )
+ {
+ it.remove();
+ }
+ }
+
+ if ( !missing.isEmpty() )
+ {
+ throw e;
+ }
+ }
+
+ resolved.addAll( result.getArtifacts() );
+ }
- return result.getArtifacts();
+ return resolved;
}
}
Modified: maven/components/trunk/maven-core/src/main/java/org/apache/maven/ProjectDependenciesResolver.java
URL: http://svn.apache.org/viewvc/maven/components/trunk/maven-core/src/main/java/org/apache/maven/ProjectDependenciesResolver.java?rev=809365&r1=809364&r2=809365&view=diff
==============================================================================
--- maven/components/trunk/maven-core/src/main/java/org/apache/maven/ProjectDependenciesResolver.java (original)
+++ maven/components/trunk/maven-core/src/main/java/org/apache/maven/ProjectDependenciesResolver.java Sun Aug 30 16:09:32 2009
@@ -23,13 +23,39 @@
import java.util.Set;
import org.apache.maven.artifact.Artifact;
-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.project.MavenProject;
public interface ProjectDependenciesResolver
{
- public Set<Artifact> resolve( MavenProject project, Collection<String> scopes, RepositoryRequest repositoryRequest )
+
+ /**
+ * Resolves the transitive dependencies of the specified project.
+ *
+ * @param project The project whose dependencies should be resolved, must not be {@code null}.
+ * @param scopes The dependency scopes that should be resolved, may be {@code null}.
+ * @param session The current build session, must not be {@code null}.
+ * @return The transitive dependencies of the specified project that match the requested scopes, never {@code null}.
+ */
+ public Set<Artifact> resolve( MavenProject project, Collection<String> scopes, MavenSession session )
+ throws ArtifactResolutionException, ArtifactNotFoundException;
+
+ /**
+ * Resolves the transitive dependencies of the specified projects. Note that dependencies which can't be resolved
+ * from any repository but are present among the set of specified projects will not cause an exception. Instead,
+ * those unresolved artifacts will be returned in the result set, allowing the caller to take special care of
+ * artifacts that haven't been build yet.
+ *
+ * @param projects The projects whose dependencies should be resolved, may be {@code null}.
+ * @param scopes The dependency scopes that should be resolved, may be {@code null}.
+ * @param session The current build session, must not be {@code null}.
+ * @return The transitive dependencies of the specified projects that match the requested scopes, never {@code null}
+ * .
+ */
+ public Set<Artifact> resolve( Collection<? extends MavenProject> projects, Collection<String> scopes,
+ MavenSession session )
throws ArtifactResolutionException, ArtifactNotFoundException;
+
}
Modified: maven/components/trunk/maven-core/src/main/java/org/apache/maven/lifecycle/DefaultLifecycleExecutor.java
URL: http://svn.apache.org/viewvc/maven/components/trunk/maven-core/src/main/java/org/apache/maven/lifecycle/DefaultLifecycleExecutor.java?rev=809365&r1=809364&r2=809365&view=diff
==============================================================================
--- maven/components/trunk/maven-core/src/main/java/org/apache/maven/lifecycle/DefaultLifecycleExecutor.java (original)
+++ maven/components/trunk/maven-core/src/main/java/org/apache/maven/lifecycle/DefaultLifecycleExecutor.java Sun Aug 30 16:09:32 2009
@@ -24,6 +24,7 @@
import java.util.HashSet;
import java.util.Iterator;
import java.util.LinkedHashMap;
+import java.util.LinkedHashSet;
import java.util.List;
import java.util.Map;
import java.util.Set;
@@ -35,6 +36,8 @@
import org.apache.maven.artifact.ArtifactUtils;
import org.apache.maven.artifact.repository.DefaultRepositoryRequest;
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.MultipleArtifactsNotFoundException;
import org.apache.maven.execution.BuildFailure;
import org.apache.maven.execution.BuildSuccess;
@@ -306,37 +309,7 @@
for ( MavenProject project : projectsToResolve )
{
- repositoryRequest.setRemoteRepositories( project.getRemoteArtifactRepositories() );
-
- try
- {
- projectDependenciesResolver.resolve( project, executionPlan.getRequiredResolutionScopes(),
- repositoryRequest );
- }
- catch ( MultipleArtifactsNotFoundException e )
- {
- /*
- * MNG-2277, the check below compensates for our bad plugin support where we ended up with
- * aggregator plugins that require dependency resolution although they usually run in phases of
- * the build where project artifacts haven't been assembled yet. The prime example of this is
- * "mvn release:prepare".
- */
- if ( projectBuild.taskSegment.aggregating
- && areAllArtifactsInReactor( session.getProjects(), e.getMissingArtifacts() ) )
- {
- logger.warn( "The following artifacts could not be resolved at this point of the build"
- + " but seem to be part of the reactor:" );
- for ( Artifact artifact : e.getMissingArtifacts() )
- {
- logger.warn( "o " + artifact.getId() );
- }
- logger.warn( "Try running the build up to the lifecycle phase \"package\"" );
- }
- else
- {
- throw e;
- }
- }
+ resolveProjectDependencies( project, executionPlan, session, projectBuild.taskSegment.aggregating );
}
for ( MojoExecution mojoExecution : executionPlan.getExecutions() )
@@ -391,6 +364,64 @@
fireEvent( session, null, LifecycleEventCatapult.SESSION_ENDED );
}
+ private void resolveProjectDependencies( MavenProject project, MavenExecutionPlan executionPlan,
+ MavenSession session, boolean aggregating )
+ throws ArtifactResolutionException, ArtifactNotFoundException
+ {
+ Set<Artifact> artifacts;
+
+ try
+ {
+ Collection<String> scopesToResolve = executionPlan.getRequiredResolutionScopes();
+
+ artifacts = projectDependenciesResolver.resolve( project, scopesToResolve, session );
+ }
+ catch ( MultipleArtifactsNotFoundException e )
+ {
+ /*
+ * MNG-2277, the check below compensates for our bad plugin support where we ended up with aggregator
+ * plugins that require dependency resolution although they usually run in phases of the build where project
+ * artifacts haven't been assembled yet. The prime example of this is "mvn release:prepare".
+ */
+ if ( aggregating && areAllArtifactsInReactor( session.getProjects(), e.getMissingArtifacts() ) )
+ {
+ logger.warn( "The following artifacts could not be resolved at this point of the build"
+ + " but seem to be part of the reactor:" );
+
+ for ( Artifact artifact : e.getMissingArtifacts() )
+ {
+ logger.warn( "o " + artifact.getId() );
+ }
+
+ logger.warn( "Try running the build up to the lifecycle phase \"package\"" );
+
+ artifacts = new LinkedHashSet<Artifact>( e.getResolvedArtifacts() );
+ }
+ else
+ {
+ throw e;
+ }
+ }
+
+ project.setArtifacts( artifacts );
+
+ Set<String> directDependencies = new HashSet<String>( project.getDependencies().size() * 2 );
+ for ( Dependency dependency : project.getDependencies() )
+ {
+ directDependencies.add( dependency.getManagementKey() );
+ }
+
+ Set<Artifact> dependencyArtifacts = new LinkedHashSet<Artifact>( project.getDependencies().size() * 2 );
+ for ( Artifact artifact : artifacts )
+ {
+ if ( directDependencies.contains( artifact.getDependencyConflictId() ) )
+ {
+ dependencyArtifacts.add( artifact );
+ }
+ }
+ project.setDependencyArtifacts( dependencyArtifacts );
+ }
+
private boolean areAllArtifactsInReactor( Collection<MavenProject> projects, Collection<Artifact> artifacts )
{
Set<String> projectKeys = new HashSet<String>( projects.size() * 2 );
Modified: maven/components/trunk/maven-core/src/test/java/org/apache/maven/AbstractCoreMavenComponentTestCase.java
URL: http://svn.apache.org/viewvc/maven/components/trunk/maven-core/src/test/java/org/apache/maven/AbstractCoreMavenComponentTestCase.java?rev=809365&r1=809364&r2=809365&view=diff
==============================================================================
--- maven/components/trunk/maven-core/src/test/java/org/apache/maven/AbstractCoreMavenComponentTestCase.java (original)
+++ maven/components/trunk/maven-core/src/test/java/org/apache/maven/AbstractCoreMavenComponentTestCase.java Sun Aug 30 16:09:32 2009
@@ -126,6 +126,8 @@
else
{
project = createStubMavenProject();
+ project.setRemoteArtifactRepositories( request.getRemoteRepositories() );
+ project.setPluginArtifactRepositories( request.getPluginArtifactRepositories() );
}
MavenSession session = new MavenSession( getContainer(), request, new DefaultMavenExecutionResult(), project );
@@ -166,7 +168,12 @@
protected class ProjectBuilder
{
private MavenProject project;
-
+
+ public ProjectBuilder( MavenProject project )
+ {
+ this.project = project;
+ }
+
public ProjectBuilder( String groupId, String artifactId, String version )
{
Model model = new Model();
Modified: maven/components/trunk/maven-core/src/test/java/org/apache/maven/ProjectDependenciesResolverTest.java
URL: http://svn.apache.org/viewvc/maven/components/trunk/maven-core/src/test/java/org/apache/maven/ProjectDependenciesResolverTest.java?rev=809365&r1=809364&r2=809365&view=diff
==============================================================================
--- maven/components/trunk/maven-core/src/test/java/org/apache/maven/ProjectDependenciesResolverTest.java (original)
+++ maven/components/trunk/maven-core/src/test/java/org/apache/maven/ProjectDependenciesResolverTest.java Sun Aug 30 16:09:32 2009
@@ -7,9 +7,6 @@
import java.util.Set;
import org.apache.maven.artifact.Artifact;
-import org.apache.maven.artifact.InvalidRepositoryException;
-import org.apache.maven.artifact.repository.DefaultRepositoryRequest;
-import org.apache.maven.artifact.repository.RepositoryRequest;
import org.apache.maven.execution.MavenSession;
import org.apache.maven.model.Exclusion;
import org.apache.maven.project.MavenProject;
@@ -41,46 +38,40 @@
return "src/test/projects/project-dependencies-resolver";
}
- protected RepositoryRequest getRepositoryRequest()
- throws InvalidRepositoryException
- {
- RepositoryRequest request = new DefaultRepositoryRequest();
- request.setLocalRepository( getLocalRepository() );
- request.setRemoteRepositories( getRemoteRepositories() );
- return request;
- }
-
public void testExclusionsInDependencies()
throws Exception
{
+ MavenSession session = createMavenSession( null );
+ MavenProject project = session.getCurrentProject();
+
Exclusion exclusion = new Exclusion();
exclusion.setGroupId( "commons-lang" );
exclusion.setArtifactId( "commons-lang" );
-
- MavenProject project = new ProjectBuilder( "org.apache.maven", "project-test", "1.0" )
- .addDependency( "org.apache.maven.its", "maven-core-it-support", "1.3", Artifact.SCOPE_RUNTIME, exclusion )
- .get();
+
+ new ProjectBuilder( project ).addDependency( "org.apache.maven.its", "maven-core-it-support", "1.3",
+ Artifact.SCOPE_RUNTIME, exclusion );
Set<Artifact> artifactDependencies =
- resolver.resolve( project, Collections.singleton( Artifact.SCOPE_COMPILE ), getRepositoryRequest() );
+ resolver.resolve( project, Collections.singleton( Artifact.SCOPE_COMPILE ), session );
assertEquals( 0, artifactDependencies.size() );
-
- artifactDependencies =
- resolver.resolve( project, Collections.singleton( Artifact.SCOPE_RUNTIME ), getRepositoryRequest() );
+
+ artifactDependencies = resolver.resolve( project, Collections.singleton( Artifact.SCOPE_RUNTIME ), session );
assertEquals( 1, artifactDependencies.size() );
- assertEquals( "maven-core-it-support" , artifactDependencies.iterator().next().getArtifactId() );
+ assertEquals( "maven-core-it-support", artifactDependencies.iterator().next().getArtifactId() );
}
public void testSystemScopeDependencies()
throws Exception
{
- MavenProject project = new ProjectBuilder( "org.apache.maven", "project-test", "1.0" )
- .addDependency( "com.mycompany", "system-dependency", "1.0", Artifact.SCOPE_SYSTEM, new File( getBasedir(), "pom.xml" ).getAbsolutePath() )
- .get();
+ MavenSession session = createMavenSession( null );
+ MavenProject project = session.getCurrentProject();
+
+ new ProjectBuilder( project )
+ .addDependency( "com.mycompany", "system-dependency", "1.0", Artifact.SCOPE_SYSTEM, new File( getBasedir(), "pom.xml" ).getAbsolutePath() );
Set<Artifact> artifactDependencies =
- resolver.resolve( project, Collections.singleton( Artifact.SCOPE_COMPILE ), getRepositoryRequest() );
- assertEquals( 1, artifactDependencies.size() );
+ resolver.resolve( project, Collections.singleton( Artifact.SCOPE_COMPILE ), session );
+ assertEquals( 1, artifactDependencies.size() );
}
public void testSystemScopeDependencyIsPresentInTheCompileClasspathElements()
@@ -94,7 +85,7 @@
MavenSession session = createMavenSession( pom, eps );
MavenProject project = session.getCurrentProject();
- resolver.resolve( project, Collections.singleton( Artifact.SCOPE_COMPILE ), getRepositoryRequest() );
+ project.setArtifacts( resolver.resolve( project, Collections.singleton( Artifact.SCOPE_COMPILE ), session ) );
List<String> elements = project.getCompileClasspathElements();
assertEquals( 2, elements.size() );