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