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 2008/03/17 20:16:16 UTC

svn commit: r638034 - in /maven/components/branches/maven-2.0.x/maven-core/src/main/java/org/apache/maven/plugin: DefaultPluginManager.java MavenPluginCollector.java identifier/PluginCoordinate.java identifier/PluginIdentifier.java

Author: jdcasey
Date: Mon Mar 17 12:16:14 2008
New Revision: 638034

URL: http://svn.apache.org/viewvc?rev=638034&view=rev
Log:
[MNG-3284] Re-committing this, as I have 100% IT success here...let's see what the CI server says.

Added:
    maven/components/branches/maven-2.0.x/maven-core/src/main/java/org/apache/maven/plugin/identifier/PluginCoordinate.java
      - copied unchanged from r636941, maven/components/branches/maven-2.0.x/maven-core/src/main/java/org/apache/maven/plugin/identifier/PluginCoordinate.java
    maven/components/branches/maven-2.0.x/maven-core/src/main/java/org/apache/maven/plugin/identifier/PluginIdentifier.java
      - copied unchanged from r636941, maven/components/branches/maven-2.0.x/maven-core/src/main/java/org/apache/maven/plugin/identifier/PluginIdentifier.java
Modified:
    maven/components/branches/maven-2.0.x/maven-core/src/main/java/org/apache/maven/plugin/DefaultPluginManager.java
    maven/components/branches/maven-2.0.x/maven-core/src/main/java/org/apache/maven/plugin/MavenPluginCollector.java

Modified: maven/components/branches/maven-2.0.x/maven-core/src/main/java/org/apache/maven/plugin/DefaultPluginManager.java
URL: http://svn.apache.org/viewvc/maven/components/branches/maven-2.0.x/maven-core/src/main/java/org/apache/maven/plugin/DefaultPluginManager.java?rev=638034&r1=638033&r2=638034&view=diff
==============================================================================
--- maven/components/branches/maven-2.0.x/maven-core/src/main/java/org/apache/maven/plugin/DefaultPluginManager.java (original)
+++ maven/components/branches/maven-2.0.x/maven-core/src/main/java/org/apache/maven/plugin/DefaultPluginManager.java Mon Mar 17 12:16:14 2008
@@ -48,6 +48,7 @@
 import org.apache.maven.plugin.descriptor.Parameter;
 import org.apache.maven.plugin.descriptor.PluginDescriptor;
 import org.apache.maven.plugin.descriptor.PluginDescriptorBuilder;
+import org.apache.maven.plugin.identifier.PluginCoordinate;
 import org.apache.maven.plugin.logging.Log;
 import org.apache.maven.plugin.version.PluginVersionManager;
 import org.apache.maven.plugin.version.PluginVersionNotFoundException;
@@ -203,7 +204,9 @@
 
             artifactResolver.resolve( pluginArtifact, project.getPluginArtifactRepositories(), localRepository );
 
-            PlexusContainer pluginContainer = container.getChildContainer( plugin.getKey() );
+            PluginCoordinate pc = new PluginCoordinate( pluginArtifact.getGroupId(), pluginArtifact.getArtifactId(), pluginArtifact.getVersion() );
+            
+            PlexusContainer pluginContainer = container.getChildContainer( pc.toString() );
 
             File pluginFile = pluginArtifact.getFile();
 
@@ -293,7 +296,9 @@
 
         try
         {
-            child = container.createChildContainer( plugin.getKey(),
+            PluginCoordinate pc = new PluginCoordinate(plugin);
+            
+            child = container.createChildContainer( pc.toString(),
                                                     Collections.singletonList( pluginArtifact.getFile() ),
                                                     Collections.EMPTY_MAP,
                                                     Collections.singletonList( pluginCollector ) );
@@ -446,7 +451,7 @@
         try
         {
             Thread.currentThread().setContextClassLoader(
-                mojoDescriptor.getPluginDescriptor().getClassRealm().getClassLoader() );
+            		mojoDescriptor.getPluginDescriptor().getClassRealm().getClassLoader() );
 
             plugin.execute();
 
@@ -580,7 +585,9 @@
     {
         String pluginKey = pluginDescriptor.getPluginLookupKey();
 
-        PlexusContainer pluginContainer = container.getChildContainer( pluginKey );
+        PluginCoordinate pc = new PluginCoordinate(pluginDescriptor.getGroupId(), pluginDescriptor.getArtifactId(), pluginDescriptor.getVersion());
+        
+        PlexusContainer pluginContainer = container.getChildContainer( pc.toString() );
 
         if ( pluginContainer == null )
         {

Modified: maven/components/branches/maven-2.0.x/maven-core/src/main/java/org/apache/maven/plugin/MavenPluginCollector.java
URL: http://svn.apache.org/viewvc/maven/components/branches/maven-2.0.x/maven-core/src/main/java/org/apache/maven/plugin/MavenPluginCollector.java?rev=638034&r1=638033&r2=638034&view=diff
==============================================================================
--- maven/components/branches/maven-2.0.x/maven-core/src/main/java/org/apache/maven/plugin/MavenPluginCollector.java (original)
+++ maven/components/branches/maven-2.0.x/maven-core/src/main/java/org/apache/maven/plugin/MavenPluginCollector.java Mon Mar 17 12:16:14 2008
@@ -21,47 +21,81 @@
 
 import org.apache.maven.model.Plugin;
 import org.apache.maven.plugin.descriptor.PluginDescriptor;
+import org.apache.maven.plugin.identifier.PluginCoordinate;
+import org.apache.maven.plugin.identifier.PluginIdentifier;
 import org.codehaus.plexus.component.discovery.ComponentDiscoveryEvent;
 import org.codehaus.plexus.component.discovery.ComponentDiscoveryListener;
 import org.codehaus.plexus.component.repository.ComponentSetDescriptor;
 import org.codehaus.plexus.logging.AbstractLogEnabled;
 
+import java.util.ArrayList;
 import java.util.HashMap;
 import java.util.HashSet;
 import java.util.Iterator;
+import java.util.List;
 import java.util.Map;
 import java.util.Set;
 
+/**
+ * This class contains references to the plugins that have been loaded,
+ * indexed in a way so that they can be looked up.
+ * 
+ * It listens for new plugins being loaded, and adds them into the index
+ * as this happens.
+ * 
+ */
 public class MavenPluginCollector
     extends AbstractLogEnabled
     implements ComponentDiscoveryListener
 {
+    /**
+     * A 1st-past-the post list of prefixes to descriptors
+     * Map {prefix:String -> PluginDescriptor}
+     */
+    private Map pluginIdsByPrefix = new HashMap();
 
-    private Set pluginsInProcess = new HashSet();
-
+    /**
+     * Map {PluginCoordinate -> PluginDescriptor}}
+     */
     private Map pluginDescriptors = new HashMap();
 
-    private Map pluginIdsByPrefix = new HashMap();
-
+    /**
+     * Keep track of the order that particular plugins have been
+     * seen, in case a move to a non 1st past the post for 
+     * descriptors. 
+     * 
+     * Map {PluginIdentifier -> List {PluginDescriptor}}
+     */
+    private Map pluginDeclarations = new HashMap();
+    
     // ----------------------------------------------------------------------
     // Mojo discovery
     // ----------------------------------------------------------------------
     public void componentDiscovered( ComponentDiscoveryEvent event )
-    {
+    {      
         ComponentSetDescriptor componentSetDescriptor = event.getComponentSetDescriptor();
-
+        
         if ( componentSetDescriptor instanceof PluginDescriptor )
         {
             PluginDescriptor pluginDescriptor = (PluginDescriptor) componentSetDescriptor;
             
             // TODO: see comment in getPluginDescriptor
-            String key = Plugin.constructKey( pluginDescriptor.getGroupId(), pluginDescriptor.getArtifactId() );
+                        
+            PluginCoordinate coordinate = new PluginCoordinate( pluginDescriptor.getGroupId(), pluginDescriptor.getArtifactId(), pluginDescriptor.getVersion() );
+            PluginIdentifier identifier = coordinate.getIdentifier();
             
-            if ( !pluginsInProcess.contains( key ) )
+        	// Don't overwrite any existing found descriptor, as things
+        	// like the ClassRealm that has been constructed will disappear,
+        	// causing reactor builds to fail.
+        	if( !pluginDescriptors.containsKey(coordinate))
+        	{
+        		pluginDescriptors.put( coordinate, pluginDescriptor );
+        	} 
+           
+            // Store that we've seen the plugin by prefix, for the 1st past the post
+            if( !pluginDeclarations.containsKey(identifier) )
             {
-                pluginsInProcess.add( key );
-
-                pluginDescriptors.put( key, pluginDescriptor );
+            	pluginDeclarations.put(identifier, new ArrayList());
 
                 // TODO: throw an (not runtime) exception if there is a prefix overlap - means doing so elsewhere
                 // we also need to deal with multiple versions somehow - currently, first wins
@@ -70,6 +104,7 @@
                     pluginIdsByPrefix.put( pluginDescriptor.getGoalPrefix(), pluginDescriptor );
                 }
             }
+            ((List)pluginDeclarations.get(identifier)).add(pluginDescriptor);
         }
     }
 
@@ -78,15 +113,34 @@
         // TODO: include version, but can't do this in the plugin manager as it is not resolved to the right version
         // at that point. Instead, move the duplication check to the artifact container, or store it locally based on
         // the unresolved version?
-        return (PluginDescriptor) pluginDescriptors.get( plugin.getKey() );
+      
+    	// Has the plugin got a version specified (think that it ought to)
+    	PluginCoordinate coordinate = new PluginCoordinate(plugin);
+    	PluginIdentifier pluginIdentifier = coordinate.getIdentifier();
+    	
+    	if( plugin.getVersion() != null )
+        {
+    		PluginDescriptor pluginDescriptor = (PluginDescriptor)pluginDescriptors.get(coordinate);
+    		if( pluginDescriptor != null )
+    		{
+    			return pluginDescriptor;
+    		}
+        }
+    	
+    	getLogger().error("No version for " + pluginIdentifier);
+    	
+    	return null;
     }
 
     public boolean isPluginInstalled( Plugin plugin )
-    {
+    {      
         // TODO: see comment in getPluginDescriptor
-        return pluginDescriptors.containsKey( plugin.getKey() );
+    
+        PluginCoordinate coordinate = new PluginCoordinate(plugin);
+        
+        return pluginDescriptors.containsKey(coordinate);
     }
-
+    
     public PluginDescriptor getPluginDescriptorForPrefix( String prefix )
     {
         return (PluginDescriptor) pluginIdsByPrefix.get( prefix );
@@ -94,8 +148,11 @@
 
     public void flushPluginDescriptor( Plugin plugin )
     {
-        pluginsInProcess.remove( plugin.getKey() );
-        pluginDescriptors.remove( plugin.getKey() );
+        PluginCoordinate coordinate = new PluginCoordinate(plugin);
+        PluginIdentifier identifier = coordinate.getIdentifier();
+                  
+        pluginDeclarations.remove( identifier );
+        pluginDescriptors.remove ( coordinate );
         
         for ( Iterator it = pluginIdsByPrefix.entrySet().iterator(); it.hasNext(); )
         {