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 ); + } + } + }