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/07/14 01:24:10 UTC

svn commit: r793745 - in /maven/maven-2/branches/maven-2.2.x: maven-artifact-manager/src/main/java/org/apache/maven/artifact/manager/ maven-core/src/main/java/org/apache/maven/execution/ maven-core/src/main/java/org/apache/maven/extension/ maven-core/s...

Author: jdcasey
Date: Mon Jul 13 23:24:10 2009
New Revision: 793745

URL: http://svn.apache.org/viewvc?rev=793745&view=rev
Log:
[MNG-3506] Allow projects to specify a build extension that provides an artifact handler which will then be used for the project's own artifact.

Modified:
    maven/maven-2/branches/maven-2.2.x/maven-artifact-manager/src/main/java/org/apache/maven/artifact/manager/DefaultWagonProviderMapping.java
    maven/maven-2/branches/maven-2.2.x/maven-artifact-manager/src/main/java/org/apache/maven/artifact/manager/WagonProviderMapping.java
    maven/maven-2/branches/maven-2.2.x/maven-core/src/main/java/org/apache/maven/execution/MavenSession.java
    maven/maven-2/branches/maven-2.2.x/maven-core/src/main/java/org/apache/maven/execution/ReactorManager.java
    maven/maven-2/branches/maven-2.2.x/maven-core/src/main/java/org/apache/maven/extension/DefaultExtensionManager.java
    maven/maven-2/branches/maven-2.2.x/maven-core/src/main/java/org/apache/maven/extension/ExtensionManager.java
    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/test/java/org/apache/maven/WagonSelectorTest.java
    maven/maven-2/branches/maven-2.2.x/maven-core/src/test/resources/org/apache/maven/WagonSelectorTest.xml
    maven/maven-2/branches/maven-2.2.x/maven-project/src/main/java/org/apache/maven/project/ProjectSorter.java

Modified: maven/maven-2/branches/maven-2.2.x/maven-artifact-manager/src/main/java/org/apache/maven/artifact/manager/DefaultWagonProviderMapping.java
URL: http://svn.apache.org/viewvc/maven/maven-2/branches/maven-2.2.x/maven-artifact-manager/src/main/java/org/apache/maven/artifact/manager/DefaultWagonProviderMapping.java?rev=793745&r1=793744&r2=793745&view=diff
==============================================================================
--- maven/maven-2/branches/maven-2.2.x/maven-artifact-manager/src/main/java/org/apache/maven/artifact/manager/DefaultWagonProviderMapping.java (original)
+++ maven/maven-2/branches/maven-2.2.x/maven-artifact-manager/src/main/java/org/apache/maven/artifact/manager/DefaultWagonProviderMapping.java Mon Jul 13 23:24:10 2009
@@ -1,5 +1,24 @@
 package org.apache.maven.artifact.manager;
 
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *  http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
 import java.util.HashMap;
 import java.util.Map;
 

Modified: maven/maven-2/branches/maven-2.2.x/maven-artifact-manager/src/main/java/org/apache/maven/artifact/manager/WagonProviderMapping.java
URL: http://svn.apache.org/viewvc/maven/maven-2/branches/maven-2.2.x/maven-artifact-manager/src/main/java/org/apache/maven/artifact/manager/WagonProviderMapping.java?rev=793745&r1=793744&r2=793745&view=diff
==============================================================================
--- maven/maven-2/branches/maven-2.2.x/maven-artifact-manager/src/main/java/org/apache/maven/artifact/manager/WagonProviderMapping.java (original)
+++ maven/maven-2/branches/maven-2.2.x/maven-artifact-manager/src/main/java/org/apache/maven/artifact/manager/WagonProviderMapping.java Mon Jul 13 23:24:10 2009
@@ -1,5 +1,24 @@
 package org.apache.maven.artifact.manager;
 
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *  http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
 public interface WagonProviderMapping
 {
     

Modified: maven/maven-2/branches/maven-2.2.x/maven-core/src/main/java/org/apache/maven/execution/MavenSession.java
URL: http://svn.apache.org/viewvc/maven/maven-2/branches/maven-2.2.x/maven-core/src/main/java/org/apache/maven/execution/MavenSession.java?rev=793745&r1=793744&r2=793745&view=diff
==============================================================================
--- maven/maven-2/branches/maven-2.2.x/maven-core/src/main/java/org/apache/maven/execution/MavenSession.java (original)
+++ maven/maven-2/branches/maven-2.2.x/maven-core/src/main/java/org/apache/maven/execution/MavenSession.java Mon Jul 13 23:24:10 2009
@@ -160,7 +160,7 @@
         return settings;
     }
 
-    public List getSortedProjects()
+    public List<MavenProject> getSortedProjects()
     {
         return reactorManager.getSortedProjects();
     }

Modified: maven/maven-2/branches/maven-2.2.x/maven-core/src/main/java/org/apache/maven/execution/ReactorManager.java
URL: http://svn.apache.org/viewvc/maven/maven-2/branches/maven-2.2.x/maven-core/src/main/java/org/apache/maven/execution/ReactorManager.java?rev=793745&r1=793744&r2=793745&view=diff
==============================================================================
--- maven/maven-2/branches/maven-2.2.x/maven-core/src/main/java/org/apache/maven/execution/ReactorManager.java (original)
+++ maven/maven-2/branches/maven-2.2.x/maven-core/src/main/java/org/apache/maven/execution/ReactorManager.java Mon Jul 13 23:24:10 2009
@@ -203,7 +203,7 @@
         return sorter.hasMultipleProjects();
     }
 
-    public List getSortedProjects()
+    public List<MavenProject> getSortedProjects()
     {
         return sorter.getSortedProjects();
     }

Modified: maven/maven-2/branches/maven-2.2.x/maven-core/src/main/java/org/apache/maven/extension/DefaultExtensionManager.java
URL: http://svn.apache.org/viewvc/maven/maven-2/branches/maven-2.2.x/maven-core/src/main/java/org/apache/maven/extension/DefaultExtensionManager.java?rev=793745&r1=793744&r2=793745&view=diff
==============================================================================
--- maven/maven-2/branches/maven-2.2.x/maven-core/src/main/java/org/apache/maven/extension/DefaultExtensionManager.java (original)
+++ maven/maven-2/branches/maven-2.2.x/maven-core/src/main/java/org/apache/maven/extension/DefaultExtensionManager.java Mon Jul 13 23:24:10 2009
@@ -23,6 +23,7 @@
 import org.apache.maven.artifact.Artifact;
 import org.apache.maven.artifact.ArtifactUtils;
 import org.apache.maven.artifact.factory.ArtifactFactory;
+import org.apache.maven.artifact.handler.ArtifactHandler;
 import org.apache.maven.artifact.manager.WagonManager;
 import org.apache.maven.artifact.metadata.ArtifactMetadataRetrievalException;
 import org.apache.maven.artifact.metadata.ArtifactMetadataSource;
@@ -45,6 +46,7 @@
 import org.codehaus.plexus.PlexusConstants;
 import org.codehaus.plexus.PlexusContainer;
 import org.codehaus.plexus.PlexusContainerException;
+import org.codehaus.plexus.component.repository.ComponentDescriptor;
 import org.codehaus.plexus.component.repository.exception.ComponentLookupException;
 import org.codehaus.plexus.context.Context;
 import org.codehaus.plexus.context.ContextException;
@@ -57,6 +59,7 @@
 import java.io.InputStream;
 import java.io.InputStreamReader;
 import java.util.Collections;
+import java.util.HashMap;
 import java.util.Iterator;
 import java.util.LinkedHashSet;
 import java.util.Map;
@@ -261,11 +264,12 @@
         return child;
     }
 
+    @SuppressWarnings( "unchecked" )
     public void registerWagons()
     {
         if ( extensionContainer != null )
         {
-            Map wagons = extensionContainer.getComponentDescriptorMap( Wagon.ROLE );
+            Map<String, ComponentDescriptor> wagons = extensionContainer.getComponentDescriptorMap( Wagon.ROLE );
             if ( wagons != null && !wagons.isEmpty() )
             {
                 getLogger().debug( "Wagons to register: " + wagons.keySet() );
@@ -277,6 +281,37 @@
             getLogger().debug( "Wagons could not be registered as the extension container was never created" );
         }
     }
+    
+    @SuppressWarnings( "unchecked" )
+    public Map<String, ArtifactHandler> getArtifactTypeHandlers()
+    {
+        Map<String, ArtifactHandler> result = new HashMap<String, ArtifactHandler>();
+        
+        if ( extensionContainer != null )
+        {
+            try
+            {
+                result.putAll( extensionContainer.lookupMap( ArtifactHandler.ROLE ) );
+            }
+            catch ( ComponentLookupException e )
+            {
+                getLogger().debug( "ArtifactHandler extensions could not be loaded: " + e.getMessage(), e );
+            }
+        }
+        else
+        {
+            try
+            {
+                result.putAll( container.lookupMap( ArtifactHandler.ROLE ) );
+            }
+            catch ( ComponentLookupException e )
+            {
+                getLogger().debug( "ArtifactHandler extensions could not be loaded: " + e.getMessage(), e );
+            }
+        }
+        
+        return result;
+    }
 
     public void contextualize( Context context )
         throws ContextException

Modified: maven/maven-2/branches/maven-2.2.x/maven-core/src/main/java/org/apache/maven/extension/ExtensionManager.java
URL: http://svn.apache.org/viewvc/maven/maven-2/branches/maven-2.2.x/maven-core/src/main/java/org/apache/maven/extension/ExtensionManager.java?rev=793745&r1=793744&r2=793745&view=diff
==============================================================================
--- maven/maven-2/branches/maven-2.2.x/maven-core/src/main/java/org/apache/maven/extension/ExtensionManager.java (original)
+++ maven/maven-2/branches/maven-2.2.x/maven-core/src/main/java/org/apache/maven/extension/ExtensionManager.java Mon Jul 13 23:24:10 2009
@@ -19,6 +19,7 @@
  * under the License.
  */
 
+import org.apache.maven.artifact.handler.ArtifactHandler;
 import org.apache.maven.artifact.repository.ArtifactRepository;
 import org.apache.maven.artifact.resolver.ArtifactNotFoundException;
 import org.apache.maven.artifact.resolver.ArtifactResolutionException;
@@ -26,6 +27,8 @@
 import org.apache.maven.project.MavenProject;
 import org.codehaus.plexus.PlexusContainerException;
 
+import java.util.Map;
+
 /**
  * Used to locate extensions.
  *
@@ -38,4 +41,6 @@
         throws ArtifactResolutionException, PlexusContainerException, ArtifactNotFoundException;
 
     void registerWagons();
+
+    Map<String, ArtifactHandler> getArtifactTypeHandlers();
 }

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=793745&r1=793744&r2=793745&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 Mon Jul 13 23:24:10 2009
@@ -185,10 +185,9 @@
         throws LifecycleExecutionException
     {
         // TODO: MNG-4081. What about extensions within the current reactor??
-        for ( Iterator i = session.getSortedProjects().iterator(); i.hasNext(); )
+        Map<String, ArtifactHandler> handlers = new HashMap<String, ArtifactHandler>();
+        for ( MavenProject project : session.getSortedProjects() )
         {
-            MavenProject project = (MavenProject) i.next();
-
             for ( Iterator j = project.getBuildExtensions().iterator(); j.hasNext(); )
             {
                 Extension extension = (Extension) j.next();
@@ -211,19 +210,37 @@
                 }
             }
 
-            extensionManager.registerWagons();
+        }
+        
+        extensionManager.registerWagons();
+        
+        handlers.putAll( extensionManager.getArtifactTypeHandlers() );
 
+        for ( MavenProject project : session.getSortedProjects() )
+        {
             try
             {
-                Map handlers = findArtifactTypeHandlers( project, session.getSettings(), session.getLocalRepository() );
+                handlers.putAll( findArtifactTypeHandlersInPlugins( project, session.getSettings(), session.getLocalRepository() ) );
 
-                artifactHandlerManager.addHandlers( handlers );
+                // shudder...
+                for ( ArtifactHandler handler : handlers.values() )
+                {
+                    if ( project.getPackaging().equals( handler.getPackaging() ) )
+                    {
+                        project.getArtifact().setArtifactHandler( handler );
+                        
+                        // NOTE: Adding this (maven 2.2.1) to short-circuit things. This means first match is used, NOT LAST.
+                        break;
+                    }
+                }
             }
             catch ( PluginNotFoundException e )
             {
                 throw new LifecycleExecutionException( e.getMessage(), e );
             }
         }
+        
+        artifactHandlerManager.addHandlers( handlers );
     }
 
     private void executeTaskSegments( List taskSegments, ReactorManager rm, MavenSession session,
@@ -1443,10 +1460,11 @@
      * @todo Not particularly happy about this. Would like WagonManager and ArtifactTypeHandlerManager to be able to
      * lookup directly, or have them passed in
      */
-    private Map findArtifactTypeHandlers( MavenProject project, Settings settings, ArtifactRepository localRepository )
+    private Map<String, ArtifactHandler> findArtifactTypeHandlersInPlugins( MavenProject project, Settings settings,
+                                                                            ArtifactRepository localRepository )
         throws LifecycleExecutionException, PluginNotFoundException
     {
-        Map map = new HashMap();
+        Map<String, ArtifactHandler> map = new HashMap<String, ArtifactHandler>();
         for ( Iterator i = project.getBuildPlugins().iterator(); i.hasNext(); )
         {
             Plugin plugin = (Plugin) i.next();
@@ -1470,16 +1488,6 @@
                     throw new LifecycleExecutionException( "Error looking up available components from plugin '" +
                         plugin.getKey() + "': " + e.getMessage(), e );
                 }
-
-                // shudder...
-                for ( Iterator j = map.values().iterator(); j.hasNext(); )
-                {
-                    ArtifactHandler handler = (ArtifactHandler) j.next();
-                    if ( project.getPackaging().equals( handler.getPackaging() ) )
-                    {
-                        project.getArtifact().setArtifactHandler( handler );
-                    }
-                }
             }
         }
         return map;

Modified: maven/maven-2/branches/maven-2.2.x/maven-core/src/test/java/org/apache/maven/WagonSelectorTest.java
URL: http://svn.apache.org/viewvc/maven/maven-2/branches/maven-2.2.x/maven-core/src/test/java/org/apache/maven/WagonSelectorTest.java?rev=793745&r1=793744&r2=793745&view=diff
==============================================================================
--- maven/maven-2/branches/maven-2.2.x/maven-core/src/test/java/org/apache/maven/WagonSelectorTest.java (original)
+++ maven/maven-2/branches/maven-2.2.x/maven-core/src/test/java/org/apache/maven/WagonSelectorTest.java Mon Jul 13 23:24:10 2009
@@ -1,5 +1,24 @@
 package org.apache.maven;
 
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *  http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
 import org.apache.maven.artifact.manager.WagonConfigurationException;
 import org.apache.maven.artifact.manager.WagonManager;
 import org.apache.maven.artifact.repository.ArtifactRepository;

Modified: maven/maven-2/branches/maven-2.2.x/maven-core/src/test/resources/org/apache/maven/WagonSelectorTest.xml
URL: http://svn.apache.org/viewvc/maven/maven-2/branches/maven-2.2.x/maven-core/src/test/resources/org/apache/maven/WagonSelectorTest.xml?rev=793745&r1=793744&r2=793745&view=diff
==============================================================================
--- maven/maven-2/branches/maven-2.2.x/maven-core/src/test/resources/org/apache/maven/WagonSelectorTest.xml (original)
+++ maven/maven-2/branches/maven-2.2.x/maven-core/src/test/resources/org/apache/maven/WagonSelectorTest.xml Mon Jul 13 23:24:10 2009
@@ -1,3 +1,22 @@
+<!--
+Licensed to the Apache Software Foundation (ASF) under one
+or more contributor license agreements.  See the NOTICE file
+distributed with this work for additional information
+regarding copyright ownership.  The ASF licenses this file
+to you under the Apache License, Version 2.0 (the
+"License"); you may not use this file except in compliance
+with the License.  You may obtain a copy of the License at
+
+    http://www.apache.org/licenses/LICENSE-2.0
+
+Unless required by applicable law or agreed to in writing,
+software distributed under the License is distributed on an
+"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+KIND, either express or implied.  See the License for the
+specific language governing permissions and limitations
+under the License.
+-->
+
 <component-set>
   <components>
     <component>

Modified: maven/maven-2/branches/maven-2.2.x/maven-project/src/main/java/org/apache/maven/project/ProjectSorter.java
URL: http://svn.apache.org/viewvc/maven/maven-2/branches/maven-2.2.x/maven-project/src/main/java/org/apache/maven/project/ProjectSorter.java?rev=793745&r1=793744&r2=793745&view=diff
==============================================================================
--- maven/maven-2/branches/maven-2.2.x/maven-project/src/main/java/org/apache/maven/project/ProjectSorter.java (original)
+++ maven/maven-2/branches/maven-2.2.x/maven-project/src/main/java/org/apache/maven/project/ProjectSorter.java Mon Jul 13 23:24:10 2009
@@ -52,7 +52,7 @@
     
     private final Map projectMap;
 
-    private final List sortedProjects;
+    private final List<MavenProject> sortedProjects;
 
     private MavenProject topLevelProject;
 
@@ -369,7 +369,7 @@
         return topLevelProject;
     }
 
-    public List getSortedProjects()
+    public List<MavenProject> getSortedProjects()
     {
         return sortedProjects;
     }