You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@maven.apache.org by jv...@apache.org on 2009/05/13 20:43:05 UTC

svn commit: r774487 - in /maven/components/branches/MNG-2766: maven-compat/src/main/java/org/apache/maven/artifact/resolver/ maven-core/src/main/java/org/apache/maven/lifecycle/ maven-core/src/main/java/org/apache/maven/plugin/ maven-core/src/main/java...

Author: jvanzyl
Date: Wed May 13 18:42:56 2009
New Revision: 774487

URL: http://svn.apache.org/viewvc?rev=774487&view=rev
Log:
o another pass the the plugin manager

Modified:
    maven/components/branches/MNG-2766/maven-compat/src/main/java/org/apache/maven/artifact/resolver/ArtifactResolutionRequest.java
    maven/components/branches/MNG-2766/maven-core/src/main/java/org/apache/maven/lifecycle/DefaultLifecycleExecutor.java
    maven/components/branches/MNG-2766/maven-core/src/main/java/org/apache/maven/plugin/DefaultPluginClassLoaderCache.java
    maven/components/branches/MNG-2766/maven-core/src/main/java/org/apache/maven/plugin/DefaultPluginManager.java
    maven/components/branches/MNG-2766/maven-core/src/main/java/org/apache/maven/plugin/PluginClassLoaderCache.java
    maven/components/branches/MNG-2766/maven-core/src/main/java/org/apache/maven/project/DefaultMavenProjectBuilder.java
    maven/components/branches/MNG-2766/maven-core/src/main/java/org/apache/maven/project/DefaultMavenProjectCache.java
    maven/components/branches/MNG-2766/maven-core/src/main/java/org/apache/maven/project/MavenProjectCache.java
    maven/components/branches/MNG-2766/maven-core/src/test/java/org/apache/maven/project/DefaultMavenProjectBuilderTest.java

Modified: maven/components/branches/MNG-2766/maven-compat/src/main/java/org/apache/maven/artifact/resolver/ArtifactResolutionRequest.java
URL: http://svn.apache.org/viewvc/maven/components/branches/MNG-2766/maven-compat/src/main/java/org/apache/maven/artifact/resolver/ArtifactResolutionRequest.java?rev=774487&r1=774486&r2=774487&view=diff
==============================================================================
--- maven/components/branches/MNG-2766/maven-compat/src/main/java/org/apache/maven/artifact/resolver/ArtifactResolutionRequest.java (original)
+++ maven/components/branches/MNG-2766/maven-compat/src/main/java/org/apache/maven/artifact/resolver/ArtifactResolutionRequest.java Wed May 13 18:42:56 2009
@@ -127,10 +127,6 @@
         return this;
     }
 
-    // ------------------------------------------------------------------------
-    //
-    // ------------------------------------------------------------------------
-
     public ArtifactMetadataSource getMetadataSource()
     {
         return metadataSource;

Modified: maven/components/branches/MNG-2766/maven-core/src/main/java/org/apache/maven/lifecycle/DefaultLifecycleExecutor.java
URL: http://svn.apache.org/viewvc/maven/components/branches/MNG-2766/maven-core/src/main/java/org/apache/maven/lifecycle/DefaultLifecycleExecutor.java?rev=774487&r1=774486&r2=774487&view=diff
==============================================================================
--- maven/components/branches/MNG-2766/maven-core/src/main/java/org/apache/maven/lifecycle/DefaultLifecycleExecutor.java (original)
+++ maven/components/branches/MNG-2766/maven-core/src/main/java/org/apache/maven/lifecycle/DefaultLifecycleExecutor.java Wed May 13 18:42:56 2009
@@ -41,6 +41,7 @@
 import org.apache.maven.model.Plugin;
 import org.apache.maven.model.PluginExecution;
 import org.apache.maven.plugin.MojoExecution;
+import org.apache.maven.plugin.PluginExecutionException;
 import org.apache.maven.plugin.PluginLoaderException;
 import org.apache.maven.plugin.PluginManager;
 import org.apache.maven.plugin.PluginParameterExpressionEvaluator;
@@ -64,6 +65,12 @@
 //TODO: Inside an IDE we are replacing the notion of our reactor with a workspace. In both of these cases
 //      we need to layer these as local repositories.
 //TODO: Cache the lookups of the PluginDescriptors
+//TODO: check for online status in the build plan and die if necessary
+//TODO if ( mojoDescriptor.isProjectRequired() && !session.isUsingPOMsFromFilesystem() )
+//{
+//    throw new PluginExecutionException( mojoExecution, project, "Cannot execute mojo: " + mojoDescriptor.getGoal()
+//        + ". It requires a project with an existing pom.xml, but the build is not using one." );
+//}
 
 /**
  * @author Jason van Zyl

Modified: maven/components/branches/MNG-2766/maven-core/src/main/java/org/apache/maven/plugin/DefaultPluginClassLoaderCache.java
URL: http://svn.apache.org/viewvc/maven/components/branches/MNG-2766/maven-core/src/main/java/org/apache/maven/plugin/DefaultPluginClassLoaderCache.java?rev=774487&r1=774486&r2=774487&view=diff
==============================================================================
--- maven/components/branches/MNG-2766/maven-core/src/main/java/org/apache/maven/plugin/DefaultPluginClassLoaderCache.java (original)
+++ maven/components/branches/MNG-2766/maven-core/src/main/java/org/apache/maven/plugin/DefaultPluginClassLoaderCache.java Wed May 13 18:42:56 2009
@@ -22,4 +22,8 @@
         return pluginClassLoaders.get( key );
     }
 
+    public int size()
+    {
+        return pluginClassLoaders.size();
+    }
 }

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=774487&r1=774486&r2=774487&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 May 13 18:42:56 2009
@@ -148,10 +148,6 @@
         {
             throw new PluginLoaderException( plugin, "Failed to load plugin. Reason: " + e.getMessage(), e );
         }
-        catch ( PluginVersionResolutionException e )
-        {
-            throw new PluginLoaderException( plugin, "Failed to load plugin. Reason: " + e.getMessage(), e );
-        }
         catch ( PluginContainerException e )
         {
             throw new PluginLoaderException( plugin, "Failed to load plugin. Reason: " + e.getMessage(), e );
@@ -168,7 +164,7 @@
     }
 
     protected PluginDescriptor addPlugin( Plugin plugin, ArtifactRepository localRepository, List<ArtifactRepository> remoteRepositories )
-        throws ArtifactNotFoundException, ArtifactResolutionException, PluginVersionResolutionException, PluginContainerException, PluginVersionNotFoundException
+        throws ArtifactNotFoundException, ArtifactResolutionException, PluginContainerException, PluginVersionNotFoundException
     {
         Artifact pluginArtifact = repositorySystem.createPluginArtifact( plugin );
 
@@ -181,7 +177,14 @@
 
         resolutionErrorHandler.throwErrors( request, result );
 
-        ClassRealm pluginRealm = container.createChildRealm( pluginKey( plugin ) );
+        ClassRealm pluginRealm = pluginClassLoaderCache.get( constructPluginKey( plugin ) );
+        
+        if ( pluginRealm != null )            
+        {
+            return getPluginDescriptor( plugin );            
+        }            
+            
+        pluginRealm = container.createChildRealm( pluginKey( plugin ) );
 
         Set<Artifact> pluginArtifacts = getPluginArtifacts( pluginArtifact, plugin, localRepository, remoteRepositories );
 
@@ -196,13 +199,9 @@
                 // Not going to happen
             }
         }
-        
-        //pluginRealm.display();
-        
+                
         try
         {
-            logger.debug( "Discovering components in realm: " + pluginRealm );
-
             container.discoverComponents( pluginRealm );
         }
         catch ( PlexusConfigurationException e )
@@ -215,21 +214,10 @@
         }
 
         pluginClassLoaderCache.put( constructPluginKey( plugin ), pluginRealm );
-        
-        PluginDescriptor pluginDescriptor = getPluginDescriptor( plugin );
-        
-        // We just need to keep track of the realm, if we need to augment we will wrap the realm
-        pluginDescriptor.setPluginArtifact( pluginArtifact );
-        pluginDescriptor.setArtifacts( new ArrayList<Artifact>( pluginArtifacts ) );
-        pluginDescriptor.setClassRealm( pluginRealm );
-
-        return pluginDescriptor;
+                
+        return getPluginDescriptor( plugin );
     }
 
-    // plugin artifact
-    //   its dependencies while filtering out what's in the core
-    //   layering on the project level plugin dependencies
-
     private Set<Artifact> getPluginArtifacts( Artifact pluginArtifact, Plugin pluginAsSpecifiedinPom, ArtifactRepository localRepository, List<ArtifactRepository> remoteRepositories )
         throws ArtifactNotFoundException, ArtifactResolutionException
     {
@@ -283,23 +271,6 @@
 
         MojoDescriptor mojoDescriptor = mojoExecution.getMojoDescriptor();
 
-        if ( mojoDescriptor.isProjectRequired() && !session.isUsingPOMsFromFilesystem() )
-        {
-            throw new PluginExecutionException( mojoExecution, project, "Cannot execute mojo: " + mojoDescriptor.getGoal()
-                + ". It requires a project with an existing pom.xml, but the build is not using one." );
-        }
-
-        if ( mojoDescriptor.isOnlineRequired() && session.isOffline() )
-        {
-            // TODO: Should we error out, or simply warn and skip??
-            throw new PluginExecutionException( mojoExecution, project, "Mojo: " + mojoDescriptor.getGoal() + " requires online mode for execution. Maven is currently offline." );
-        }
-
-        if ( mojoDescriptor.getDeprecated() != null )
-        {
-            logger.warn( "Mojo: " + mojoDescriptor.getGoal() + " is deprecated.\n" + mojoDescriptor.getDeprecated() );
-        }
-
         String goalName = mojoDescriptor.getFullGoalName();
 
         Mojo mojo = null;
@@ -311,15 +282,13 @@
         }
 
         // by this time, the pluginDescriptor has had the correct realm setup from getConfiguredMojo(..)
-        ClassRealm pluginRealm;
+        ClassRealm pluginRealm = pluginClassLoaderCache.get( constructPluginKey( mojoDescriptor.getPluginDescriptor() ) );            
         ClassRealm oldLookupRealm = container.getLookupRealm();
         ClassLoader oldClassLoader = Thread.currentThread().getContextClassLoader();
 
         try
-        {
-            mojo = getConfiguredMojo( session, mojoExecution, project, false, mojoExecution );
-
-            pluginRealm = pluginClassLoaderCache.get( constructPluginKey( mojoDescriptor.getPluginDescriptor() ) );            
+        {                        
+            mojo = getConfiguredMojo( session, project, mojoExecution, pluginRealm );
 
             Thread.currentThread().setContextClassLoader( pluginRealm );
 
@@ -371,15 +340,13 @@
         }
     }
 
-    private Mojo getConfiguredMojo( MavenSession session, MojoExecution MojoExecution, MavenProject project, boolean report, MojoExecution mojoExecution )
+    private Mojo getConfiguredMojo( MavenSession session, MavenProject project, MojoExecution mojoExecution, ClassRealm pluginRealm )
         throws PluginConfigurationException, PluginManagerException
     {
         MojoDescriptor mojoDescriptor = mojoExecution.getMojoDescriptor();
 
         PluginDescriptor pluginDescriptor = mojoDescriptor.getPluginDescriptor();
 
-        ClassRealm pluginRealm = pluginDescriptor.getClassRealm();
-
         // We are forcing the use of the plugin realm for all lookups that might occur during
         // the lifecycle that is part of the lookup. Here we are specifically trying to keep
         // lookups that occur in contextualize calls in line with the right realm.
@@ -388,8 +355,6 @@
         ClassLoader oldClassLoader = Thread.currentThread().getContextClassLoader();
         Thread.currentThread().setContextClassLoader( pluginRealm );
 
-        logger.debug( "Looking up mojo " + mojoDescriptor.getRoleHint() + " in realm " + pluginRealm.getId() + " - descRealmId=" + mojoDescriptor.getRealm() );
-
         Mojo mojo;
 
         try
@@ -434,7 +399,7 @@
 
         ExpressionEvaluator expressionEvaluator = new PluginParameterExpressionEvaluator( session, mojoExecution );
 
-        populatePluginFields( mojo, mojoDescriptor, pomConfiguration, expressionEvaluator );
+        populatePluginFields( mojo, mojoDescriptor, pluginRealm, pomConfiguration, expressionEvaluator );
 
         Thread.currentThread().setContextClassLoader( oldClassLoader );
 
@@ -445,14 +410,11 @@
     // Mojo Parameter Handling
     // ----------------------------------------------------------------------
 
-    private void populatePluginFields( Mojo plugin, MojoDescriptor mojoDescriptor, PlexusConfiguration configuration, ExpressionEvaluator expressionEvaluator )
+    private void populatePluginFields( Mojo mojo, MojoDescriptor mojoDescriptor, ClassRealm realm, PlexusConfiguration configuration, ExpressionEvaluator expressionEvaluator )
         throws PluginConfigurationException
     {
         ComponentConfigurator configurator = null;
 
-        // TODO: What is the point in using the plugin realm here instead of the core realm?
-        ClassRealm realm = mojoDescriptor.getPluginDescriptor().getClassRealm();
-
         try
         {
             String configuratorId = mojoDescriptor.getComponentConfigurator();
@@ -473,7 +435,7 @@
             logger.debug( "Configuring mojo '" + mojoDescriptor.getId() + "' with " + ( configuratorId == null ? "basic" : configuratorId ) + " configurator -->" );
 
             // This needs to be able to use methods
-            configurator.configureComponent( plugin, configuration, expressionEvaluator, realm, listener );
+            configurator.configureComponent( mojo, configuration, expressionEvaluator, realm, listener );
 
             logger.debug( "-- end configuration --" );
         }

Modified: maven/components/branches/MNG-2766/maven-core/src/main/java/org/apache/maven/plugin/PluginClassLoaderCache.java
URL: http://svn.apache.org/viewvc/maven/components/branches/MNG-2766/maven-core/src/main/java/org/apache/maven/plugin/PluginClassLoaderCache.java?rev=774487&r1=774486&r2=774487&view=diff
==============================================================================
--- maven/components/branches/MNG-2766/maven-core/src/main/java/org/apache/maven/plugin/PluginClassLoaderCache.java (original)
+++ maven/components/branches/MNG-2766/maven-core/src/main/java/org/apache/maven/plugin/PluginClassLoaderCache.java Wed May 13 18:42:56 2009
@@ -16,4 +16,6 @@
     void put( String key, ClassRealm pluginClassLoader );
     
     ClassRealm get( String key );
+    
+    int size();
 }

Modified: maven/components/branches/MNG-2766/maven-core/src/main/java/org/apache/maven/project/DefaultMavenProjectBuilder.java
URL: http://svn.apache.org/viewvc/maven/components/branches/MNG-2766/maven-core/src/main/java/org/apache/maven/project/DefaultMavenProjectBuilder.java?rev=774487&r1=774486&r2=774487&view=diff
==============================================================================
--- maven/components/branches/MNG-2766/maven-core/src/main/java/org/apache/maven/project/DefaultMavenProjectBuilder.java (original)
+++ maven/components/branches/MNG-2766/maven-core/src/main/java/org/apache/maven/project/DefaultMavenProjectBuilder.java Wed May 13 18:42:56 2009
@@ -106,7 +106,7 @@
 
     public MavenProject build( File pomFile, ProjectBuilderConfiguration configuration )
         throws ProjectBuildingException
-    {
+    {                
         MavenProject project = projectCache.get( pomFile.getAbsolutePath() );
                 
         if ( project != null )

Modified: maven/components/branches/MNG-2766/maven-core/src/main/java/org/apache/maven/project/DefaultMavenProjectCache.java
URL: http://svn.apache.org/viewvc/maven/components/branches/MNG-2766/maven-core/src/main/java/org/apache/maven/project/DefaultMavenProjectCache.java?rev=774487&r1=774486&r2=774487&view=diff
==============================================================================
--- maven/components/branches/MNG-2766/maven-core/src/main/java/org/apache/maven/project/DefaultMavenProjectCache.java (original)
+++ maven/components/branches/MNG-2766/maven-core/src/main/java/org/apache/maven/project/DefaultMavenProjectCache.java Wed May 13 18:42:56 2009
@@ -20,4 +20,9 @@
     {
         projectCache.put( key, project );        
     }
+    
+    public int size()
+    {
+        return projectCache.size();
+    }
 }

Modified: maven/components/branches/MNG-2766/maven-core/src/main/java/org/apache/maven/project/MavenProjectCache.java
URL: http://svn.apache.org/viewvc/maven/components/branches/MNG-2766/maven-core/src/main/java/org/apache/maven/project/MavenProjectCache.java?rev=774487&r1=774486&r2=774487&view=diff
==============================================================================
--- maven/components/branches/MNG-2766/maven-core/src/main/java/org/apache/maven/project/MavenProjectCache.java (original)
+++ maven/components/branches/MNG-2766/maven-core/src/main/java/org/apache/maven/project/MavenProjectCache.java Wed May 13 18:42:56 2009
@@ -5,4 +5,6 @@
     MavenProject get( String absolutePath );
 
     void put( String absolutePath, MavenProject project );
+    
+    int size();
 }

Modified: maven/components/branches/MNG-2766/maven-core/src/test/java/org/apache/maven/project/DefaultMavenProjectBuilderTest.java
URL: http://svn.apache.org/viewvc/maven/components/branches/MNG-2766/maven-core/src/test/java/org/apache/maven/project/DefaultMavenProjectBuilderTest.java?rev=774487&r1=774486&r2=774487&view=diff
==============================================================================
--- maven/components/branches/MNG-2766/maven-core/src/test/java/org/apache/maven/project/DefaultMavenProjectBuilderTest.java (original)
+++ maven/components/branches/MNG-2766/maven-core/src/test/java/org/apache/maven/project/DefaultMavenProjectBuilderTest.java Wed May 13 18:42:56 2009
@@ -112,10 +112,17 @@
         throws Exception
     {
         ArtifactRepositoryLayout repoLayout = lookup( ArtifactRepositoryLayout.class, "legacy" );
-
-        ArtifactRepository r = new DefaultArtifactRepository( "local", "file://" + localRepoDir.getAbsolutePath(),
-                                                              repoLayout );
-
+        ArtifactRepository r = new DefaultArtifactRepository( "local", "file://" + localRepoDir.getAbsolutePath(), repoLayout );
         return r;
     }
+    
+    public void xtestLoop() throws Exception
+    {
+        while( true )
+        {
+        File f1 = getTestFile( "src/test/resources/projects/duplicate-plugins-merged-pom.xml" );
+        getProject( f1 );
+        }
+    }
+    
 }