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/06/17 17:00:07 UTC

svn commit: r785644 - in /maven/components/trunk: maven-core/src/test/java/org/apache/maven/project/ maven-core/src/test/resources-project-builder/plugin-inheritance-order/ maven-core/src/test/resources-project-builder/plugin-inheritance-order/child/ m...

Author: bentmann
Date: Wed Jun 17 15:00:06 2009
New Revision: 785644

URL: http://svn.apache.org/viewvc?rev=785644&view=rev
Log:
o Fixed order of inherited plugins

Added:
    maven/components/trunk/maven-core/src/test/resources-project-builder/plugin-inheritance-order/   (with props)
    maven/components/trunk/maven-core/src/test/resources-project-builder/plugin-inheritance-order/child/   (with props)
    maven/components/trunk/maven-core/src/test/resources-project-builder/plugin-inheritance-order/child/pom.xml   (with props)
    maven/components/trunk/maven-core/src/test/resources-project-builder/plugin-inheritance-order/pom.xml   (with props)
Modified:
    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/inheritance/DefaultInheritanceAssembler.java
    maven/components/trunk/maven-model-builder/src/main/java/org/apache/maven/model/merge/MavenModelMerger.java
    maven/components/trunk/maven-model-builder/src/main/java/org/apache/maven/model/profile/DefaultProfileInjector.java

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=785644&r1=785643&r2=785644&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 Wed Jun 17 15:00:06 2009
@@ -1608,6 +1608,20 @@
         assertEquals( "child-mailing-list", pom.getValue( "mailingLists[1]/name" ) );
     }    
 
+    public void testPluginInheritanceOrder()
+        throws Exception
+    {
+        PomTestWrapper pom = buildPom( "plugin-inheritance-order/child" );
+
+        assertEquals( "maven-it-plugin-log-file", pom.getValue( "build/plugins[1]/artifactId" ) );
+        assertEquals( "maven-it-plugin-expression", pom.getValue( "build/plugins[2]/artifactId" ) );
+        assertEquals( "maven-it-plugin-configuration", pom.getValue( "build/plugins[3]/artifactId" ) );
+
+        assertEquals( "maven-it-plugin-log-file", pom.getValue( "reporting/plugins[1]/artifactId" ) );
+        assertEquals( "maven-it-plugin-expression", pom.getValue( "reporting/plugins[2]/artifactId" ) );
+        assertEquals( "maven-it-plugin-configuration", pom.getValue( "reporting/plugins[3]/artifactId" ) );
+    }
+
     private void assertPathSuffixEquals( String expected, Object actual )
     {
         String a = actual.toString();

Propchange: maven/components/trunk/maven-core/src/test/resources-project-builder/plugin-inheritance-order/
------------------------------------------------------------------------------
    bugtraq:label = Enter issue ID:

Propchange: maven/components/trunk/maven-core/src/test/resources-project-builder/plugin-inheritance-order/
------------------------------------------------------------------------------
    bugtraq:message = Issue id: %BUGID%

Propchange: maven/components/trunk/maven-core/src/test/resources-project-builder/plugin-inheritance-order/
------------------------------------------------------------------------------
    bugtraq:number = false

Propchange: maven/components/trunk/maven-core/src/test/resources-project-builder/plugin-inheritance-order/
------------------------------------------------------------------------------
    bugtraq:url = http://jira.codehaus.org/browse/%BUGID%

Propchange: maven/components/trunk/maven-core/src/test/resources-project-builder/plugin-inheritance-order/child/
------------------------------------------------------------------------------
    bugtraq:label = Enter issue ID:

Propchange: maven/components/trunk/maven-core/src/test/resources-project-builder/plugin-inheritance-order/child/
------------------------------------------------------------------------------
    bugtraq:message = Issue id: %BUGID%

Propchange: maven/components/trunk/maven-core/src/test/resources-project-builder/plugin-inheritance-order/child/
------------------------------------------------------------------------------
    bugtraq:number = false

Propchange: maven/components/trunk/maven-core/src/test/resources-project-builder/plugin-inheritance-order/child/
------------------------------------------------------------------------------
    bugtraq:url = http://jira.codehaus.org/browse/%BUGID%

Added: maven/components/trunk/maven-core/src/test/resources-project-builder/plugin-inheritance-order/child/pom.xml
URL: http://svn.apache.org/viewvc/maven/components/trunk/maven-core/src/test/resources-project-builder/plugin-inheritance-order/child/pom.xml?rev=785644&view=auto
==============================================================================
--- maven/components/trunk/maven-core/src/test/resources-project-builder/plugin-inheritance-order/child/pom.xml (added)
+++ maven/components/trunk/maven-core/src/test/resources-project-builder/plugin-inheritance-order/child/pom.xml Wed Jun 17 15:00:06 2009
@@ -0,0 +1,51 @@
+<?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>
+
+  <parent>
+    <groupId>org.apache.maven.its.mng3808</groupId>
+    <artifactId>test</artifactId>
+    <version>0.1</version>
+  </parent>  
+  <artifactId>child</artifactId>
+
+  <build>
+    <plugins>
+      <plugin>
+        <groupId>org.apache.maven.its.plugins</groupId>
+        <artifactId>maven-it-plugin-configuration</artifactId>
+        <version>2.1-SNAPSHOT</version>
+      </plugin>
+    </plugins>
+  </build>
+
+  <reporting>
+    <plugins>
+      <plugin>
+        <groupId>org.apache.maven.its.plugins</groupId>
+        <artifactId>maven-it-plugin-configuration</artifactId>
+        <version>2.1-SNAPSHOT</version>
+      </plugin>
+    </plugins>
+  </reporting>
+</project>

Propchange: maven/components/trunk/maven-core/src/test/resources-project-builder/plugin-inheritance-order/child/pom.xml
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: maven/components/trunk/maven-core/src/test/resources-project-builder/plugin-inheritance-order/child/pom.xml
------------------------------------------------------------------------------
    svn:keywords = Author Date Id Revision

Added: maven/components/trunk/maven-core/src/test/resources-project-builder/plugin-inheritance-order/pom.xml
URL: http://svn.apache.org/viewvc/maven/components/trunk/maven-core/src/test/resources-project-builder/plugin-inheritance-order/pom.xml?rev=785644&view=auto
==============================================================================
--- maven/components/trunk/maven-core/src/test/resources-project-builder/plugin-inheritance-order/pom.xml (added)
+++ maven/components/trunk/maven-core/src/test/resources-project-builder/plugin-inheritance-order/pom.xml Wed Jun 17 15:00:06 2009
@@ -0,0 +1,68 @@
+<?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.mng3808</groupId>
+  <artifactId>test</artifactId>
+  <version>0.1</version>
+  <packaging>pom</packaging>
+
+  <name>Maven Integration Test :: MNG-3808</name> 
+  <description>
+    Test the reports are executeed in the order given in the POM.
+  </description>
+
+  <build>
+    <plugins>
+      <plugin>
+        <groupId>org.apache.maven.its.plugins</groupId>
+        <artifactId>maven-it-plugin-log-file</artifactId>
+        <version>2.1-SNAPSHOT</version>
+      </plugin>
+      <plugin>
+        <groupId>org.apache.maven.its.plugins</groupId>
+        <artifactId>maven-it-plugin-expression</artifactId>
+        <version>2.1-SNAPSHOT</version>
+      </plugin>
+    </plugins>
+  </build>
+
+  <reporting>
+    <plugins>
+      <plugin>
+        <groupId>org.apache.maven.its.plugins</groupId>
+        <artifactId>maven-it-plugin-log-file</artifactId>
+        <version>2.1-SNAPSHOT</version>
+      </plugin>
+      <plugin>
+        <groupId>org.apache.maven.its.plugins</groupId>
+        <artifactId>maven-it-plugin-expression</artifactId>
+        <version>2.1-SNAPSHOT</version>
+      </plugin>
+    </plugins>
+  </reporting>
+
+  <modules>
+    <module>child</module>
+  </modules>
+</project>

Propchange: maven/components/trunk/maven-core/src/test/resources-project-builder/plugin-inheritance-order/pom.xml
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: maven/components/trunk/maven-core/src/test/resources-project-builder/plugin-inheritance-order/pom.xml
------------------------------------------------------------------------------
    svn:keywords = Author Date Id Revision

Modified: maven/components/trunk/maven-model-builder/src/main/java/org/apache/maven/model/inheritance/DefaultInheritanceAssembler.java
URL: http://svn.apache.org/viewvc/maven/components/trunk/maven-model-builder/src/main/java/org/apache/maven/model/inheritance/DefaultInheritanceAssembler.java?rev=785644&r1=785643&r2=785644&view=diff
==============================================================================
--- maven/components/trunk/maven-model-builder/src/main/java/org/apache/maven/model/inheritance/DefaultInheritanceAssembler.java (original)
+++ maven/components/trunk/maven-model-builder/src/main/java/org/apache/maven/model/inheritance/DefaultInheritanceAssembler.java Wed Jun 17 15:00:06 2009
@@ -19,11 +19,19 @@
  * under the License.
  */
 
+import java.util.ArrayList;
 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.Model;
 import org.apache.maven.model.ModelBuildingRequest;
+import org.apache.maven.model.Plugin;
+import org.apache.maven.model.PluginContainer;
+import org.apache.maven.model.ReportPlugin;
+import org.apache.maven.model.Reporting;
 import org.apache.maven.model.merge.MavenModelMerger;
 import org.codehaus.plexus.component.annotations.Component;
 
@@ -37,7 +45,7 @@
     implements InheritanceAssembler
 {
 
-    private MavenModelMerger merger = new MavenModelMerger();
+    private InheritanceModelMerger merger = new InheritanceModelMerger();
 
     public void assembleModelInheritance( Model child, Model parent, ModelBuildingRequest request )
     {
@@ -97,4 +105,94 @@
         return adjustment;
     }
 
+    private static class InheritanceModelMerger
+        extends MavenModelMerger
+    {
+
+        @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> merged = new LinkedHashMap<Object, Plugin>( ( src.size() + tgt.size() ) * 2 );
+
+                for ( Iterator<Plugin> it = src.iterator(); it.hasNext(); )
+                {
+                    Plugin element = it.next();
+                    Object key = getPluginKey( element );
+                    if ( element.isInherited() )
+                    {
+                        // NOTE: Enforce recursive merge to trigger merging/inheritance logic for executions as well
+                        Plugin plugin = new Plugin();
+                        plugin.setGroupId( element.getGroupId() );
+                        plugin.setArtifactId( element.getArtifactId() );
+                        mergePlugin( plugin, element, sourceDominant, context );
+
+                        merged.put( key, plugin );
+                    }
+                }
+
+                for ( Iterator<Plugin> it = tgt.iterator(); it.hasNext(); )
+                {
+                    Plugin element = it.next();
+                    Object key = getPluginKey( element );
+                    Plugin existing = merged.get( key );
+                    if ( existing != null )
+                    {
+                        mergePlugin( element, existing, sourceDominant, context );
+                    }
+                    merged.put( key, element );
+                }
+
+                target.setPlugins( new ArrayList<Plugin>( merged.values() ) );
+            }
+        }
+
+        @Override
+        protected void mergeReporting_Plugins( Reporting target, Reporting source, boolean sourceDominant,
+                                               Map<Object, Object> context )
+        {
+            List<ReportPlugin> src = source.getPlugins();
+            if ( !src.isEmpty() )
+            {
+                List<ReportPlugin> tgt = target.getPlugins();
+                Map<Object, ReportPlugin> merged =
+                    new LinkedHashMap<Object, ReportPlugin>( ( src.size() + tgt.size() ) * 2 );
+
+                for ( Iterator<ReportPlugin> it = src.iterator(); it.hasNext(); )
+                {
+                    ReportPlugin element = it.next();
+                    Object key = getReportPluginKey( element );
+                    if ( element.isInherited() )
+                    {
+                        // NOTE: Enforce recursive merge to trigger merging/inheritance logic for executions as well
+                        ReportPlugin plugin = new ReportPlugin();
+                        plugin.setGroupId( element.getGroupId() );
+                        plugin.setArtifactId( element.getArtifactId() );
+                        mergeReportPlugin( plugin, element, sourceDominant, context );
+
+                        merged.put( key, plugin );
+                    }
+                }
+
+                for ( Iterator<ReportPlugin> it = tgt.iterator(); it.hasNext(); )
+                {
+                    ReportPlugin element = it.next();
+                    Object key = getReportPluginKey( element );
+                    ReportPlugin existing = merged.get( key );
+                    if ( existing != null )
+                    {
+                        mergeReportPlugin( element, existing, sourceDominant, context );
+                    }
+                    merged.put( key, element );
+                }
+
+                target.setPlugins( new ArrayList<ReportPlugin>( merged.values() ) );
+            }
+        }
+    }
+
 }

Modified: maven/components/trunk/maven-model-builder/src/main/java/org/apache/maven/model/merge/MavenModelMerger.java
URL: http://svn.apache.org/viewvc/maven/components/trunk/maven-model-builder/src/main/java/org/apache/maven/model/merge/MavenModelMerger.java?rev=785644&r1=785643&r2=785644&view=diff
==============================================================================
--- maven/components/trunk/maven-model-builder/src/main/java/org/apache/maven/model/merge/MavenModelMerger.java (original)
+++ maven/components/trunk/maven-model-builder/src/main/java/org/apache/maven/model/merge/MavenModelMerger.java Wed Jun 17 15:00:06 2009
@@ -44,11 +44,9 @@
 import org.apache.maven.model.ModelBase;
 import org.apache.maven.model.Organization;
 import org.apache.maven.model.Plugin;
-import org.apache.maven.model.PluginContainer;
 import org.apache.maven.model.PluginExecution;
 import org.apache.maven.model.ReportPlugin;
 import org.apache.maven.model.ReportSet;
-import org.apache.maven.model.Reporting;
 import org.apache.maven.model.Repository;
 import org.apache.maven.model.RepositoryBase;
 import org.apache.maven.model.Scm;
@@ -453,81 +451,6 @@
     }
 
     @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> merged = new LinkedHashMap<Object, Plugin>( ( src.size() + tgt.size() ) * 2 );
-
-            for ( Iterator<Plugin> it = tgt.iterator(); it.hasNext(); )
-            {
-                Plugin element = it.next();
-                Object key = getPluginKey( element );
-                merged.put( key, element );
-            }
-
-            for ( Iterator<Plugin> it = src.iterator(); it.hasNext(); )
-            {
-                Plugin element = it.next();
-                Object key = getPluginKey( element );
-                Plugin existing = merged.get( key );
-                if ( existing == null )
-                {
-                    // NOTE: Enforce recursive merge to trigger merging/inheritance logic for executions as well
-                    existing = new Plugin();
-                    existing.setGroupId( element.getGroupId() );
-                    existing.setArtifactId( element.getArtifactId() );
-                    merged.put( key, existing );
-                }
-                mergePlugin( existing, element, sourceDominant, context );
-            }
-
-            target.setPlugins( new ArrayList<Plugin>( merged.values() ) );
-        }
-    }
-
-    @Override
-    protected void mergeReporting_Plugins( Reporting target, Reporting source, boolean sourceDominant,
-                                           Map<Object, Object> context )
-    {
-        List<ReportPlugin> src = source.getPlugins();
-        if ( !src.isEmpty() )
-        {
-            List<ReportPlugin> tgt = target.getPlugins();
-            Map<Object, ReportPlugin> merged =
-                new LinkedHashMap<Object, ReportPlugin>( ( src.size() + tgt.size() ) * 2 );
-
-            for ( Iterator<ReportPlugin> it = tgt.iterator(); it.hasNext(); )
-            {
-                ReportPlugin element = it.next();
-                Object key = getReportPluginKey( element );
-                merged.put( key, element );
-            }
-
-            for ( Iterator<ReportPlugin> it = src.iterator(); it.hasNext(); )
-            {
-                ReportPlugin element = it.next();
-                Object key = getReportPluginKey( element );
-                ReportPlugin existing = merged.get( key );
-                if ( existing == null )
-                {
-                    // NOTE: Enforce recursive merge to trigger merging/inheritance logic for executions as well
-                    existing = new ReportPlugin();
-                    existing.setGroupId( element.getGroupId() );
-                    existing.setArtifactId( element.getArtifactId() );
-                    merged.put( key, existing );
-                }
-                mergeReportPlugin( existing, element, sourceDominant, context );
-            }
-
-            target.setPlugins( new ArrayList<ReportPlugin>( merged.values() ) );
-        }
-    }
-
-    @Override
     protected void mergePlugin_Executions( Plugin target, Plugin source, boolean sourceDominant,
                                            Map<Object, Object> context )
     {

Modified: maven/components/trunk/maven-model-builder/src/main/java/org/apache/maven/model/profile/DefaultProfileInjector.java
URL: http://svn.apache.org/viewvc/maven/components/trunk/maven-model-builder/src/main/java/org/apache/maven/model/profile/DefaultProfileInjector.java?rev=785644&r1=785643&r2=785644&view=diff
==============================================================================
--- maven/components/trunk/maven-model-builder/src/main/java/org/apache/maven/model/profile/DefaultProfileInjector.java (original)
+++ maven/components/trunk/maven-model-builder/src/main/java/org/apache/maven/model/profile/DefaultProfileInjector.java Wed Jun 17 15:00:06 2009
@@ -19,14 +19,23 @@
  * under the License.
  */
 
+import java.util.ArrayList;
 import java.util.Collections;
+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.BuildBase;
 import org.apache.maven.model.Model;
 import org.apache.maven.model.ModelBase;
 import org.apache.maven.model.ModelBuildingRequest;
+import org.apache.maven.model.Plugin;
+import org.apache.maven.model.PluginContainer;
 import org.apache.maven.model.Profile;
+import org.apache.maven.model.ReportPlugin;
+import org.apache.maven.model.Reporting;
 import org.apache.maven.model.merge.MavenModelMerger;
 import org.codehaus.plexus.component.annotations.Component;
 
@@ -73,6 +82,79 @@
             mergeBuildBase( target, source, true, 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> merged = new LinkedHashMap<Object, Plugin>( ( src.size() + tgt.size() ) * 2 );
+
+                for ( Iterator<Plugin> it = tgt.iterator(); it.hasNext(); )
+                {
+                    Plugin element = it.next();
+                    Object key = getPluginKey( element );
+                    merged.put( key, element );
+                }
+
+                for ( Iterator<Plugin> it = src.iterator(); it.hasNext(); )
+                {
+                    Plugin element = it.next();
+                    Object key = getPluginKey( element );
+                    Plugin existing = merged.get( key );
+                    if ( existing == null )
+                    {
+                        merged.put( key, element );
+                    }
+                    else
+                    {
+                        mergePlugin( existing, element, sourceDominant, context );
+                    }
+                }
+
+                target.setPlugins( new ArrayList<Plugin>( merged.values() ) );
+            }
+        }
+
+        @Override
+        protected void mergeReporting_Plugins( Reporting target, Reporting source, boolean sourceDominant,
+                                               Map<Object, Object> context )
+        {
+            List<ReportPlugin> src = source.getPlugins();
+            if ( !src.isEmpty() )
+            {
+                List<ReportPlugin> tgt = target.getPlugins();
+                Map<Object, ReportPlugin> merged =
+                    new LinkedHashMap<Object, ReportPlugin>( ( src.size() + tgt.size() ) * 2 );
+
+                for ( Iterator<ReportPlugin> it = tgt.iterator(); it.hasNext(); )
+                {
+                    ReportPlugin element = it.next();
+                    Object key = getReportPluginKey( element );
+                    merged.put( key, element );
+                }
+
+                for ( Iterator<ReportPlugin> it = src.iterator(); it.hasNext(); )
+                {
+                    ReportPlugin element = it.next();
+                    Object key = getReportPluginKey( element );
+                    ReportPlugin existing = merged.get( key );
+                    if ( existing == null )
+                    {
+                        merged.put( key, element );
+                    }
+                    else
+                    {
+                        mergeReportPlugin( existing, element, sourceDominant, context );
+                    }
+                }
+
+                target.setPlugins( new ArrayList<ReportPlugin>( merged.values() ) );
+            }
+        }
+
     }
 
 }