You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@maven.apache.org by jd...@apache.org on 2009/08/01 00:19:38 UTC

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

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