Author: bentmann
Date: Sun Aug  2 14:42:41 2009
New Revision: 800087

URL: http://svn.apache.org/viewvc?rev=800087&view=rev
Log:
[MNG-4274] Plugins with an undeclared but transitive dependency on plexus-utils 
via a core artifact get wrong version of p-u

Modified:
    
maven/components/trunk/maven-core/src/main/java/org/apache/maven/plugin/DefaultPluginManager.java
    
maven/components/trunk/maven-core/src/main/java/org/apache/maven/project/DefaultProjectBuildingHelper.java
    
maven/components/trunk/maven-core/src/test/java/org/apache/maven/plugin/PluginManagerTest.java

Modified: 
maven/components/trunk/maven-core/src/main/java/org/apache/maven/plugin/DefaultPluginManager.java
URL: 
http://svn.apache.org/viewvc/maven/components/trunk/maven-core/src/main/java/org/apache/maven/plugin/DefaultPluginManager.java?rev=800087&r1=800086&r2=800087&view=diff
==============================================================================
--- 
maven/components/trunk/maven-core/src/main/java/org/apache/maven/plugin/DefaultPluginManager.java
 (original)
+++ 
maven/components/trunk/maven-core/src/main/java/org/apache/maven/plugin/DefaultPluginManager.java
 Sun Aug  2 14:42:41 2009
@@ -39,7 +39,7 @@
 import org.apache.maven.artifact.resolver.ArtifactResolutionRequest;
 import org.apache.maven.artifact.resolver.ArtifactResolutionResult;
 import org.apache.maven.artifact.resolver.ResolutionErrorHandler;
-import org.apache.maven.artifact.resolver.filter.AndArtifactFilter;
+import org.apache.maven.artifact.resolver.filter.ArtifactFilter;
 import org.apache.maven.artifact.resolver.filter.ScopeArtifactFilter;
 import org.apache.maven.classrealm.ClassRealmManager;
 import org.apache.maven.execution.MavenSession;
@@ -237,12 +237,15 @@
 
     // TODO: Turn this into a component so it can be tested.
     //
+    /**
+     * Gets all artifacts required for the class realm of the specified 
plugin. An artifact in the result list that has
+     * no file set is meant to be excluded from the plugin realm in favor of 
the equivalent library from the current
+     * core distro.
+     */
     List<Artifact> getPluginArtifacts( Artifact pluginArtifact, Plugin 
pluginAsSpecifiedInPom, ArtifactRepository localRepository, 
List<ArtifactRepository> remoteRepositories )
         throws ArtifactNotFoundException, ArtifactResolutionException
     {
-        AndArtifactFilter filter = new AndArtifactFilter();
-        filter.add( coreArtifactFilterManager.getCoreArtifactFilter() );
-        filter.add( new ScopeArtifactFilter( 
Artifact.SCOPE_RUNTIME_PLUS_SYSTEM ) );
+        ArtifactFilter filter = new ScopeArtifactFilter( 
Artifact.SCOPE_RUNTIME_PLUS_SYSTEM );
 
         Set<Artifact> dependenciesToResolveForPlugin = new 
LinkedHashSet<Artifact>();
 
@@ -273,16 +276,33 @@
             .setLocalRepository( localRepository )
             .setRemoteRepostories( remoteRepositories )
             .setFilter( filter )
+            .setResolveRoot( true )
             .setResolveTransitively( true );
-            //.setResolveRoot( false );
         //  FIXME setTransferListener
         
-        ArtifactResolutionResult result = repositorySystem.resolve( request );
+        ArtifactResolutionResult result = repositorySystem.collect( request );
         resolutionErrorHandler.throwErrors( request, result );
 
-        logger.debug( "Using the following artifacts for classpath of: " + 
pluginArtifact.getId() + ":\n\n" + result.getArtifacts().toString().replace( 
',', '\n' ) );
+        List<Artifact> pluginArtifacts = new ArrayList<Artifact>( 
result.getArtifacts() );
+
+        request.setResolveRoot( true ).setResolveTransitively( false 
).setArtifactDependencies( null );
+
+        filter = coreArtifactFilterManager.getCoreArtifactFilter();
+
+        for ( Artifact artifact : pluginArtifacts )
+        {
+            if ( filter.include( artifact ) )
+            {
+                result = repositorySystem.resolve( request.setArtifact( 
artifact ) );
+                resolutionErrorHandler.throwErrors( request, result );
+            }
+            else
+            {
+                artifact.setFile( null );
+            }
+        }
 
-        return new ArrayList<Artifact>( result.getArtifacts() );
+        return pluginArtifacts;
     }
 
     // ----------------------------------------------------------------------
@@ -407,15 +427,35 @@
             throw new IllegalStateException( e ); // XXX
         }
 
+        if ( logger.isDebugEnabled() )
+        {
+            logger.debug( "Populating plugin realm for " + constructPluginKey( 
plugin ) );
+        }
+
         for ( Artifact a : pluginArtifacts )
         {
-            try
+            if ( a.getFile() != null )
             {
-                pluginRealm.addURL( a.getFile().toURI().toURL() );
+                if ( logger.isDebugEnabled() )
+                {
+                    logger.debug( "  Included: " + a.getId() );
+                }
+
+                try
+                {
+                    pluginRealm.addURL( a.getFile().toURI().toURL() );
+                }
+                catch ( MalformedURLException e )
+                {
+                    // Not going to happen
+                }
             }
-            catch ( MalformedURLException e )
+            else
             {
-                // Not going to happen
+                if ( logger.isDebugEnabled() )
+                {
+                    logger.debug( "  Excluded: " + a.getId() );
+                }
             }
         }
 

Modified: 
maven/components/trunk/maven-core/src/main/java/org/apache/maven/project/DefaultProjectBuildingHelper.java
URL: 
http://svn.apache.org/viewvc/maven/components/trunk/maven-core/src/main/java/org/apache/maven/project/DefaultProjectBuildingHelper.java?rev=800087&r1=800086&r2=800087&view=diff
==============================================================================
--- 
maven/components/trunk/maven-core/src/main/java/org/apache/maven/project/DefaultProjectBuildingHelper.java
 (original)
+++ 
maven/components/trunk/maven-core/src/main/java/org/apache/maven/project/DefaultProjectBuildingHelper.java
 Sun Aug  2 14:42:41 2009
@@ -33,6 +33,7 @@
 import org.apache.maven.artifact.resolver.ArtifactResolutionRequest;
 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.classrealm.ClassRealmManager;
 import org.apache.maven.model.Build;
 import org.apache.maven.model.Dependency;
@@ -173,7 +174,6 @@
         request.setArtifact( artifact );
         request.setArtifactDependencies( dependencies );
         request.setResolveTransitively( true );
-        request.setFilter( artifactFilterManager.getCoreArtifactFilter() );
         request.setLocalRepository( localRepository );
         request.setRemoteRepostories( remoteRepositories );
         // FIXME setTransferListener
@@ -182,21 +182,33 @@
 
         resolutionErrorHandler.throwErrors( request, result );
 
+        ArtifactFilter filter = artifactFilterManager.getCoreArtifactFilter();
+
         for ( Artifact resultArtifact : result.getArtifacts() )
         {
-            if ( logger.isDebugEnabled() )
-            {
-                logger.debug( "  " + resultArtifact.getFile() );
-            }
-
-            try
+            if ( filter.include( resultArtifact ) )
             {
-                realm.addURL( resultArtifact.getFile().toURI().toURL() );
+                if ( logger.isDebugEnabled() )
+                {
+                    logger.debug( "  Included: " + resultArtifact.getId() );
+                }
+
+                try
+                {
+                    realm.addURL( resultArtifact.getFile().toURI().toURL() );
+                }
+                catch ( MalformedURLException e )
+                {
+                    throw new IllegalStateException( "Failed to populate 
project realm " + realm.getId() + " with "
+                        + artifact.getFile(), e );
+                }
             }
-            catch ( MalformedURLException e )
+            else
             {
-                throw new IllegalStateException( "Failed to populate project 
realm " + realm.getId() + " with "
-                    + artifact.getFile(), e );
+                if ( logger.isDebugEnabled() )
+                {
+                    logger.debug( "  Excluded: " + resultArtifact.getId() );
+                }
             }
         }
     }

Modified: 
maven/components/trunk/maven-core/src/test/java/org/apache/maven/plugin/PluginManagerTest.java
URL: 
http://svn.apache.org/viewvc/maven/components/trunk/maven-core/src/test/java/org/apache/maven/plugin/PluginManagerTest.java?rev=800087&r1=800086&r2=800087&view=diff
==============================================================================
--- 
maven/components/trunk/maven-core/src/test/java/org/apache/maven/plugin/PluginManagerTest.java
 (original)
+++ 
maven/components/trunk/maven-core/src/test/java/org/apache/maven/plugin/PluginManagerTest.java
 Sun Aug  2 14:42:41 2009
@@ -226,7 +226,6 @@
         */
         
         List<Artifact> artifacts = pluginManager.getPluginArtifacts( 
pluginArtifact, plugin, getLocalRepository(), getPluginArtifactRepositories() 
);   
-        assertEquals( 4, artifacts.size() );
         
         for ( Artifact a : artifacts )
         {


Reply via email to