Author: jvanzyl Date: Wed Apr 29 18:00:15 2009 New Revision: 769857 URL: http://svn.apache.org/viewvc?rev=769857&view=rev Log: o removing some more dead code
Modified: maven/components/branches/MNG-2766/maven-core/src/main/java/org/apache/maven/plugin/DefaultPluginManager.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=769857&r1=769856&r2=769857&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 29 18:00:15 2009 @@ -21,7 +21,6 @@ import java.net.URL; import java.net.URLConnection; import java.util.ArrayList; -import java.util.Collection; import java.util.Collections; import java.util.Enumeration; import java.util.HashMap; @@ -91,14 +90,16 @@ import org.codehaus.plexus.util.StringUtils; import org.codehaus.plexus.util.xml.Xpp3Dom; -//TODO: get plugin groups -//TODO: separate out project downloading -//TODO: template method plugin validation as its framework specific -//TODO: provide a method to get default configuraiton for a given plugin -//TODO: get rid of all the custom configuration merging here, that's domain specific but needs to incorporate defaults the plugin manager can provide -//TODO: the antrun plugin has its own configurator, the only plugin that does. might need to think about how that works -//TODO: merge the plugin collector into the plugin manager -//TODO: merge the plugin discovery listener into the plugin manager +// TODO: get plugin groups +// TODO: separate out project downloading +// TODO: template method plugin validation as its framework specific +// TODO: provide a method to get default configuraiton for a given plugin +// TODO: get rid of all the custom configuration merging here, that's domain specific but needs to +// incorporate defaults the plugin manager can provide +// TODO: the antrun plugin has its own configurator, the only plugin that does. might need to think +// about how that works +// TODO: merge the plugin collector into the plugin manager +// TODO: merge the plugin discovery listener into the plugin manager @Component(role = PluginManager.class) public class DefaultPluginManager @@ -106,7 +107,7 @@ { @Requirement private Logger logger; - + @Requirement protected PlexusContainer container; @@ -124,39 +125,37 @@ @Requirement protected MavenProjectBuilder mavenProjectBuilder; - - private Map<String,Plugin> pluginDefinitionsByPrefix = new HashMap<String,Plugin>(); - - private Map<String, PluginDescriptor> pluginDescriptors; - + + private Map<String, PluginDescriptor> pluginDescriptors; + public DefaultPluginManager() { - pluginDescriptors = new HashMap<String,PluginDescriptor>(); + pluginDescriptors = new HashMap<String, PluginDescriptor>(); } // This should be template method code for allowing subclasses to assist in contributing search/hint information public Plugin findPluginForPrefix( String prefix, MavenProject project ) { //Use the plugin managers capabilities to get information to augement the request - + return null; //return getByPrefix( prefix, session.getPluginGroups(), project.getRemoteArtifactRepositories(), session.getLocalRepository() ); } - + public PluginDescriptor loadPlugin( Plugin plugin, MavenProject project, ArtifactRepository localRepository ) throws PluginLoaderException - { + { PluginDescriptor pluginDescriptor = getPluginDescriptor( plugin ); - + // There are cases where plugins are discovered but not actually populated. These are edge cases where you are working in the IDE on // Maven itself so this speaks to a problem we have with the system not starting entirely clean. if ( pluginDescriptor != null && pluginDescriptor.getClassRealm() != null ) { return pluginDescriptor; } - + try - { + { return addPlugin( plugin, project, localRepository ); } catch ( ArtifactResolutionException e ) @@ -183,18 +182,18 @@ { throw new PluginLoaderException( plugin, "Failed to load plugin. Reason: " + e.getMessage(), e ); } - } - + } + private String pluginKey( Plugin plugin ) { return plugin.getGroupId() + ":" + plugin.getArtifactId() + ":" + plugin.getVersion(); } - + protected PluginDescriptor addPlugin( Plugin plugin, MavenProject project, ArtifactRepository localRepository ) throws ArtifactNotFoundException, ArtifactResolutionException, InvalidPluginException, PluginVersionResolutionException, PluginContainerException, PluginVersionNotFoundException { resolvePluginVersion( plugin, project ); - + MavenProject pluginProject = buildPluginProject( plugin, localRepository, new ArrayList( project.getRemoteArtifactRepositories() ) ); Artifact pluginArtifact = repositorySystem.createPluginArtifact( plugin ); @@ -210,7 +209,7 @@ resolutionErrorHandler.throwErrors( request, result ); ClassRealm pluginRealm = container.createChildRealm( pluginKey( plugin ) ); - + Set<Artifact> pluginArtifacts = getPluginArtifacts( pluginArtifact, plugin, project, localRepository ); for ( Artifact a : pluginArtifacts ) @@ -241,27 +240,26 @@ } 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; } // 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 plugin, MavenProject project, ArtifactRepository localRepository ) throws InvalidPluginException, ArtifactNotFoundException, ArtifactResolutionException { AndArtifactFilter filter = new AndArtifactFilter(); filter.add( coreArtifactFilterManager.getCoreArtifactFilter() ); filter.add( new ScopeArtifactFilter( Artifact.SCOPE_RUNTIME_PLUS_SYSTEM ) ); - + Set<Artifact> projectPluginDependencies; // The case where we have a plugin that can host multiple versions of a particular tool. Say the @@ -278,24 +276,24 @@ InvalidDependencyVersionException ee = new InvalidDependencyVersionException( e.getProjectId(), e.getDependency(), e.getPomFile(), e.getCauseException() ); throw new InvalidPluginException( "Plugin '" + plugin + "' is invalid: " + e.getMessage(), ee ); } - - Map<String,Artifact> pluginManagedDependencies = new HashMap<String,Artifact>(); - + + Map<String, Artifact> pluginManagedDependencies = new HashMap<String, Artifact>(); + List<Artifact> pluginArtifacts = new ArrayList<Artifact>(); - + try { Artifact pluginPomArtifact = repositorySystem.createProjectArtifact( pluginArtifact.getGroupId(), pluginArtifact.getArtifactId(), pluginArtifact.getVersion() ); - + // This does not populate the artifacts of the dependenct projects MavenProject pluginProject = mavenProjectBuilder.buildFromRepository( pluginPomArtifact, new ArrayList( project.getRemoteArtifactRepositories() ), localRepository ); - + // This needs to be changed so that the resolver deals with this for ( Dependency d : pluginProject.getDependencies() ) { pluginArtifacts.add( repositorySystem.createArtifact( d.getGroupId(), d.getArtifactId(), d.getVersion(), d.getScope(), d.getType() ) ); } - + if ( pluginProject != null ) { pluginManagedDependencies = pluginProject.getManagedVersionMap(); @@ -314,15 +312,9 @@ // followed by the plugin's default artifact set dependencies.addAll( pluginArtifacts ); - ArtifactResolutionRequest request = new ArtifactResolutionRequest() - .setArtifact( pluginArtifact ) - .setArtifactDependencies( dependencies ) - .setLocalRepository( localRepository ) - .setRemoteRepostories( new ArrayList( project.getRemoteArtifactRepositories() ) ) - .setManagedVersionMap( pluginManagedDependencies ) - .setFilter( filter ) - .setResolveRoot( false ); // We are setting this to false because the artifact itself has been resolved. - + ArtifactResolutionRequest request = new ArtifactResolutionRequest().setArtifact( pluginArtifact ).setArtifactDependencies( dependencies ).setLocalRepository( localRepository ) + .setRemoteRepostories( new ArrayList( project.getRemoteArtifactRepositories() ) ).setManagedVersionMap( pluginManagedDependencies ).setFilter( filter ).setResolveRoot( false ); // We are setting this to false because the artifact itself has been resolved. + ArtifactResolutionResult result = repositorySystem.resolve( request ); resolutionErrorHandler.throwErrors( request, result ); @@ -348,12 +340,12 @@ // ---------------------------------------------------------------------- // Mojo execution // ---------------------------------------------------------------------- - + public void executeMojo( MavenSession session, MojoExecution mojoExecution ) throws MojoFailureException, PluginExecutionException, PluginConfigurationException { MavenProject project = session.getCurrentProject(); - + MojoDescriptor mojoDescriptor = mojoExecution.getMojoDescriptor(); if ( mojoDescriptor.isProjectRequired() && !session.isUsingPOMsFromFilesystem() ) @@ -374,7 +366,7 @@ } if ( mojoDescriptor.isDependencyResolutionRequired() != null ) - { + { try { // mojoDescriptor.isDependencyResolutionRequired() is actually the scope of the dependency resolution required, not a boolean ... yah. @@ -382,15 +374,15 @@ } catch ( ArtifactResolutionException e ) { - throw new PluginExecutionException( mojoExecution, project, e.getMessage() ); + throw new PluginExecutionException( mojoExecution, project, e.getMessage() ); } catch ( InvalidDependencyVersionException e ) { - throw new PluginExecutionException( mojoExecution, project, e.getMessage() ); + throw new PluginExecutionException( mojoExecution, project, e.getMessage() ); } catch ( ArtifactNotFoundException e ) { - throw new PluginExecutionException( mojoExecution, project, e.getMessage() ); + throw new PluginExecutionException( mojoExecution, project, e.getMessage() ); } } @@ -404,7 +396,7 @@ // need to inject into the POM. Shane will soon take care of this. // Merge the plugin level configuration with the execution level configuration // where the latter is dominant. - + if ( project.getBuildPlugins() != null ) { for ( Plugin buildPlugin : project.getBuildPlugins() ) @@ -416,7 +408,7 @@ if ( buildPlugin.getArtifactId().equals( pluginDescriptor.getArtifactId() ) ) { Xpp3Dom dom = (Xpp3Dom) buildPlugin.getConfiguration(); - + // Search through executions for ( PluginExecution e : buildPlugin.getExecutions() ) { @@ -430,11 +422,11 @@ } } } - - mojoExecution.setConfiguration( dom ); + + mojoExecution.setConfiguration( dom ); } } - } + } String goalExecId = goalName; if ( mojoExecution.getExecutionId() != null ) @@ -451,8 +443,8 @@ { mojo = getConfiguredMojo( session, mojoExecution, project, false, mojoExecution ); - pluginRealm = pluginDescriptor.getClassRealm(); - + pluginRealm = pluginDescriptor.getClassRealm(); + Thread.currentThread().setContextClassLoader( pluginRealm ); // NOTE: DuplicateArtifactAttachmentException is currently unchecked, so be careful removing this try/catch! @@ -478,7 +470,7 @@ catch ( PluginManagerException e ) { - throw new PluginExecutionException( mojoExecution, project, e.getMessage() ); + throw new PluginExecutionException( mojoExecution, project, e.getMessage() ); } finally { @@ -511,7 +503,7 @@ 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. @@ -524,7 +516,7 @@ logger.debug( "Looking up mojo " + mojoDescriptor.getRoleHint() + " in realm " + pluginRealm.getId() + " - descRealmId=" + mojoDescriptor.getRealm() ); Mojo mojo; - + try { mojo = container.lookup( Mojo.class, mojoDescriptor.getRoleHint() ); @@ -537,7 +529,7 @@ if ( mojo instanceof ContextEnabled ) { - Map<String,Object> pluginContext = session.getPluginContext( pluginDescriptor, project ); + Map<String, Object> pluginContext = session.getPluginContext( pluginDescriptor, project ); if ( pluginContext != null ) { @@ -552,9 +544,9 @@ mojo.setLog( new DefaultLog( logger ) ); Xpp3Dom dom = mojoExecution.getConfiguration(); - + PlexusConfiguration pomConfiguration; - + if ( dom == null ) { pomConfiguration = new XmlPlexusConfiguration( "configuration" ); @@ -589,7 +581,8 @@ } } - private void checkDeprecatedParameters( MojoDescriptor mojoDescriptor, PlexusConfiguration extractedMojoConfiguration ) throws PlexusConfigurationException + private void checkDeprecatedParameters( MojoDescriptor mojoDescriptor, PlexusConfiguration extractedMojoConfiguration ) + throws PlexusConfigurationException { if ( ( extractedMojoConfiguration == null ) || ( extractedMojoConfiguration.getChildCount() < 1 ) ) { @@ -597,7 +590,7 @@ } List<Parameter> parameters = mojoDescriptor.getParameters(); - + if ( ( parameters != null ) && !parameters.isEmpty() ) { for ( Parameter param : parameters ) @@ -606,7 +599,7 @@ { boolean warnOfDeprecation = false; PlexusConfiguration child = extractedMojoConfiguration.getChild( param.getName() ); - + if ( ( child != null ) && ( child.getValue() != null ) ) { warnOfDeprecation = true; @@ -758,7 +751,7 @@ } } } - + // ---------------------------------------------------------------------- // Mojo Parameter Handling // ---------------------------------------------------------------------- @@ -878,9 +871,9 @@ //TODO: This needs to be moved out of here, and there needs to be some interplay between the lifecycle executor and the plugin manager. private void downloadProjectDependencies( 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() ); @@ -902,44 +895,39 @@ ArtifactFilter filter = new ScopeArtifactFilter( scope ); - ArtifactResolutionRequest request = new ArtifactResolutionRequest() - .setArtifact( artifact ) - .setResolveRoot( false ) - .setArtifactDependencies( project.getDependencyArtifacts() ) - .setLocalRepository( session.getLocalRepository() ) - .setRemoteRepostories( new ArrayList( project.getRemoteArtifactRepositories() ) ) - .setManagedVersionMap( project.getManagedVersionMap() ) + ArtifactResolutionRequest request = new ArtifactResolutionRequest().setArtifact( artifact ).setResolveRoot( false ).setArtifactDependencies( project.getDependencyArtifacts() ) + .setLocalRepository( session.getLocalRepository() ).setRemoteRepostories( new ArrayList( project.getRemoteArtifactRepositories() ) ).setManagedVersionMap( project.getManagedVersionMap() ) .setFilter( filter ); ArtifactResolutionResult result = repositorySystem.resolve( request ); - + resolutionErrorHandler.throwErrors( request, result ); - project.setArtifacts( result.getArtifacts() ); - + project.setArtifacts( result.getArtifacts() ); + ArtifactRepository localRepository = session.getLocalRepository(); List<ArtifactRepository> remoteArtifactRepositories = new ArrayList( session.getCurrentProject().getRemoteArtifactRepositories() ); for ( Artifact projectArtifact : session.getCurrentProject().getArtifacts() ) - { + { repositorySystem.resolve( new ArtifactResolutionRequest( projectArtifact, localRepository, remoteArtifactRepositories ) ); } } - - public void resolvePluginVersion( Plugin plugin, MavenProject project ) + + public void resolvePluginVersion( Plugin plugin, MavenProject project ) throws PluginVersionNotFoundException - { + { String version = plugin.getVersion(); - + if ( version != null && !Artifact.RELEASE_VERSION.equals( version ) ) { return; } - + String groupId = plugin.getGroupId(); - - String artifactId = plugin.getArtifactId(); - + + String artifactId = plugin.getArtifactId(); + if ( project.getBuildPlugins() != null ) { for ( Plugin p : project.getBuildPlugins() ) @@ -950,7 +938,7 @@ } } } - + if ( StringUtils.isEmpty( version ) || Artifact.RELEASE_VERSION.equals( version ) ) { // 1. resolve the version to be used @@ -966,7 +954,7 @@ while ( !pluginValid && ( artifactVersion != null ) ) { pluginValid = true; - + artifact = repositorySystem.createProjectArtifact( groupId, artifactId, artifactVersion ); } @@ -1017,31 +1005,31 @@ throw new PluginVersionResolutionException( plugin.getGroupId(), plugin.getArtifactId(), "Plugin requires Maven version " + requiredVersion ); } } - } - + } + public MojoDescriptor getMojoDescriptor( Plugin plugin, String goal, MavenProject project, ArtifactRepository localRepository ) throws PluginLoaderException { if ( plugin.getVersion() == null ) { - throw new IllegalArgumentException("plugin.version: null"); + throw new IllegalArgumentException( "plugin.version: null" ); } - - PluginDescriptor pluginDescriptor = loadPlugin( plugin, project, localRepository ); + + PluginDescriptor pluginDescriptor = loadPlugin( plugin, project, localRepository ); MojoDescriptor mojoDescriptor = pluginDescriptor.getMojo( goal ); - + return mojoDescriptor; } - + // ---------------------------------------------------------------------- // Validate plugin // ---------------------------------------------------------------------- - + // ---------------------------------------------------------------------- // Component Discovery // ---------------------------------------------------------------------- - + private PluginDescriptorBuilder builder = new PluginDescriptorBuilder(); public String getComponentDescriptorLocation() @@ -1053,7 +1041,7 @@ throws PlexusConfigurationException { return builder.build( componentDescriptorConfiguration, source ); - } + } public List<ComponentSetDescriptor> findComponents( Context context, ClassRealm realm ) throws PlexusConfigurationException @@ -1106,7 +1094,7 @@ cd.setRealm( realm ); } } - + componentSetDescriptors.add( componentSetDescriptor ); } catch ( IOException ex ) @@ -1121,49 +1109,37 @@ return componentSetDescriptors; } - + // ---------------------------------------------------------------------- // Component Discovery Listener // ---------------------------------------------------------------------- - + private Set pluginsInProcess = new HashSet(); - private Map pluginIdsByPrefix = new HashMap(); - public void componentDiscovered( ComponentDiscoveryEvent event ) - { + { ComponentSetDescriptor componentSetDescriptor = event.getComponentSetDescriptor(); if ( componentSetDescriptor instanceof PluginDescriptor ) { - PluginDescriptor pluginDescriptor = (PluginDescriptor) componentSetDescriptor; + PluginDescriptor pluginDescriptor = (PluginDescriptor) componentSetDescriptor; String key = constructPluginKey( pluginDescriptor ); - + if ( !pluginsInProcess.contains( key ) ) { pluginsInProcess.add( key ); - pluginDescriptors.put( key, pluginDescriptor ); + pluginDescriptors.put( key, pluginDescriptor ); } } } - public String getId() - { - return "maven-plugin-collector"; - } - public PluginDescriptor getPluginDescriptor( Plugin plugin ) { return pluginDescriptors.get( constructPluginKey( plugin ) ); } - public Collection<PluginDescriptor> getPluginDescriptors() - { - return pluginDescriptors.values(); - } - private String constructPluginKey( Plugin plugin ) { String version = ArtifactUtils.toSnapshotVersion( plugin.getVersion() ); @@ -1175,25 +1151,4 @@ String version = ArtifactUtils.toSnapshotVersion( pluginDescriptor.getVersion() ); return pluginDescriptor.getGroupId() + ":" + pluginDescriptor.getArtifactId() + ":" + version; } - - public boolean isPluginInstalled( Plugin plugin ) - { - String key = constructPluginKey( plugin ); - return pluginDescriptors.containsKey( key ); - } - - public Set<PluginDescriptor> getPluginDescriptorsForPrefix( String prefix ) - { - Set result = new HashSet(); - for ( Iterator it = pluginDescriptors.values().iterator(); it.hasNext(); ) - { - PluginDescriptor pd = (PluginDescriptor) it.next(); - if ( pd.getGoalPrefix().equals( prefix ) ) - { - result.add( pd ); - } - } - - return result; - } }