Author: jdcasey
Date: Fri Jul 31 22:19:38 2009
New Revision: 799758

URL: http://svn.apache.org/viewvc?rev=799758&view=rev
Log:
[MNG-4270] completely load any plugin used for extensions, so plugin 
dependencies can supply artifact handlers and lifecycle mappings, in addition 
to the plugin artifact itself.

Modified:
    
maven/maven-2/branches/maven-2.2.x/maven-core/src/main/java/org/apache/maven/lifecycle/DefaultLifecycleExecutor.java
    
maven/maven-2/branches/maven-2.2.x/maven-core/src/main/java/org/apache/maven/plugin/DefaultPluginManager.java
    
maven/maven-2/branches/maven-2.2.x/maven-core/src/main/java/org/apache/maven/plugin/PluginManager.java

Modified: 
maven/maven-2/branches/maven-2.2.x/maven-core/src/main/java/org/apache/maven/lifecycle/DefaultLifecycleExecutor.java
URL: 
http://svn.apache.org/viewvc/maven/maven-2/branches/maven-2.2.x/maven-core/src/main/java/org/apache/maven/lifecycle/DefaultLifecycleExecutor.java?rev=799758&r1=799757&r2=799758&view=diff
==============================================================================
--- 
maven/maven-2/branches/maven-2.2.x/maven-core/src/main/java/org/apache/maven/lifecycle/DefaultLifecycleExecutor.java
 (original)
+++ 
maven/maven-2/branches/maven-2.2.x/maven-core/src/main/java/org/apache/maven/lifecycle/DefaultLifecycleExecutor.java
 Fri Jul 31 22:19:38 2009
@@ -220,7 +220,7 @@
         {
             try
             {
-                handlers.putAll( findArtifactTypeHandlersInPlugins( project, 
session.getSettings(), session.getLocalRepository() ) );
+                handlers.putAll( findArtifactTypeHandlersInPlugins( project, 
session ) );
 
                 // shudder...
                 for ( ArtifactHandler handler : handlers.values() )
@@ -1135,8 +1135,7 @@
                                 Plugin plugin = new Plugin();
                                 plugin.setGroupId( groupId );
                                 plugin.setArtifactId( artifactId );
-                                lifecyclePluginDescriptor = verifyPlugin( 
plugin, project, session.getSettings(),
-                                                                          
session.getLocalRepository() );
+                                lifecyclePluginDescriptor = verifyPlugin( 
plugin, project, session );
                                 if ( lifecyclePluginDescriptor == null )
                                 {
                                     throw new LifecycleExecutionException(
@@ -1345,8 +1344,7 @@
         String packaging = project.getPackaging();
         Map mappings = null;
 
-        LifecycleMapping m = (LifecycleMapping) findExtension( project, 
LifecycleMapping.ROLE, packaging,
-                                                               
session.getSettings(), session.getLocalRepository() );
+        LifecycleMapping m = (LifecycleMapping) findExtension( project, 
LifecycleMapping.ROLE, packaging, session );
         if ( m != null )
         {
             mappings = m.getPhases( lifecycle.getId() );
@@ -1393,8 +1391,7 @@
         String packaging = project.getPackaging();
         List optionalMojos = null;
 
-        LifecycleMapping m = (LifecycleMapping) findExtension( project, 
LifecycleMapping.ROLE, packaging, session
-            .getSettings(), session.getLocalRepository() );
+        LifecycleMapping m = (LifecycleMapping) findExtension( project, 
LifecycleMapping.ROLE, packaging, session );
 
         if ( m != null )
         {
@@ -1423,8 +1420,7 @@
         return optionalMojos;
     }
 
-    private Object findExtension( MavenProject project, String role, String 
roleHint, Settings settings,
-                                  ArtifactRepository localRepository )
+    private Object findExtension( MavenProject project, String role, String 
roleHint, MavenSession session )
         throws LifecycleExecutionException, PluginNotFoundException
     {
         Object pluginComponent = null;
@@ -1435,7 +1431,7 @@
 
             if ( plugin.isExtensions() )
             {
-                verifyPlugin( plugin, project, settings, localRepository );
+                loadPluginFully( plugin, project, session );
 
                 // TODO: if moved to the plugin manager we already have the 
descriptor from above and so do can lookup the container directly
                 try
@@ -1460,8 +1456,7 @@
      * @todo Not particularly happy about this. Would like WagonManager and 
ArtifactTypeHandlerManager to be able to
      * lookup directly, or have them passed in
      */
-    private Map<String, ArtifactHandler> findArtifactTypeHandlersInPlugins( 
MavenProject project, Settings settings,
-                                                                            
ArtifactRepository localRepository )
+    private Map<String, ArtifactHandler> findArtifactTypeHandlersInPlugins( 
MavenProject project, MavenSession session )
         throws LifecycleExecutionException, PluginNotFoundException
     {
         Map<String, ArtifactHandler> map = new HashMap<String, 
ArtifactHandler>();
@@ -1471,7 +1466,7 @@
 
             if ( plugin.isExtensions() )
             {
-                verifyPlugin( plugin, project, settings, localRepository );
+                verifyPlugin( plugin, project, session );
 
                 // TODO: if moved to the plugin manager we already have the 
descriptor from above and so do can lookup the container directly
                 try
@@ -1507,7 +1502,7 @@
         Settings settings = session.getSettings();
 
         PluginDescriptor pluginDescriptor =
-            verifyPlugin( plugin, project, session.getSettings(), 
session.getLocalRepository() );
+            verifyPlugin( plugin, project, session );
 
         if ( pluginDescriptor.getMojos() != null && 
!pluginDescriptor.getMojos().isEmpty() )
         {
@@ -1535,8 +1530,7 @@
         }
     }
 
-    private PluginDescriptor verifyPlugin( Plugin plugin, MavenProject 
project, Settings settings,
-                                           ArtifactRepository localRepository )
+    private PluginDescriptor verifyPlugin( Plugin plugin, MavenProject 
project, MavenSession session )
         throws LifecycleExecutionException, PluginNotFoundException
     {
         PluginDescriptor pluginDescriptor;
@@ -1544,7 +1538,49 @@
         {
             // TODO: MNG-4081...need to flush this plugin once we look at it, 
to avoid using an external
             // version of a plugin when a newer version will be created in the 
current reactor...
-            pluginDescriptor = pluginManager.verifyPlugin( plugin, project, 
settings, localRepository );
+            pluginDescriptor = pluginManager.loadPluginDescriptor( plugin, 
project, session );
+        }
+        catch ( PluginManagerException e )
+        {
+            throw new LifecycleExecutionException(
+                "Internal error in the plugin manager getting plugin '" + 
plugin.getKey() + "': " + e.getMessage(), e );
+        }
+        catch ( PluginVersionResolutionException e )
+        {
+            throw new LifecycleExecutionException( e.getMessage(), e );
+        }
+        catch ( InvalidVersionSpecificationException e )
+        {
+            throw new LifecycleExecutionException( e.getMessage(), e );
+        }
+        catch ( InvalidPluginException e )
+        {
+            throw new LifecycleExecutionException( e.getMessage(), e );
+        }
+        catch ( ArtifactNotFoundException e )
+        {
+            throw new LifecycleExecutionException( e.getMessage(), e );
+        }
+        catch ( ArtifactResolutionException e )
+        {
+            throw new LifecycleExecutionException( e.getMessage(), e );
+        }
+        catch ( PluginVersionNotFoundException e )
+        {
+            throw new LifecycleExecutionException( e.getMessage(), e );
+        }
+        return pluginDescriptor;
+    }
+
+    private PluginDescriptor loadPluginFully( Plugin plugin, MavenProject 
project, MavenSession session )
+        throws LifecycleExecutionException, PluginNotFoundException
+    {
+        PluginDescriptor pluginDescriptor;
+        try
+        {
+            // TODO: MNG-4081...need to flush this plugin once we look at it, 
to avoid using an external
+            // version of a plugin when a newer version will be created in the 
current reactor...
+            pluginDescriptor = pluginManager.loadPluginFully( plugin, project, 
session );
         }
         catch ( PluginManagerException e )
         {
@@ -1750,7 +1786,7 @@
                         Plugin buildPlugin = (Plugin) i.next();
 
                         PluginDescriptor desc =
-                            verifyPlugin( buildPlugin, project, 
session.getSettings(), session.getLocalRepository() );
+                            verifyPlugin( buildPlugin, project, session );
                         if ( prefix.equals( desc.getGoalPrefix() ) )
                         {
                             plugin = buildPlugin;
@@ -1813,7 +1849,7 @@
 
             if ( pluginDescriptor == null )
             {
-                pluginDescriptor = verifyPlugin( plugin, project, 
session.getSettings(), session.getLocalRepository() );
+                pluginDescriptor = verifyPlugin( plugin, project, session );
             }
 
             // this has been simplified from the old code that injected the 
plugin management stuff, since

Modified: 
maven/maven-2/branches/maven-2.2.x/maven-core/src/main/java/org/apache/maven/plugin/DefaultPluginManager.java
URL: 
http://svn.apache.org/viewvc/maven/maven-2/branches/maven-2.2.x/maven-core/src/main/java/org/apache/maven/plugin/DefaultPluginManager.java?rev=799758&r1=799757&r2=799758&view=diff
==============================================================================
--- 
maven/maven-2/branches/maven-2.2.x/maven-core/src/main/java/org/apache/maven/plugin/DefaultPluginManager.java
 (original)
+++ 
maven/maven-2/branches/maven-2.2.x/maven-core/src/main/java/org/apache/maven/plugin/DefaultPluginManager.java
 Fri Jul 31 22:19:38 2009
@@ -161,6 +161,9 @@
                                                  session.getLocalRepository() 
);
     }
 
+    /**
+     * {...@inheritdoc}
+     */
     public PluginDescriptor verifyPlugin( Plugin plugin,
                                           MavenProject project,
                                           Settings settings,
@@ -1588,7 +1591,7 @@
         PluginDescriptor pluginDescriptor = 
pluginCollector.getPluginDescriptor( plugin );
 
         PlexusContainer pluginContainer = getPluginContainer( pluginDescriptor 
);
-
+        
         return pluginContainer.lookup( role, roleHint );
     }
 
@@ -1611,4 +1614,31 @@
 
         return components;
     }
+    
+    /**
+     * {...@inheritdoc}
+     */
+    public PluginDescriptor loadPluginFully( Plugin plugin, MavenProject 
project, MavenSession session )
+        throws ArtifactResolutionException, PluginVersionResolutionException, 
ArtifactNotFoundException,
+        InvalidVersionSpecificationException, InvalidPluginException, 
PluginManagerException, PluginNotFoundException,
+        PluginVersionNotFoundException
+    {
+        PluginDescriptor pd = verifyPlugin( plugin, project, 
session.getSettings(), session.getLocalRepository() );
+        
+        PlexusContainer pluginContainer = getPluginContainer( pd );
+        ensurePluginContainerIsComplete( pd, pluginContainer, project, session 
);
+        
+        return pd;
+    }
+
+    /**
+     * {...@inheritdoc}
+     */
+    public PluginDescriptor loadPluginDescriptor( Plugin plugin, MavenProject 
project, MavenSession session )
+        throws ArtifactResolutionException, PluginVersionResolutionException, 
ArtifactNotFoundException,
+        InvalidVersionSpecificationException, InvalidPluginException, 
PluginManagerException, PluginNotFoundException,
+        PluginVersionNotFoundException
+    {
+        return verifyPlugin( plugin, project, session.getSettings(), 
session.getLocalRepository() );
+    }
 }

Modified: 
maven/maven-2/branches/maven-2.2.x/maven-core/src/main/java/org/apache/maven/plugin/PluginManager.java
URL: 
http://svn.apache.org/viewvc/maven/maven-2/branches/maven-2.2.x/maven-core/src/main/java/org/apache/maven/plugin/PluginManager.java?rev=799758&r1=799757&r2=799758&view=diff
==============================================================================
--- 
maven/maven-2/branches/maven-2.2.x/maven-core/src/main/java/org/apache/maven/plugin/PluginManager.java
 (original)
+++ 
maven/maven-2/branches/maven-2.2.x/maven-core/src/main/java/org/apache/maven/plugin/PluginManager.java
 Fri Jul 31 22:19:38 2009
@@ -57,6 +57,9 @@
 
     Plugin getPluginDefinitionForPrefix( String prefix, MavenSession session, 
MavenProject project );
 
+    /**
+     * @deprecated Use {...@link PluginManager#loadPluginDescriptor(Plugin, 
MavenProject, MavenSession)} instead.
+     */
     PluginDescriptor verifyPlugin( Plugin plugin, MavenProject project, 
Settings settings,
                                    ArtifactRepository localRepository )
         throws ArtifactResolutionException, PluginVersionResolutionException, 
ArtifactNotFoundException,
@@ -73,5 +76,21 @@
 
     Map getPluginComponents( Plugin plugin, String role )
         throws ComponentLookupException, PluginManagerException;
+    
+    /**
+     * @since 2.2.1
+     */
+    PluginDescriptor loadPluginDescriptor( Plugin plugin, MavenProject 
project, MavenSession session )
+        throws ArtifactResolutionException, PluginVersionResolutionException, 
ArtifactNotFoundException,
+        InvalidVersionSpecificationException, InvalidPluginException, 
PluginManagerException, PluginNotFoundException,
+        PluginVersionNotFoundException;
+    
+    /**
+     * @since 2.2.1
+     */
+    PluginDescriptor loadPluginFully( Plugin plugin, MavenProject project, 
MavenSession session )
+        throws ArtifactResolutionException, PluginVersionResolutionException, 
ArtifactNotFoundException,
+        InvalidVersionSpecificationException, InvalidPluginException, 
PluginManagerException, PluginNotFoundException,
+        PluginVersionNotFoundException;
 
 }
\ No newline at end of file


Reply via email to