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/06/13 23:53:18 UTC

svn commit: r784480 - 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: Sat Jun 13 21:53:18 2009
New Revision: 784480

URL: http://svn.apache.org/viewvc?rev=784480&view=rev
Log:
[MNG-4199] [regression] Dependency resolution for compile and runtime scope misses provided&system dependencies

Added:
    maven/components/trunk/maven-compat/src/main/java/org/apache/maven/artifact/resolver/filter/OrArtifactFilter.java   (with props)
Modified:
    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/main/java/org/apache/maven/lifecycle/MavenExecutionPlan.java
    maven/components/trunk/maven-core/src/test/java/org/apache/maven/ProjectDependenciesResolverTest.java
    maven/components/trunk/maven-core/src/test/java/org/apache/maven/lifecycle/LifecycleExecutorTest.java

Added: maven/components/trunk/maven-compat/src/main/java/org/apache/maven/artifact/resolver/filter/OrArtifactFilter.java
URL: http://svn.apache.org/viewvc/maven/components/trunk/maven-compat/src/main/java/org/apache/maven/artifact/resolver/filter/OrArtifactFilter.java?rev=784480&view=auto
==============================================================================
--- maven/components/trunk/maven-compat/src/main/java/org/apache/maven/artifact/resolver/filter/OrArtifactFilter.java (added)
+++ maven/components/trunk/maven-compat/src/main/java/org/apache/maven/artifact/resolver/filter/OrArtifactFilter.java Sat Jun 13 21:53:18 2009
@@ -0,0 +1,73 @@
+package org.apache.maven.artifact.resolver.filter;
+
+/*
+ * 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 org.apache.maven.artifact.Artifact;
+
+/**
+ * Apply multiple filters, accepting an artifact if at least one of the filters accepts it.
+ * 
+ * @author Benjamin Bentmann
+ */
+public class OrArtifactFilter
+    implements ArtifactFilter
+{
+
+    private Collection<ArtifactFilter> filters;
+
+    public OrArtifactFilter()
+    {
+    }
+
+    public OrArtifactFilter( Collection<ArtifactFilter> filters )
+    {
+        this.filters = filters;
+    }
+
+    public boolean include( Artifact artifact )
+    {
+        if ( filters != null )
+        {
+            for ( ArtifactFilter filter : filters )
+            {
+                if ( filter.include( artifact ) )
+                {
+                    return true;
+                }
+            }
+        }
+
+        return false;
+    }
+
+    public void add( ArtifactFilter artifactFilter )
+    {
+        if ( filters == null )
+        {
+            filters = new ArrayList<ArtifactFilter>();
+        }
+
+        filters.add( artifactFilter );
+    }
+
+}

Propchange: maven/components/trunk/maven-compat/src/main/java/org/apache/maven/artifact/resolver/filter/OrArtifactFilter.java
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: maven/components/trunk/maven-compat/src/main/java/org/apache/maven/artifact/resolver/filter/OrArtifactFilter.java
------------------------------------------------------------------------------
    svn:keywords = Author Date Id Revision

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=784480&r1=784479&r2=784480&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 Sat Jun 13 21:53:18 2009
@@ -1,5 +1,6 @@
 package org.apache.maven;
 
+import java.util.Collection;
 import java.util.List;
 import java.util.Set;
 
@@ -11,6 +12,7 @@
 import org.apache.maven.artifact.resolver.ArtifactResolutionResult;
 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.project.MavenProject;
 import org.apache.maven.project.artifact.ProjectArtifact;
@@ -28,7 +30,7 @@
     @Requirement
     private ResolutionErrorHandler resolutionErrorHandler;
     
-    public Set<Artifact> resolve( MavenProject project, String scope, ArtifactRepository localRepository, List<ArtifactRepository> remoteRepositories )
+    public Set<Artifact> resolve( MavenProject project, Collection<String> scopes, ArtifactRepository localRepository, List<ArtifactRepository> remoteRepositories )
         throws ArtifactResolutionException, ArtifactNotFoundException
     {        
         /*
@@ -61,8 +63,13 @@
             filter = scopeFilter;
         }        
         */
-        
-        ArtifactFilter scopeFilter = new ScopeArtifactFilter( scope );
+
+        OrArtifactFilter scopeFilter = new OrArtifactFilter();
+
+        for ( String scope : scopes )
+        {
+            scopeFilter.add( new ScopeArtifactFilter( scope ) );
+        }
 
         ArtifactFilter filter = scopeFilter; 
 

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=784480&r1=784479&r2=784480&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 Sat Jun 13 21:53:18 2009
@@ -1,5 +1,6 @@
 package org.apache.maven;
 
+import java.util.Collection;
 import java.util.List;
 import java.util.Set;
 
@@ -11,6 +12,6 @@
 
 public interface ProjectDependenciesResolver
 {
-    public Set<Artifact> resolve( MavenProject project, String scope, ArtifactRepository localRepository, List<ArtifactRepository> remoteRepositories )
+    public Set<Artifact> resolve( MavenProject project, Collection<String> scopes, ArtifactRepository localRepository, List<ArtifactRepository> remoteRepositories )
         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=784480&r1=784479&r2=784480&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 Sat Jun 13 21:53:18 2009
@@ -23,6 +23,7 @@
 import java.util.Collection;
 import java.util.Collections;
 import java.util.HashMap;
+import java.util.HashSet;
 import java.util.LinkedHashMap;
 import java.util.List;
 import java.util.Map;
@@ -30,7 +31,6 @@
 import java.util.StringTokenizer;
 
 import org.apache.maven.ProjectDependenciesResolver;
-import org.apache.maven.artifact.Artifact;
 import org.apache.maven.artifact.repository.ArtifactRepository;
 import org.apache.maven.artifact.repository.metadata.Metadata;
 import org.apache.maven.artifact.repository.metadata.RepositoryMetadataReadException;
@@ -169,7 +169,7 @@
                 // mojoDescriptor.isDependencyResolutionRequired() is actually the scope of the dependency resolution required, not a boolean ... yah.
                 try
                 {
-                    projectDependenciesResolver.resolve( currentProject, executionPlan.getRequiredResolutionScope(), session.getLocalRepository(), currentProject.getRemoteArtifactRepositories() );
+                    projectDependenciesResolver.resolve( currentProject, executionPlan.getRequiredResolutionScopes(), session.getLocalRepository(), currentProject.getRemoteArtifactRepositories() );
                 }
                 catch ( ArtifactNotFoundException e )
                 {
@@ -227,7 +227,7 @@
 
         List<MojoExecution> lifecyclePlan = new ArrayList<MojoExecution>();
 
-        String requiredDependencyResolutionScope = null;
+        Set<String> requiredDependencyResolutionScopes = new HashSet<String>();
 
         for ( String task : tasks )
         {
@@ -258,14 +258,17 @@
                 pluginDescriptor.setClassRealm( pluginManager.getPluginRealm( session, pluginDescriptor ) );
             }
 
-            requiredDependencyResolutionScope = calculateRequiredDependencyResolutionScope( requiredDependencyResolutionScope, mojoDescriptor.isDependencyResolutionRequired() );
+            if ( StringUtils.isNotEmpty( mojoDescriptor.isDependencyResolutionRequired() ) )
+            {
+                requiredDependencyResolutionScopes.add( mojoDescriptor.isDependencyResolutionRequired() );
+            }
 
             mojoExecution.setMojoDescriptor( mojoDescriptor );
 
             populateMojoExecutionConfiguration( project, mojoExecution, false );
         }
 
-        return new MavenExecutionPlan( lifecyclePlan, requiredDependencyResolutionScope );
+        return new MavenExecutionPlan( lifecyclePlan, requiredDependencyResolutionScopes );
     }      
     
     private void calculateExecutionForIndividualGoal( MavenSession session, List<MojoExecution> lifecyclePlan, String goal ) 
@@ -431,37 +434,6 @@
         }
     }   
 
-    // SCOPE_COMPILE
-    // SCOPE_TEST
-    // SCOPE_RUNTIME
-    //
-    String calculateRequiredDependencyResolutionScope( String currentRequiredDependencyResolutionScope, String inputScope )
-    {
-        if ( inputScope == null )
-        {
-            return currentRequiredDependencyResolutionScope;
-        }
-                
-        if ( currentRequiredDependencyResolutionScope == null && inputScope != null )
-        {
-            return inputScope;
-        }
-
-        if ( currentRequiredDependencyResolutionScope.equals( Artifact.SCOPE_COMPILE ) && ( inputScope.equals(  Artifact.SCOPE_RUNTIME ) || inputScope.equals( Artifact.SCOPE_TEST ) ) )
-        {
-            return inputScope;
-        }
-
-        if ( currentRequiredDependencyResolutionScope.equals( Artifact.SCOPE_RUNTIME ) && inputScope.equals(  Artifact.SCOPE_TEST ) )
-        {
-            return inputScope;
-        }        
-        
-        // Nothing changed we return what we were
-        //
-        return currentRequiredDependencyResolutionScope;
-    }
-    
     private String executionDescription( MojoExecution me, MavenProject project )
     {
         PluginDescriptor pd = me.getMojoDescriptor().getPluginDescriptor();

Modified: maven/components/trunk/maven-core/src/main/java/org/apache/maven/lifecycle/MavenExecutionPlan.java
URL: http://svn.apache.org/viewvc/maven/components/trunk/maven-core/src/main/java/org/apache/maven/lifecycle/MavenExecutionPlan.java?rev=784480&r1=784479&r2=784480&view=diff
==============================================================================
--- maven/components/trunk/maven-core/src/main/java/org/apache/maven/lifecycle/MavenExecutionPlan.java (original)
+++ maven/components/trunk/maven-core/src/main/java/org/apache/maven/lifecycle/MavenExecutionPlan.java Sat Jun 13 21:53:18 2009
@@ -1,6 +1,7 @@
 package org.apache.maven.lifecycle;
 
 import java.util.List;
+import java.util.Set;
 
 import org.apache.maven.plugin.MojoExecution;
 
@@ -15,13 +16,13 @@
     /** Individual executions that must be performed. */
     private List<MojoExecution> executions;
     
-    /** For project dependency resolution, the scope of resolution required if any. */
-    private String requiredDependencyResolutionScope;
+    /** For project dependency resolution, the scopes of resolution required if any. */
+    private Set<String> requiredDependencyResolutionScopes;
 
-    public MavenExecutionPlan( List<MojoExecution> executions, String requiredDependencyResolutionScope )
+    public MavenExecutionPlan( List<MojoExecution> executions, Set<String> requiredDependencyResolutionScopes )
     {
         this.executions = executions;
-        this.requiredDependencyResolutionScope = requiredDependencyResolutionScope;
+        this.requiredDependencyResolutionScopes = requiredDependencyResolutionScopes;
     }
 
     public List<MojoExecution> getExecutions()
@@ -29,8 +30,8 @@
         return executions;
     }
 
-    public String getRequiredResolutionScope()
+    public Set<String> getRequiredResolutionScopes()
     {
-        return requiredDependencyResolutionScope;
+        return requiredDependencyResolutionScopes;
     }        
 }

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=784480&r1=784479&r2=784480&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 Sat Jun 13 21:53:18 2009
@@ -1,6 +1,7 @@
 package org.apache.maven;
 
 import java.io.File;
+import java.util.Collections;
 import java.util.List;
 import java.util.Properties;
 import java.util.Set;
@@ -48,10 +49,14 @@
             .addDependency( "org.apache.maven.its", "maven-core-it-support", "1.3", Artifact.SCOPE_RUNTIME, exclusion  )
             .get();        
         
-        Set<Artifact> artifactDependencies = resolver.resolve( project, Artifact.SCOPE_COMPILE, getLocalRepository(), getRemoteRepositories() );
+        Set<Artifact> artifactDependencies =
+            resolver.resolve( project, Collections.singleton( Artifact.SCOPE_COMPILE ), getLocalRepository(),
+                              getRemoteRepositories() );
         assertEquals( 0, artifactDependencies.size() );
         
-        artifactDependencies = resolver.resolve( project, Artifact.SCOPE_RUNTIME, getLocalRepository(), getRemoteRepositories() );
+        artifactDependencies =
+            resolver.resolve( project, Collections.singleton( Artifact.SCOPE_RUNTIME ), getLocalRepository(),
+                              getRemoteRepositories() );
         assertEquals( 1, artifactDependencies.size() );
         assertEquals( "maven-core-it-support" , artifactDependencies.iterator().next().getArtifactId() );
     }
@@ -63,7 +68,9 @@
             .addDependency( "com.mycompany", "system-dependency", "1.0", Artifact.SCOPE_SYSTEM, new File( getBasedir(), "pom.xml" ).getAbsolutePath() )
             .get();
 
-        Set<Artifact> artifactDependencies = resolver.resolve( project, Artifact.SCOPE_COMPILE, getLocalRepository(), getRemoteRepositories() );                
+        Set<Artifact> artifactDependencies =
+            resolver.resolve( project, Collections.singleton( Artifact.SCOPE_COMPILE ), getLocalRepository(),
+                              getRemoteRepositories() );                
         assertEquals( 1, artifactDependencies.size() );        
     }  
     
@@ -78,7 +85,8 @@
         MavenSession session = createMavenSession( pom, eps );
         MavenProject project = session.getCurrentProject();
 
-        resolver.resolve( project, Artifact.SCOPE_COMPILE, getLocalRepository(), getRemoteRepositories() );                
+        resolver.resolve( project, Collections.singleton( Artifact.SCOPE_COMPILE ), getLocalRepository(),
+                          getRemoteRepositories() );                
                 
         List<String> elements = project.getCompileClasspathElements();
         assertEquals( 2, elements.size() );

Modified: maven/components/trunk/maven-core/src/test/java/org/apache/maven/lifecycle/LifecycleExecutorTest.java
URL: http://svn.apache.org/viewvc/maven/components/trunk/maven-core/src/test/java/org/apache/maven/lifecycle/LifecycleExecutorTest.java?rev=784480&r1=784479&r2=784480&view=diff
==============================================================================
--- maven/components/trunk/maven-core/src/test/java/org/apache/maven/lifecycle/LifecycleExecutorTest.java (original)
+++ maven/components/trunk/maven-core/src/test/java/org/apache/maven/lifecycle/LifecycleExecutorTest.java Sat Jun 13 21:53:18 2009
@@ -127,7 +127,9 @@
         
         MavenExecutionPlan plan = lifecycleExecutor.calculateExecutionPlan( session, "clean", "install" );
         
-        assertEquals( Artifact.SCOPE_TEST, plan.getRequiredResolutionScope() );
+        assertTrue( plan.getRequiredResolutionScopes().contains( Artifact.SCOPE_COMPILE ) );
+        assertTrue( plan.getRequiredResolutionScopes().contains( Artifact.SCOPE_RUNTIME ) );
+        assertTrue( plan.getRequiredResolutionScopes().contains( Artifact.SCOPE_TEST ) );
         
         List<MojoExecution> executions = plan.getExecutions();        
         
@@ -259,17 +261,4 @@
         assertNotNull( plugin );
     }
     
-    //
-    
-    public void testRequiredDependencyResolutionScopeCalculation()
-        throws Exception
-    {
-        assertEquals( Artifact.SCOPE_COMPILE, lifecycleExecutor.calculateRequiredDependencyResolutionScope( null, Artifact.SCOPE_COMPILE ) );
-        assertEquals( Artifact.SCOPE_COMPILE, lifecycleExecutor.calculateRequiredDependencyResolutionScope( Artifact.SCOPE_COMPILE, Artifact.SCOPE_COMPILE ) );
-        assertEquals( Artifact.SCOPE_RUNTIME, lifecycleExecutor.calculateRequiredDependencyResolutionScope( null, Artifact.SCOPE_RUNTIME ) );
-        assertEquals( Artifact.SCOPE_RUNTIME, lifecycleExecutor.calculateRequiredDependencyResolutionScope( Artifact.SCOPE_RUNTIME, Artifact.SCOPE_RUNTIME ) );
-        assertEquals( Artifact.SCOPE_TEST, lifecycleExecutor.calculateRequiredDependencyResolutionScope( null, Artifact.SCOPE_TEST ) );
-        assertEquals( Artifact.SCOPE_TEST, lifecycleExecutor.calculateRequiredDependencyResolutionScope( Artifact.SCOPE_TEST, Artifact.SCOPE_TEST ) );
-        assertEquals( Artifact.SCOPE_RUNTIME, lifecycleExecutor.calculateRequiredDependencyResolutionScope( Artifact.SCOPE_COMPILE, Artifact.SCOPE_RUNTIME) );                
-    }
 }