You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@maven.apache.org by be...@apache.org on 2009/07/13 15:19:45 UTC

svn commit: r793578 - in /maven/components/trunk/maven-model-builder/src/main/java/org/apache/maven/model: building/ management/

Author: bentmann
Date: Mon Jul 13 13:19:45 2009
New Revision: 793578

URL: http://svn.apache.org/viewvc?rev=793578&view=rev
Log:
o Refactored management injection to allow for proper extension loading

Added:
    maven/components/trunk/maven-model-builder/src/main/java/org/apache/maven/model/management/DefaultDependencyManagementInjector.java
      - copied, changed from r793552, maven/components/trunk/maven-model-builder/src/main/java/org/apache/maven/model/management/DefaultManagementInjector.java
    maven/components/trunk/maven-model-builder/src/main/java/org/apache/maven/model/management/DefaultPluginManagementInjector.java
      - copied, changed from r793552, maven/components/trunk/maven-model-builder/src/main/java/org/apache/maven/model/management/DefaultManagementInjector.java
    maven/components/trunk/maven-model-builder/src/main/java/org/apache/maven/model/management/DependencyManagementInjector.java
      - copied, changed from r793552, maven/components/trunk/maven-model-builder/src/main/java/org/apache/maven/model/management/ManagementInjector.java
    maven/components/trunk/maven-model-builder/src/main/java/org/apache/maven/model/management/PluginManagementInjector.java
      - copied, changed from r793552, maven/components/trunk/maven-model-builder/src/main/java/org/apache/maven/model/management/ManagementInjector.java
Removed:
    maven/components/trunk/maven-model-builder/src/main/java/org/apache/maven/model/management/DefaultManagementInjector.java
    maven/components/trunk/maven-model-builder/src/main/java/org/apache/maven/model/management/ManagementInjector.java
Modified:
    maven/components/trunk/maven-model-builder/src/main/java/org/apache/maven/model/building/DefaultModelBuilder.java

Modified: maven/components/trunk/maven-model-builder/src/main/java/org/apache/maven/model/building/DefaultModelBuilder.java
URL: http://svn.apache.org/viewvc/maven/components/trunk/maven-model-builder/src/main/java/org/apache/maven/model/building/DefaultModelBuilder.java?rev=793578&r1=793577&r2=793578&view=diff
==============================================================================
--- maven/components/trunk/maven-model-builder/src/main/java/org/apache/maven/model/building/DefaultModelBuilder.java (original)
+++ maven/components/trunk/maven-model-builder/src/main/java/org/apache/maven/model/building/DefaultModelBuilder.java Mon Jul 13 13:19:45 2009
@@ -35,7 +35,8 @@
 import org.apache.maven.model.interpolation.ModelInterpolator;
 import org.apache.maven.model.io.ModelParseException;
 import org.apache.maven.model.io.ModelReader;
-import org.apache.maven.model.management.ManagementInjector;
+import org.apache.maven.model.management.DependencyManagementInjector;
+import org.apache.maven.model.management.PluginManagementInjector;
 import org.apache.maven.model.normalization.ModelNormalizer;
 import org.apache.maven.model.path.ModelPathTranslator;
 import org.apache.maven.model.plugin.LifecycleBindingsInjector;
@@ -91,7 +92,10 @@
     private ProfileInjector profileInjector;
 
     @Requirement
-    private ManagementInjector managementInjector;
+    private PluginManagementInjector pluginManagementInjector;
+
+    @Requirement
+    private DependencyManagementInjector dependencyManagementInjector;
 
     @Requirement
     private LifecycleBindingsInjector lifecycleBindingsInjector;
@@ -174,12 +178,16 @@
 
         modelPathTranslator.alignToBaseDirectory( resultModel, resultModel.getProjectDirectory(), request );
 
+        pluginManagementInjector.injectBasicManagement( resultModel, request );
+
         if ( request.isProcessPlugins() )
         {
             lifecycleBindingsInjector.injectLifecycleBindings( resultModel );
         }
 
-        managementInjector.injectManagement( resultModel, request );
+        pluginManagementInjector.injectManagement( resultModel, request );
+
+        dependencyManagementInjector.injectManagement( resultModel, request );
 
         modelNormalizer.injectDefaultValues( resultModel, request );
 

Copied: maven/components/trunk/maven-model-builder/src/main/java/org/apache/maven/model/management/DefaultDependencyManagementInjector.java (from r793552, maven/components/trunk/maven-model-builder/src/main/java/org/apache/maven/model/management/DefaultManagementInjector.java)
URL: http://svn.apache.org/viewvc/maven/components/trunk/maven-model-builder/src/main/java/org/apache/maven/model/management/DefaultDependencyManagementInjector.java?p2=maven/components/trunk/maven-model-builder/src/main/java/org/apache/maven/model/management/DefaultDependencyManagementInjector.java&p1=maven/components/trunk/maven-model-builder/src/main/java/org/apache/maven/model/management/DefaultManagementInjector.java&r1=793552&r2=793578&rev=793578&view=diff
==============================================================================
--- maven/components/trunk/maven-model-builder/src/main/java/org/apache/maven/model/management/DefaultManagementInjector.java (original)
+++ maven/components/trunk/maven-model-builder/src/main/java/org/apache/maven/model/management/DefaultDependencyManagementInjector.java Mon Jul 13 13:19:45 2009
@@ -19,35 +19,28 @@
  * under the License.
  */
 
-import java.util.ArrayList;
 import java.util.Collections;
 import java.util.HashMap;
 import java.util.Iterator;
-import java.util.LinkedHashMap;
 import java.util.List;
 import java.util.Map;
 
-import org.apache.maven.model.Build;
 import org.apache.maven.model.Dependency;
 import org.apache.maven.model.DependencyManagement;
 import org.apache.maven.model.Exclusion;
 import org.apache.maven.model.Model;
-import org.apache.maven.model.Plugin;
-import org.apache.maven.model.PluginContainer;
-import org.apache.maven.model.PluginExecution;
-import org.apache.maven.model.PluginManagement;
 import org.apache.maven.model.building.ModelBuildingRequest;
 import org.apache.maven.model.merge.MavenModelMerger;
 import org.codehaus.plexus.component.annotations.Component;
 
 /**
- * Handles injection of plugin/dependency management into the model.
+ * Handles injection of dependency management into the model.
  * 
  * @author Benjamin Bentmann
  */
-@Component( role = ManagementInjector.class )
-public class DefaultManagementInjector
-    implements ManagementInjector
+@Component( role = DependencyManagementInjector.class )
+public class DefaultDependencyManagementInjector
+    implements DependencyManagementInjector
 {
 
     private ManagementModelMerger merger = new ManagementModelMerger();
@@ -55,94 +48,12 @@
     public void injectManagement( Model model, ModelBuildingRequest request )
     {
         merger.mergeManagedDependencies( model );
-        merger.mergeManagedBuildPlugins( model );
     }
 
     private static class ManagementModelMerger
         extends MavenModelMerger
     {
 
-        public void mergeManagedBuildPlugins( Model model )
-        {
-            Build build = model.getBuild();
-            if ( build != null )
-            {
-                PluginManagement pluginManagement = build.getPluginManagement();
-                if ( pluginManagement != null )
-                {
-                    mergePluginContainer_Plugins( build, pluginManagement, false, Collections.emptyMap() );
-                }
-            }
-        }
-
-        @Override
-        protected void mergePluginContainer_Plugins( PluginContainer target, PluginContainer source,
-                                                     boolean sourceDominant, Map<Object, Object> context )
-        {
-            List<Plugin> src = source.getPlugins();
-            if ( !src.isEmpty() )
-            {
-                List<Plugin> tgt = target.getPlugins();
-
-                Map<Object, Plugin> managedPlugins = new LinkedHashMap<Object, Plugin>( src.size() * 2 );
-
-                for ( Iterator<Plugin> it = src.iterator(); it.hasNext(); )
-                {
-                    Plugin element = it.next();
-                    Object key = getPluginKey( element );
-                    managedPlugins.put( key, element );
-                }
-
-                for ( Iterator<Plugin> it = tgt.iterator(); it.hasNext(); )
-                {
-                    Plugin element = it.next();
-                    Object key = getPluginKey( element );
-                    Plugin managedPlugin = managedPlugins.get( key );
-                    if ( managedPlugin != null )
-                    {
-                        mergePlugin( element, managedPlugin, sourceDominant, context );
-                    }
-                }
-            }
-        }
-
-        @Override
-        protected void mergePlugin_Executions( Plugin target, Plugin source, boolean sourceDominant,
-                                               Map<Object, Object> context )
-        {
-            List<PluginExecution> src = source.getExecutions();
-            if ( !src.isEmpty() )
-            {
-                List<PluginExecution> tgt = target.getExecutions();
-
-                Map<Object, PluginExecution> merged =
-                    new LinkedHashMap<Object, PluginExecution>( ( src.size() + tgt.size() ) * 2 );
-
-                for ( Iterator<PluginExecution> it = src.iterator(); it.hasNext(); )
-                {
-                    PluginExecution element = it.next();
-                    Object key = getPluginExecutionKey( element );
-                    PluginExecution clone = new PluginExecution();
-                    mergePluginExecution( clone, element, true, context );
-                    merged.put( key, clone );
-                }
-
-                for ( Iterator<PluginExecution> it = tgt.iterator(); it.hasNext(); )
-                {
-                    PluginExecution element = it.next();
-                    Object key = getPluginExecutionKey( element );
-                    PluginExecution existing = merged.get( key );
-                    if ( existing != null )
-                    {
-                        mergePluginExecution( element, existing, sourceDominant, context );
-                    }
-                    merged.put( key, element );
-                }
-
-                target.setExecutions( new ArrayList<PluginExecution>( merged.values() ) );
-            }
-        }
-
         public void mergeManagedDependencies( Model model )
         {
             DependencyManagement dependencyManagement = model.getDependencyManagement();

Copied: maven/components/trunk/maven-model-builder/src/main/java/org/apache/maven/model/management/DefaultPluginManagementInjector.java (from r793552, maven/components/trunk/maven-model-builder/src/main/java/org/apache/maven/model/management/DefaultManagementInjector.java)
URL: http://svn.apache.org/viewvc/maven/components/trunk/maven-model-builder/src/main/java/org/apache/maven/model/management/DefaultPluginManagementInjector.java?p2=maven/components/trunk/maven-model-builder/src/main/java/org/apache/maven/model/management/DefaultPluginManagementInjector.java&p1=maven/components/trunk/maven-model-builder/src/main/java/org/apache/maven/model/management/DefaultManagementInjector.java&r1=793552&r2=793578&rev=793578&view=diff
==============================================================================
--- maven/components/trunk/maven-model-builder/src/main/java/org/apache/maven/model/management/DefaultManagementInjector.java (original)
+++ maven/components/trunk/maven-model-builder/src/main/java/org/apache/maven/model/management/DefaultPluginManagementInjector.java Mon Jul 13 13:19:45 2009
@@ -21,16 +21,12 @@
 
 import java.util.ArrayList;
 import java.util.Collections;
-import java.util.HashMap;
 import java.util.Iterator;
 import java.util.LinkedHashMap;
 import java.util.List;
 import java.util.Map;
 
 import org.apache.maven.model.Build;
-import org.apache.maven.model.Dependency;
-import org.apache.maven.model.DependencyManagement;
-import org.apache.maven.model.Exclusion;
 import org.apache.maven.model.Model;
 import org.apache.maven.model.Plugin;
 import org.apache.maven.model.PluginContainer;
@@ -41,28 +37,32 @@
 import org.codehaus.plexus.component.annotations.Component;
 
 /**
- * Handles injection of plugin/dependency management into the model.
+ * Handles injection of plugin management into the model.
  * 
  * @author Benjamin Bentmann
  */
-@Component( role = ManagementInjector.class )
-public class DefaultManagementInjector
-    implements ManagementInjector
+@Component( role = PluginManagementInjector.class )
+public class DefaultPluginManagementInjector
+    implements PluginManagementInjector
 {
 
     private ManagementModelMerger merger = new ManagementModelMerger();
 
     public void injectManagement( Model model, ModelBuildingRequest request )
     {
-        merger.mergeManagedDependencies( model );
-        merger.mergeManagedBuildPlugins( model );
+        merger.mergeManagedBuildPlugins( model, false );
+    }
+
+    public void injectBasicManagement( Model model, ModelBuildingRequest request )
+    {
+        merger.mergeManagedBuildPlugins( model, true );
     }
 
     private static class ManagementModelMerger
         extends MavenModelMerger
     {
 
-        public void mergeManagedBuildPlugins( Model model )
+        public void mergeManagedBuildPlugins( Model model, boolean basic )
         {
             Build build = model.getBuild();
             if ( build != null )
@@ -70,14 +70,12 @@
                 PluginManagement pluginManagement = build.getPluginManagement();
                 if ( pluginManagement != null )
                 {
-                    mergePluginContainer_Plugins( build, pluginManagement, false, Collections.emptyMap() );
+                    mergePluginContainer_Plugins( build, pluginManagement, basic );
                 }
             }
         }
 
-        @Override
-        protected void mergePluginContainer_Plugins( PluginContainer target, PluginContainer source,
-                                                     boolean sourceDominant, Map<Object, Object> context )
+        private void mergePluginContainer_Plugins( PluginContainer target, PluginContainer source, boolean basic )
         {
             List<Plugin> src = source.getPlugins();
             if ( !src.isEmpty() )
@@ -86,6 +84,8 @@
 
                 Map<Object, Plugin> managedPlugins = new LinkedHashMap<Object, Plugin>( src.size() * 2 );
 
+                Map<Object, Object> context = Collections.emptyMap();
+
                 for ( Iterator<Plugin> it = src.iterator(); it.hasNext(); )
                 {
                     Plugin element = it.next();
@@ -100,7 +100,15 @@
                     Plugin managedPlugin = managedPlugins.get( key );
                     if ( managedPlugin != null )
                     {
-                        mergePlugin( element, managedPlugin, sourceDominant, context );
+                        if ( basic )
+                        {
+                            mergePlugin_Version( element, managedPlugin, false, context );
+                            mergePlugin_Extensions( element, managedPlugin, false, context );
+                        }
+                        else
+                        {
+                            mergePlugin( element, managedPlugin, false, context );
+                        }
                     }
                 }
             }
@@ -143,51 +151,6 @@
             }
         }
 
-        public void mergeManagedDependencies( Model model )
-        {
-            DependencyManagement dependencyManagement = model.getDependencyManagement();
-            if ( dependencyManagement != null )
-            {
-                Map<Object, Dependency> dependencies = new HashMap<Object, Dependency>();
-                Map<Object, Object> context = Collections.emptyMap();
-
-                for ( Dependency dependency : model.getDependencies() )
-                {
-                    Object key = getDependencyKey( dependency );
-                    dependencies.put( key, dependency );
-                }
-
-                for ( Dependency managedDependency : dependencyManagement.getDependencies() )
-                {
-                    Object key = getDependencyKey( managedDependency );
-                    Dependency dependency = dependencies.get( key );
-                    if ( dependency != null )
-                    {
-                        mergeDependency( dependency, managedDependency, false, context );
-                    }
-                }
-            }
-        }
-
-        @Override
-        protected void mergeDependency_Exclusions( Dependency target, Dependency source, boolean sourceDominant,
-                                                   Map<Object, Object> context )
-        {
-            List<Exclusion> tgt = target.getExclusions();
-            if ( tgt.isEmpty() )
-            {
-                List<Exclusion> src = source.getExclusions();
-
-                for ( Iterator<Exclusion> it = src.iterator(); it.hasNext(); )
-                {
-                    Exclusion element = it.next();
-                    Exclusion clone = new Exclusion();
-                    mergeExclusion( clone, element, true, context );
-                    target.addExclusion( clone );
-                }
-            }
-        }
-
     }
 
 }

Copied: maven/components/trunk/maven-model-builder/src/main/java/org/apache/maven/model/management/DependencyManagementInjector.java (from r793552, maven/components/trunk/maven-model-builder/src/main/java/org/apache/maven/model/management/ManagementInjector.java)
URL: http://svn.apache.org/viewvc/maven/components/trunk/maven-model-builder/src/main/java/org/apache/maven/model/management/DependencyManagementInjector.java?p2=maven/components/trunk/maven-model-builder/src/main/java/org/apache/maven/model/management/DependencyManagementInjector.java&p1=maven/components/trunk/maven-model-builder/src/main/java/org/apache/maven/model/management/ManagementInjector.java&r1=793552&r2=793578&rev=793578&view=diff
==============================================================================
--- maven/components/trunk/maven-model-builder/src/main/java/org/apache/maven/model/management/ManagementInjector.java (original)
+++ maven/components/trunk/maven-model-builder/src/main/java/org/apache/maven/model/management/DependencyManagementInjector.java Mon Jul 13 13:19:45 2009
@@ -23,18 +23,18 @@
 import org.apache.maven.model.building.ModelBuildingRequest;
 
 /**
- * Handles injection of plugin/dependency management into the model.
+ * Handles injection of dependency management into the model.
  * 
  * @author Benjamin Bentmann
  */
-public interface ManagementInjector
+public interface DependencyManagementInjector
 {
 
     /**
-     * Merges default values from the plugin and/or dependency management sections of the given model into itself.
+     * Merges default values from the dependency management section of the given model into itself.
      * 
-     * @param child The model into which to merge the values specified by its management sections, must not be
-     *            <code>null</code>.
+     * @param child The model into which to merge the values specified by its dependency management sections, must not
+     *            be <code>null</code>.
      * @param request The model building request that holds further settings, must not be {@code null}.
      */
     void injectManagement( Model child, ModelBuildingRequest request );

Copied: maven/components/trunk/maven-model-builder/src/main/java/org/apache/maven/model/management/PluginManagementInjector.java (from r793552, maven/components/trunk/maven-model-builder/src/main/java/org/apache/maven/model/management/ManagementInjector.java)
URL: http://svn.apache.org/viewvc/maven/components/trunk/maven-model-builder/src/main/java/org/apache/maven/model/management/PluginManagementInjector.java?p2=maven/components/trunk/maven-model-builder/src/main/java/org/apache/maven/model/management/PluginManagementInjector.java&p1=maven/components/trunk/maven-model-builder/src/main/java/org/apache/maven/model/management/ManagementInjector.java&r1=793552&r2=793578&rev=793578&view=diff
==============================================================================
--- maven/components/trunk/maven-model-builder/src/main/java/org/apache/maven/model/management/ManagementInjector.java (original)
+++ maven/components/trunk/maven-model-builder/src/main/java/org/apache/maven/model/management/PluginManagementInjector.java Mon Jul 13 13:19:45 2009
@@ -23,20 +23,31 @@
 import org.apache.maven.model.building.ModelBuildingRequest;
 
 /**
- * Handles injection of plugin/dependency management into the model.
+ * Handles injection of plugin management into the model.
  * 
  * @author Benjamin Bentmann
  */
-public interface ManagementInjector
+public interface PluginManagementInjector
 {
 
     /**
-     * Merges default values from the plugin and/or dependency management sections of the given model into itself.
+     * Merges default values from the plugin management section of the given model into itself.
      * 
-     * @param child The model into which to merge the values specified by its management sections, must not be
+     * @param child The model into which to merge the values specified by its plugin management section, must not be
      *            <code>null</code>.
      * @param request The model building request that holds further settings, must not be {@code null}.
      */
     void injectManagement( Model child, ModelBuildingRequest request );
 
+    /**
+     * Merges important default values from the plugin management section of the given model into itself. In detail,
+     * only the plugin version and the extensions flag are merged. These fields are critical in order to be able to load
+     * extensions from plugins.
+     * 
+     * @param child The model into which to merge the values specified by its plugin management section, must not be
+     *            <code>null</code>.
+     * @param request The model building request that holds further settings, must not be {@code null}.
+     */
+    void injectBasicManagement( Model child, ModelBuildingRequest request );
+
 }