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/08/31 23:31:02 UTC
svn commit: r809751 - in /maven/components/trunk:
maven-core/src/main/java/org/apache/maven/model/plugin/
maven-core/src/test/java/org/apache/maven/project/
maven-core/src/test/resources-project-builder/plugin-exec-order-and-default-exec/
maven-model-b...
Author: bentmann
Date: Mon Aug 31 21:31:01 2009
New Revision: 809751
URL: http://svn.apache.org/viewvc?rev=809751&view=rev
Log:
[MNG-4332] [regression] Default plugin executions contributed by packaging execute after executions from plugin management
Added:
maven/components/trunk/maven-core/src/test/resources-project-builder/plugin-exec-order-and-default-exec/ (with props)
maven/components/trunk/maven-core/src/test/resources-project-builder/plugin-exec-order-and-default-exec/pom.xml (with props)
Modified:
maven/components/trunk/maven-core/src/main/java/org/apache/maven/model/plugin/DefaultLifecycleBindingsInjector.java
maven/components/trunk/maven-core/src/test/java/org/apache/maven/project/EmptyLifecycleExecutor.java
maven/components/trunk/maven-core/src/test/java/org/apache/maven/project/PomConstructionTest.java
maven/components/trunk/maven-model-builder/src/main/java/org/apache/maven/model/building/DefaultModelBuilder.java
maven/components/trunk/maven-model-builder/src/main/java/org/apache/maven/model/management/DefaultPluginManagementInjector.java
maven/components/trunk/maven-model-builder/src/main/java/org/apache/maven/model/management/DependencyManagementInjector.java
maven/components/trunk/maven-model-builder/src/main/java/org/apache/maven/model/management/PluginManagementInjector.java
maven/components/trunk/maven-model-builder/src/main/java/org/apache/maven/model/plugin/LifecycleBindingsInjector.java
Modified: maven/components/trunk/maven-core/src/main/java/org/apache/maven/model/plugin/DefaultLifecycleBindingsInjector.java
URL: http://svn.apache.org/viewvc/maven/components/trunk/maven-core/src/main/java/org/apache/maven/model/plugin/DefaultLifecycleBindingsInjector.java?rev=809751&r1=809750&r2=809751&view=diff
==============================================================================
--- maven/components/trunk/maven-core/src/main/java/org/apache/maven/model/plugin/DefaultLifecycleBindingsInjector.java (original)
+++ maven/components/trunk/maven-core/src/main/java/org/apache/maven/model/plugin/DefaultLifecycleBindingsInjector.java Mon Aug 31 21:31:01 2009
@@ -32,6 +32,8 @@
import org.apache.maven.model.Model;
import org.apache.maven.model.Plugin;
import org.apache.maven.model.PluginContainer;
+import org.apache.maven.model.PluginManagement;
+import org.apache.maven.model.building.ModelBuildingRequest;
import org.apache.maven.model.building.ModelProblemCollector;
import org.apache.maven.model.merge.MavenModelMerger;
import org.codehaus.plexus.component.annotations.Component;
@@ -52,7 +54,7 @@
@Requirement
private LifecycleExecutor lifecycle;
- public void injectLifecycleBindings( Model model, ModelProblemCollector problems )
+ public void injectLifecycleBindings( Model model, ModelBuildingRequest request, ModelProblemCollector problems )
{
String packaging = model.getPackaging();
@@ -76,13 +78,19 @@
extends MavenModelMerger
{
+ private static final String PLUGIN_MANAGEMENT = "plugin-management";
+
public void merge( Model target, Model source )
{
if ( target.getBuild() == null )
{
target.setBuild( new Build() );
}
- mergePluginContainer_Plugins( target.getBuild(), source.getBuild(), false, Collections.emptyMap() );
+
+ Map<Object, Object> context =
+ Collections.<Object, Object> singletonMap( PLUGIN_MANAGEMENT, target.getBuild().getPluginManagement() );
+
+ mergePluginContainer_Plugins( target.getBuild(), source.getBuild(), false, context );
}
@Override
@@ -103,6 +111,8 @@
merged.put( key, element );
}
+ Map<Object, Plugin> unmanaged = new LinkedHashMap<Object, Plugin>( merged );
+
for ( Iterator<Plugin> it = tgt.iterator(); it.hasNext(); )
{
Plugin element = it.next();
@@ -111,10 +121,31 @@
if ( existing != null )
{
mergePlugin( element, existing, sourceDominant, context );
+ unmanaged.remove( key );
}
merged.put( key, element );
}
+ if ( !unmanaged.isEmpty() )
+ {
+ PluginManagement pluginMgmt = (PluginManagement) context.get( PLUGIN_MANAGEMENT );
+ if ( pluginMgmt != null )
+ {
+ for ( Iterator<Plugin> it = pluginMgmt.getPlugins().iterator(); it.hasNext(); )
+ {
+ Plugin managedPlugin = it.next();
+ Object key = getPluginKey( managedPlugin );
+ Plugin unmanagedPlugin = unmanaged.get( key );
+ if ( unmanagedPlugin != null )
+ {
+ Plugin plugin = managedPlugin.clone();
+ mergePlugin( plugin, unmanagedPlugin, sourceDominant, Collections.emptyMap() );
+ merged.put( key, plugin );
+ }
+ }
+ }
+ }
+
target.setPlugins( new ArrayList<Plugin>( merged.values() ) );
}
}
Modified: maven/components/trunk/maven-core/src/test/java/org/apache/maven/project/EmptyLifecycleExecutor.java
URL: http://svn.apache.org/viewvc/maven/components/trunk/maven-core/src/test/java/org/apache/maven/project/EmptyLifecycleExecutor.java?rev=809751&r1=809750&r2=809751&view=diff
==============================================================================
--- maven/components/trunk/maven-core/src/test/java/org/apache/maven/project/EmptyLifecycleExecutor.java (original)
+++ maven/components/trunk/maven-core/src/test/java/org/apache/maven/project/EmptyLifecycleExecutor.java Mon Aug 31 21:31:01 2009
@@ -34,6 +34,7 @@
import org.apache.maven.lifecycle.LifecyclePhaseNotFoundException;
import org.apache.maven.lifecycle.MavenExecutionPlan;
import org.apache.maven.model.Plugin;
+import org.apache.maven.model.PluginExecution;
import org.apache.maven.plugin.InvalidPluginDescriptorException;
import org.apache.maven.plugin.MojoExecution;
import org.apache.maven.plugin.MojoExecutionException;
@@ -90,12 +91,12 @@
{
plugins = new LinkedHashSet<Plugin>();
- plugins.add( newPlugin( "maven-compiler-plugin" ) );
- plugins.add( newPlugin( "maven-resources-plugin" ) );
- plugins.add( newPlugin( "maven-surefire-plugin" ) );
- plugins.add( newPlugin( "maven-jar-plugin" ) );
- plugins.add( newPlugin( "maven-install-plugin" ) );
- plugins.add( newPlugin( "maven-deploy-plugin" ) );
+ plugins.add( newPlugin( "maven-compiler-plugin", "compile", "testCompile" ) );
+ plugins.add( newPlugin( "maven-resources-plugin", "resources", "testResources" ) );
+ plugins.add( newPlugin( "maven-surefire-plugin", "test" ) );
+ plugins.add( newPlugin( "maven-jar-plugin", "jar" ) );
+ plugins.add( newPlugin( "maven-install-plugin", "install" ) );
+ plugins.add( newPlugin( "maven-deploy-plugin", "deploy" ) );
}
else
{
@@ -105,13 +106,21 @@
return plugins;
}
- private Plugin newPlugin( String artifactId )
+ private Plugin newPlugin( String artifactId, String... goals )
{
Plugin plugin = new Plugin();
plugin.setGroupId( "org.apache.maven.plugins" );
plugin.setArtifactId( artifactId );
+ for ( String goal : goals )
+ {
+ PluginExecution pluginExecution = new PluginExecution();
+ pluginExecution.setId( "default-" + goal );
+ pluginExecution.addGoal( goal );
+ plugin.addExecution( pluginExecution );
+ }
+
return plugin;
}
Modified: maven/components/trunk/maven-core/src/test/java/org/apache/maven/project/PomConstructionTest.java
URL: http://svn.apache.org/viewvc/maven/components/trunk/maven-core/src/test/java/org/apache/maven/project/PomConstructionTest.java?rev=809751&r1=809750&r2=809751&view=diff
==============================================================================
--- maven/components/trunk/maven-core/src/test/java/org/apache/maven/project/PomConstructionTest.java (original)
+++ maven/components/trunk/maven-core/src/test/java/org/apache/maven/project/PomConstructionTest.java Mon Aug 31 21:31:01 2009
@@ -1661,6 +1661,20 @@
pom.getValue( "build/plugins[@artifactId='maven-it-plugin-log-file']/configuration/logFile" ) );
}
+ public void testDefaultPluginsExecutionContributedByPackagingExecuteBeforeUserDefinedExecutions()
+ throws Exception
+ {
+ PomTestWrapper pom = buildPom( "plugin-exec-order-and-default-exec" );
+ List<PluginExecution> executions =
+ (List<PluginExecution>) pom.getValue( "build/plugins[@artifactId='maven-resources-plugin']/executions" );
+ assertNotNull( executions );
+ assertEquals( 4, executions.size() );
+ assertEquals( "default-resources", executions.get( 0 ).getId() );
+ assertEquals( "default-testResources", executions.get( 1 ).getId() );
+ assertEquals( "test-1", executions.get( 2 ).getId() );
+ assertEquals( "test-2", executions.get( 3 ).getId() );
+ }
+
private void assertPathSuffixEquals( String expected, Object actual )
{
String a = actual.toString();
Propchange: maven/components/trunk/maven-core/src/test/resources-project-builder/plugin-exec-order-and-default-exec/
------------------------------------------------------------------------------
bugtraq:label = Enter issue ID:
Propchange: maven/components/trunk/maven-core/src/test/resources-project-builder/plugin-exec-order-and-default-exec/
------------------------------------------------------------------------------
bugtraq:message = Issue id: %BUGID%
Propchange: maven/components/trunk/maven-core/src/test/resources-project-builder/plugin-exec-order-and-default-exec/
------------------------------------------------------------------------------
bugtraq:number = false
Propchange: maven/components/trunk/maven-core/src/test/resources-project-builder/plugin-exec-order-and-default-exec/
------------------------------------------------------------------------------
bugtraq:url = http://jira.codehaus.org/browse/%BUGID%
Added: maven/components/trunk/maven-core/src/test/resources-project-builder/plugin-exec-order-and-default-exec/pom.xml
URL: http://svn.apache.org/viewvc/maven/components/trunk/maven-core/src/test/resources-project-builder/plugin-exec-order-and-default-exec/pom.xml?rev=809751&view=auto
==============================================================================
--- maven/components/trunk/maven-core/src/test/resources-project-builder/plugin-exec-order-and-default-exec/pom.xml (added)
+++ maven/components/trunk/maven-core/src/test/resources-project-builder/plugin-exec-order-and-default-exec/pom.xml Mon Aug 31 21:31:01 2009
@@ -0,0 +1,71 @@
+<?xml version="1.0" encoding="UTF-8"?>
+
+<!--
+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.
+-->
+
+<project>
+ <modelVersion>4.0.0</modelVersion>
+
+ <groupId>org.apache.maven.its.mng4332</groupId>
+ <artifactId>test</artifactId>
+ <version>0.1</version>
+ <!-- NOTE: The upper-case packaging name is intentional and triggers a special mode in the EmptyLifecycleExecutor -->
+ <packaging>JAR</packaging>
+
+ <name>Maven Integration Test :: MNG-4332</name>
+ <description>
+ Verify that default plugin executions contributed by the packaging are executed before user-defined
+ executions from the POM's build section, regardless whether the executions are defined in the regular
+ plugins section or the plugin management section.
+ </description>
+
+ <build>
+ <pluginManagement>
+ <plugins>
+ <plugin>
+ <artifactId>maven-resources-plugin</artifactId>
+ <version>2.2</version>
+ <executions>
+ <execution>
+ <id>test-1</id>
+ <goals>
+ <goal>resources</goal>
+ </goals>
+ </execution>
+ </executions>
+ </plugin>
+ </plugins>
+ </pluginManagement>
+ <plugins>
+ <plugin>
+ <artifactId>maven-resources-plugin</artifactId>
+ <version>2.2</version>
+ <executions>
+ <execution>
+ <id>test-2</id>
+ <goals>
+ <goal>resources</goal>
+ </goals>
+ </execution>
+ </executions>
+ </plugin>
+ </plugins>
+ </build>
+
+</project>
Propchange: maven/components/trunk/maven-core/src/test/resources-project-builder/plugin-exec-order-and-default-exec/pom.xml
------------------------------------------------------------------------------
svn:eol-style = native
Propchange: maven/components/trunk/maven-core/src/test/resources-project-builder/plugin-exec-order-and-default-exec/pom.xml
------------------------------------------------------------------------------
svn:keywords = Author Date Id Revision
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=809751&r1=809750&r2=809751&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 Aug 31 21:31:01 2009
@@ -215,17 +215,15 @@
modelPathTranslator.alignToBaseDirectory( resultModel, resultModel.getProjectDirectory(), request );
- pluginManagementInjector.injectBasicManagement( resultModel, request, problems );
+ pluginManagementInjector.injectManagement( resultModel, request, problems );
fireEvent( resultModel, request, problems, ModelBuildingEventCatapult.BUILD_EXTENSIONS_ASSEMBLED );
if ( request.isProcessPlugins() )
{
- lifecycleBindingsInjector.injectLifecycleBindings( resultModel, problems );
+ lifecycleBindingsInjector.injectLifecycleBindings( resultModel, request, problems );
}
- pluginManagementInjector.injectManagement( resultModel, request, problems );
-
importDependencyManagement( resultModel, request, problems );
dependencyManagementInjector.injectManagement( resultModel, request, problems );
Modified: maven/components/trunk/maven-model-builder/src/main/java/org/apache/maven/model/management/DefaultPluginManagementInjector.java
URL: http://svn.apache.org/viewvc/maven/components/trunk/maven-model-builder/src/main/java/org/apache/maven/model/management/DefaultPluginManagementInjector.java?rev=809751&r1=809750&r2=809751&view=diff
==============================================================================
--- maven/components/trunk/maven-model-builder/src/main/java/org/apache/maven/model/management/DefaultPluginManagementInjector.java (original)
+++ maven/components/trunk/maven-model-builder/src/main/java/org/apache/maven/model/management/DefaultPluginManagementInjector.java Mon Aug 31 21:31:01 2009
@@ -51,19 +51,14 @@
public void injectManagement( Model model, ModelBuildingRequest request, ModelProblemCollector problems )
{
- merger.mergeManagedBuildPlugins( model, false );
- }
-
- public void injectBasicManagement( Model model, ModelBuildingRequest request, ModelProblemCollector problems )
- {
- merger.mergeManagedBuildPlugins( model, true );
+ merger.mergeManagedBuildPlugins( model );
}
private static class ManagementModelMerger
extends MavenModelMerger
{
- public void mergeManagedBuildPlugins( Model model, boolean basic )
+ public void mergeManagedBuildPlugins( Model model )
{
Build build = model.getBuild();
if ( build != null )
@@ -71,12 +66,12 @@
PluginManagement pluginManagement = build.getPluginManagement();
if ( pluginManagement != null )
{
- mergePluginContainer_Plugins( build, pluginManagement, basic );
+ mergePluginContainer_Plugins( build, pluginManagement );
}
}
}
- private void mergePluginContainer_Plugins( PluginContainer target, PluginContainer source, boolean basic )
+ private void mergePluginContainer_Plugins( PluginContainer target, PluginContainer source )
{
List<Plugin> src = source.getPlugins();
if ( !src.isEmpty() )
@@ -101,19 +96,7 @@
Plugin managedPlugin = managedPlugins.get( key );
if ( managedPlugin != null )
{
- if ( basic )
- {
- mergePlugin_Version( element, managedPlugin, false, context );
- mergePlugin_Extensions( element, managedPlugin, false, context );
- if ( element.isExtensions() )
- {
- mergePlugin_Dependencies( element, managedPlugin, false, context );
- }
- }
- else
- {
- mergePlugin( element, managedPlugin, false, context );
- }
+ mergePlugin( element, managedPlugin, false, context );
}
}
}
Modified: maven/components/trunk/maven-model-builder/src/main/java/org/apache/maven/model/management/DependencyManagementInjector.java
URL: http://svn.apache.org/viewvc/maven/components/trunk/maven-model-builder/src/main/java/org/apache/maven/model/management/DependencyManagementInjector.java?rev=809751&r1=809750&r2=809751&view=diff
==============================================================================
--- maven/components/trunk/maven-model-builder/src/main/java/org/apache/maven/model/management/DependencyManagementInjector.java (original)
+++ maven/components/trunk/maven-model-builder/src/main/java/org/apache/maven/model/management/DependencyManagementInjector.java Mon Aug 31 21:31:01 2009
@@ -34,11 +34,11 @@
/**
* 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 dependency management sections, must not
+ * @param model 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}.
* @param problems The container used to collect problems that were encountered, must not be {@code null}.
*/
- void injectManagement( Model child, ModelBuildingRequest request, ModelProblemCollector problems );
+ void injectManagement( Model model, ModelBuildingRequest request, ModelProblemCollector problems );
}
Modified: maven/components/trunk/maven-model-builder/src/main/java/org/apache/maven/model/management/PluginManagementInjector.java
URL: http://svn.apache.org/viewvc/maven/components/trunk/maven-model-builder/src/main/java/org/apache/maven/model/management/PluginManagementInjector.java?rev=809751&r1=809750&r2=809751&view=diff
==============================================================================
--- maven/components/trunk/maven-model-builder/src/main/java/org/apache/maven/model/management/PluginManagementInjector.java (original)
+++ maven/components/trunk/maven-model-builder/src/main/java/org/apache/maven/model/management/PluginManagementInjector.java Mon Aug 31 21:31:01 2009
@@ -34,23 +34,11 @@
/**
* 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 plugin management section, must not be
+ * @param model 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}.
* @param problems The container used to collect problems that were encountered, must not be {@code null}.
*/
- void injectManagement( Model child, ModelBuildingRequest request, ModelProblemCollector problems );
-
- /**
- * 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}.
- * @param problems The container used to collect problems that were encountered, must not be {@code null}.
- */
- void injectBasicManagement( Model child, ModelBuildingRequest request, ModelProblemCollector problems );
+ void injectManagement( Model model, ModelBuildingRequest request, ModelProblemCollector problems );
}
Modified: maven/components/trunk/maven-model-builder/src/main/java/org/apache/maven/model/plugin/LifecycleBindingsInjector.java
URL: http://svn.apache.org/viewvc/maven/components/trunk/maven-model-builder/src/main/java/org/apache/maven/model/plugin/LifecycleBindingsInjector.java?rev=809751&r1=809750&r2=809751&view=diff
==============================================================================
--- maven/components/trunk/maven-model-builder/src/main/java/org/apache/maven/model/plugin/LifecycleBindingsInjector.java (original)
+++ maven/components/trunk/maven-model-builder/src/main/java/org/apache/maven/model/plugin/LifecycleBindingsInjector.java Mon Aug 31 21:31:01 2009
@@ -20,6 +20,7 @@
*/
import org.apache.maven.model.Model;
+import org.apache.maven.model.building.ModelBuildingRequest;
import org.apache.maven.model.building.ModelProblemCollector;
/**
@@ -31,12 +32,15 @@
{
/**
- * Injects plugin executions induced by lifecycle bindings into the specified model.
+ * Injects plugin executions induced by lifecycle bindings into the specified model. The model has already undergone
+ * injection of plugin management so any plugins that are injected by lifecycle bindings and are not already present
+ * in the model's plugin section need to be subjected to the model's plugin management.
*
* @param model The model into which to inject the default plugin executions for its packaging, must not be
* <code>null</code>.
+ * @param request The model building request that holds further settings, must not be {@code null}.
* @param problems The container used to collect problems that were encountered, must not be {@code null}.
*/
- void injectLifecycleBindings( Model model, ModelProblemCollector problems );
+ void injectLifecycleBindings( Model model, ModelBuildingRequest request, ModelProblemCollector problems );
}