Author: jvanzyl
Date: Wed Apr  1 04:01:49 2009
New Revision: 760775

URL: http://svn.apache.org/viewvc?rev=760775&view=rev
Log:
o trying to isolate the plugin dependency downloading from the project 
dependency downloading so that I can separate it out of the plugin manager

Modified:
    
maven/components/branches/MNG-2766/maven-core/src/main/java/org/apache/maven/plugin/DefaultPluginManager.java
    
maven/components/branches/MNG-2766/maven-core/src/test/java/org/apache/maven/plugin/PluginManagerTest.java

Modified: 
maven/components/branches/MNG-2766/maven-core/src/main/java/org/apache/maven/plugin/DefaultPluginManager.java
URL: 
http://svn.apache.org/viewvc/maven/components/branches/MNG-2766/maven-core/src/main/java/org/apache/maven/plugin/DefaultPluginManager.java?rev=760775&r1=760774&r2=760775&view=diff
==============================================================================
--- 
maven/components/branches/MNG-2766/maven-core/src/main/java/org/apache/maven/plugin/DefaultPluginManager.java
 (original)
+++ 
maven/components/branches/MNG-2766/maven-core/src/main/java/org/apache/maven/plugin/DefaultPluginManager.java
 Wed Apr  1 04:01:49 2009
@@ -20,8 +20,6 @@
 import java.io.StringReader;
 import java.net.MalformedURLException;
 import java.util.ArrayList;
-import java.util.Collection;
-import java.util.Collections;
 import java.util.HashMap;
 import java.util.Iterator;
 import java.util.LinkedHashSet;
@@ -195,8 +193,6 @@
 
         checkRequiredMavenVersion( plugin, pluginProject, localRepository, 
project.getRemoteArtifactRepositories() );
 
-        checkPluginDependencySpec( plugin, pluginProject );
-
         pluginArtifact = project.replaceWithActiveArtifact( pluginArtifact );
 
         ArtifactResolutionRequest request = new ArtifactResolutionRequest( 
pluginArtifact, localRepository, project.getRemoteArtifactRepositories() );
@@ -273,11 +269,8 @@
             throw new InvalidPluginException( "Plugin '" + plugin + "' is 
invalid: " + e.getMessage(), ee );
         }
         
-        /* get plugin managed versions */
         Map<String,Artifact> pluginManagedDependencies = new 
HashMap<String,Artifact>();
-        
-        // This is really crappy that we have to do this. The repository 
system should deal with this. The retrieval of the transitive dependencies.
-        
+                
         List<Artifact> pluginArtifacts = new ArrayList<Artifact>();
         
         try
@@ -345,9 +338,7 @@
     // ----------------------------------------------------------------------
     // Mojo execution
     // ----------------------------------------------------------------------
-    
-    // We should assume that We've already loaded the plugin in question.
-    
+        
     public void executeMojo( MavenSession session, MojoExecution mojoExecution 
)
         throws MojoFailureException, PluginExecutionException, 
PluginConfigurationException
     {
@@ -377,29 +368,11 @@
         project.setBuild( model.getBuild() );
 
         if ( mojoDescriptor.isDependencyResolutionRequired() != null )
-        {
-            Collection<MavenProject> projects;
-
-            if ( mojoDescriptor.isAggregator() )
-            {
-                projects = session.getSortedProjects();
-            }
-            else
-            {
-                projects = Collections.singleton( project );
-            }
-
-            //!!jvz What is this? We resolveTransitiveDependencies() and then 
a line later downDependencies()? That can't be right. We should also already
-            // know at this point that what we need to execute can't be found. 
This is the wrong time to find this out.
-            
+        {            
             try
             {
-                for ( MavenProject p : projects )
-                {
-                    resolveTransitiveDependencies( session, repositorySystem, 
mojoDescriptor.isDependencyResolutionRequired(), p, 
mojoDescriptor.isAggregator() );
-                }
-
-                downloadDependencies( project, session, repositorySystem );
+                // mojoDescriptor.isDependencyResolutionRequired() is actually 
the scope of the dependency resolution required, not a boolean ... yah.
+                downloadDependencies( session, 
mojoDescriptor.isDependencyResolutionRequired() );
             }
             catch ( ArtifactResolutionException e )
             {
@@ -736,7 +709,7 @@
 
         for ( int i = 0; i < parameters.size(); i++ )
         {
-            Parameter parameter = (Parameter) parameters.get( i );
+            Parameter parameter = parameters.get( i );
 
             if ( parameter.isRequired() )
             {
@@ -806,7 +779,7 @@
 
         for ( int i = 0; i < parameters.size(); i++ )
         {
-            Parameter parameter = (Parameter) parameters.get( i );
+            Parameter parameter = parameters.get( i );
 
             // the key for the configuration map we're building.
             String key = parameter.getName();
@@ -1108,9 +1081,11 @@
     // Artifact resolution
     // ----------------------------------------------------------------------
 
-    protected void resolveTransitiveDependencies( MavenSession context, 
RepositorySystem repositorySystem, String scope, MavenProject project, boolean 
isAggregator )
+    protected void resolveTransitiveDependencies( MavenSession session, String 
scope )
         throws ArtifactResolutionException, ArtifactNotFoundException, 
InvalidDependencyVersionException
     {
+        MavenProject project = session.getCurrentProject();
+        
         // TODO: such a call in MavenMetadataSource too - packaging not really 
the intention of type
         Artifact artifact = repositorySystem.createArtifact( 
project.getGroupId(), project.getArtifactId(), project.getVersion(), null, 
project.getPackaging() );
 
@@ -1136,7 +1111,7 @@
             .setArtifact( artifact )
             .setResolveRoot( false )
             .setArtifactDependencies( project.getDependencyArtifacts() )
-            .setLocalRepository( context.getLocalRepository() )
+            .setLocalRepository( session.getLocalRepository() )
             .setRemoteRepostories( project.getRemoteArtifactRepositories() )
             .setManagedVersionMap( project.getManagedVersionMap() )
             .setFilter( filter );
@@ -1152,20 +1127,20 @@
     // Artifact downloading
     // ----------------------------------------------------------------------
 
-    private void downloadDependencies( MavenProject project, MavenSession 
context, RepositorySystem repositorySystem )
-        throws ArtifactResolutionException, ArtifactNotFoundException
-    {
-        ArtifactRepository localRepository = context.getLocalRepository();
-        List<ArtifactRepository> remoteArtifactRepositories = 
project.getRemoteArtifactRepositories();
+    private void downloadDependencies( MavenSession session, String scope )
+        throws ArtifactResolutionException, ArtifactNotFoundException, 
InvalidDependencyVersionException
+    {        
+        resolveTransitiveDependencies( session, scope );
+        
+        ArtifactRepository localRepository = session.getLocalRepository();
+        List<ArtifactRepository> remoteArtifactRepositories = 
session.getCurrentProject().getRemoteArtifactRepositories();
 
-        for ( Iterator<Artifact> it = project.getArtifacts().iterator(); 
it.hasNext(); )
+        for ( Artifact artifact : session.getCurrentProject().getArtifacts() )
         {            
-            Artifact artifact = (Artifact) it.next();
-            
             repositorySystem.resolve( new ArtifactResolutionRequest( artifact, 
localRepository, remoteArtifactRepositories ) );
         }
     }
-
+   
     private static String interpolateXmlString( String xml, 
List<InterpolatorProperty> interpolatorProperties )
         throws IOException
     {
@@ -1254,34 +1229,6 @@
         plugin.setVersion( version );
     }
 
-    // We need to strip out the methods in here for a validation method.
-    public Artifact resolvePluginArtifact( Plugin plugin, MavenProject 
project, MavenSession session )
-        throws PluginManagerException, InvalidPluginException, 
PluginVersionResolutionException, ArtifactResolutionException, 
ArtifactNotFoundException
-    {
-        logger.debug( "Resolving plugin artifact " + plugin.getKey() + " from 
" + project.getRemoteArtifactRepositories() );
-
-        ArtifactRepository localRepository = session.getLocalRepository();
-
-        // We need the POM for the actually plugin project so we can look at 
the prerequisite element.
-        MavenProject pluginProject = buildPluginProject( plugin, 
localRepository, project.getRemoteArtifactRepositories() );
-
-        Artifact pluginArtifact = repositorySystem.createPluginArtifact( 
plugin );
-
-        checkRequiredMavenVersion( plugin, pluginProject, localRepository, 
project.getRemoteArtifactRepositories() );
-
-        checkPluginDependencySpec( plugin, pluginProject );
-
-        pluginArtifact = project.replaceWithActiveArtifact( pluginArtifact );
-
-        ArtifactResolutionRequest request = new ArtifactResolutionRequest( 
pluginArtifact, localRepository, project.getRemoteArtifactRepositories() );
-
-        ArtifactResolutionResult result = repositorySystem.resolve( request );
-
-        resolutionErrorHandler.throwErrors( request, result );
-
-        return pluginArtifact;
-    }
-
     public MavenProject buildPluginProject( Plugin plugin, ArtifactRepository 
localRepository, List<ArtifactRepository> remoteRepositories )
         throws InvalidPluginException
     {
@@ -1298,12 +1245,7 @@
         }
     }
 
-    /**
-     * @param pluginProject
-     * @todo would be better to store this in the plugin descriptor, but then 
it won't be available
-     *       to the version manager which executes before the plugin is 
instantiated
-     */
-    public void checkRequiredMavenVersion( Plugin plugin, MavenProject 
pluginProject, ArtifactRepository localRepository, List remoteRepositories )
+    public void checkRequiredMavenVersion( Plugin plugin, MavenProject 
pluginProject, ArtifactRepository localRepository, List<ArtifactRepository> 
remoteRepositories )
         throws PluginVersionResolutionException, InvalidPluginException
     {
         // if we don't have the required Maven version, then ignore an update
@@ -1317,24 +1259,8 @@
             }
         }
     }
-
-    public void checkPluginDependencySpec( Plugin plugin, MavenProject 
pluginProject )
-        throws InvalidPluginException
-    {
-        ArtifactFilter filter = new ScopeArtifactFilter( "runtime" );
-        try
-        {
-            repositorySystem.createArtifacts( pluginProject.getDependencies(), 
null, filter, pluginProject );
-        }
-        catch ( VersionNotFoundException e )
-        {
-            throw new InvalidPluginException( "Plugin: " + plugin.getKey() + " 
has a dependency with an invalid version." );
-        }
-    }
-    
-    // Plugin Mapping Manager
     
-    public org.apache.maven.model.Plugin getByPrefix( String pluginPrefix, 
List groupIds, List pluginRepositories, ArtifactRepository localRepository )
+    public org.apache.maven.model.Plugin getByPrefix( String pluginPrefix, 
List<String> groupIds, List<ArtifactRepository> pluginRepositories, 
ArtifactRepository localRepository )
     {
         // if not found, try from the remote repository
         if ( !pluginDefinitionsByPrefix.containsKey( pluginPrefix ) )
@@ -1344,7 +1270,7 @@
             loadPluginMappings( groupIds, pluginRepositories, localRepository 
);
         }
 
-        org.apache.maven.model.Plugin result = (org.apache.maven.model.Plugin) 
pluginDefinitionsByPrefix.get( pluginPrefix );
+        org.apache.maven.model.Plugin result = pluginDefinitionsByPrefix.get( 
pluginPrefix );
 
         if ( result == null )
         {
@@ -1354,76 +1280,51 @@
         return result;
     }
 
-    private void loadPluginMappings( List groupIds, List pluginRepositories, 
ArtifactRepository localRepository )
+    private void loadPluginMappings( List<String> groupIds, 
List<ArtifactRepository> pluginRepositories, ArtifactRepository localRepository 
)
     {
-        List pluginGroupIds = new ArrayList( groupIds );
+        List<String> pluginGroupIds = new ArrayList<String>( groupIds );
 
-        // TODO: use constant
-        if ( !pluginGroupIds.contains( "org.apache.maven.plugins" ) )
+        for ( String groupId : pluginGroupIds )
         {
-            pluginGroupIds.add( "org.apache.maven.plugins" );
-        }
-        if ( !pluginGroupIds.contains( "org.codehaus.mojo" ) )
-        {
-            pluginGroupIds.add( "org.codehaus.mojo" );
-        }
-
-        for ( Iterator it = pluginGroupIds.iterator(); it.hasNext(); )
-        {
-            String groupId = (String) it.next();
-            logger.debug( "Loading plugin prefixes from group: " + groupId );
             try
             {
-                loadPluginMappings( groupId, pluginRepositories, 
localRepository );
-            }
-            catch ( RepositoryMetadataResolutionException e )
-            {
-                logger.warn( "Cannot resolve plugin-mapping metadata for 
groupId: " + groupId + " - IGNORING." );
-
-                logger.debug( "Error resolving plugin-mapping metadata for 
groupId: " + groupId + ".", e );
-            }
-        }
-    }
-
-    //!!jvz This should not be here, it's part of pre-processing.
-    private void loadPluginMappings( String groupId, List pluginRepositories, 
ArtifactRepository localRepository )
-        throws RepositoryMetadataResolutionException
-    {
-        RepositoryMetadata metadata = new GroupRepositoryMetadata( groupId );
-
-        logger.debug( "Checking repositories:\n" + pluginRepositories + 
"\n\nfor plugin prefix metadata: " + groupId );
-        
-        repositoryMetadataManager.resolve( metadata, pluginRepositories, 
localRepository );
-
-        Metadata repoMetadata = metadata.getMetadata();
-        
-        if ( repoMetadata != null )
-        {
-            for ( Iterator pluginIterator = 
repoMetadata.getPlugins().iterator(); pluginIterator.hasNext(); )
-            {
-                org.apache.maven.artifact.repository.metadata.Plugin mapping = 
(org.apache.maven.artifact.repository.metadata.Plugin) pluginIterator.next();
+                RepositoryMetadata metadata = new GroupRepositoryMetadata( 
groupId );
                 
-                logger.debug( "Found plugin: " + mapping.getName() + " with 
prefix: " + mapping.getPrefix() );
-
-                String prefix = mapping.getPrefix();
+                repositoryMetadataManager.resolve( metadata, 
pluginRepositories, localRepository );
 
-                //if the prefix has already been found, don't add it again.
-                //this is to preserve the correct ordering of prefix searching 
(MNG-2926)
-                if ( !pluginDefinitionsByPrefix.containsKey( prefix ) )
+                Metadata repoMetadata = metadata.getMetadata();
+                
+                if ( repoMetadata != null )
                 {
-                    String artifactId = mapping.getArtifactId();
+                    for ( org.apache.maven.artifact.repository.metadata.Plugin 
mapping : repoMetadata.getPlugins() )
+                    {
+                        String prefix = mapping.getPrefix();
+
+                        //if the prefix has already been found, don't add it 
again.
+                        //this is to preserve the correct ordering of prefix 
searching (MNG-2926)
+                        if ( !pluginDefinitionsByPrefix.containsKey( prefix ) )
+                        {
+                            String artifactId = mapping.getArtifactId();
 
-                    org.apache.maven.model.Plugin plugin = new 
org.apache.maven.model.Plugin();
+                            Plugin plugin = new Plugin();
 
-                    plugin.setGroupId( metadata.getGroupId() );
+                            plugin.setGroupId( metadata.getGroupId() );
 
-                    plugin.setArtifactId( artifactId );
+                            plugin.setArtifactId( artifactId );
 
-                    pluginDefinitionsByPrefix.put( prefix, plugin );
+                            pluginDefinitionsByPrefix.put( prefix, plugin );
+                        }
+                    }
                 }
             }
+            catch ( RepositoryMetadataResolutionException e )
+            {
+                logger.warn( "Cannot resolve plugin-mapping metadata for 
groupId: " + groupId + " - IGNORING." );
+
+                logger.debug( "Error resolving plugin-mapping metadata for 
groupId: " + groupId + ".", e );
+            }
         }
-    }           
+    }
     
     public MojoDescriptor getMojoDescriptor( Plugin plugin, String goal, 
MavenSession session )
         throws PluginLoaderException

Modified: 
maven/components/branches/MNG-2766/maven-core/src/test/java/org/apache/maven/plugin/PluginManagerTest.java
URL: 
http://svn.apache.org/viewvc/maven/components/branches/MNG-2766/maven-core/src/test/java/org/apache/maven/plugin/PluginManagerTest.java?rev=760775&r1=760774&r2=760775&view=diff
==============================================================================
--- 
maven/components/branches/MNG-2766/maven-core/src/test/java/org/apache/maven/plugin/PluginManagerTest.java
 (original)
+++ 
maven/components/branches/MNG-2766/maven-core/src/test/java/org/apache/maven/plugin/PluginManagerTest.java
 Wed Apr  1 04:01:49 2009
@@ -107,6 +107,50 @@
         pluginManager.executeMojo( session, mojoExecution );
     }
     
+    public void testMojoConfigurationIsMergedCorrectly()
+        throws Exception
+    {
+    }
+    
+    /**
+     * The case where the user wants to specify an alternate version of the 
underlying tool. Common case
+     * is in the Antlr plugin which comes bundled with a version of Antlr but 
the user often times needs
+     * to use a specific version. We need to make sure the version that they 
specify takes precedence.
+     */
+    public void testMojoWhereInternallyStatedDependencyIsOverriddenByProject()
+        throws Exception
+    {
+    }
+
+    /** 
+     * The case where you have a plugin in the current build that you want to 
be used on projects in
+     * the current build.
+     */
+    public void testMojoThatIsPresentInTheCurrentBuild()
+        throws Exception
+    {
+    }
+
+    /**
+     * This is the case where the Mojo wants to execute on every project and 
then do something at the end
+     * with the results of each project.
+     */
+    public void testAggregatorMojo()
+        throws Exception
+    {
+    }
+
+    /**
+     * This is the case where a Mojo needs the lifecycle run to a certain 
phase before it can do
+     * anything useful.
+     */
+    public void 
testMojoThatRequiresExecutionToAGivenPhaseBeforeExecutingItself()
+        throws Exception
+    {
+    }
+    
+    // test that mojo which does not require dependency resolution trigger no 
downloading of dependencies
+    
     // 
-----------------------------------------------------------------------------------------------
     // Testing help
     // 
-----------------------------------------------------------------------------------------------


Reply via email to