You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@maven.apache.org by ra...@apache.org on 2009/04/12 00:37:50 UTC

svn commit: r764258 - in /maven/archetype/trunk: archetype-common/src/main/java/org/apache/maven/archetype/common/DefaultPomManager.java archetype-plugin/pom.xml pom.xml

Author: rafale
Date: Sat Apr 11 22:37:50 2009
New Revision: 764258

URL: http://svn.apache.org/viewvc?rev=764258&view=rev
Log:
Fix for ARCHETYPE-235

Modified:
    maven/archetype/trunk/archetype-common/src/main/java/org/apache/maven/archetype/common/DefaultPomManager.java
    maven/archetype/trunk/archetype-plugin/pom.xml
    maven/archetype/trunk/pom.xml

Modified: maven/archetype/trunk/archetype-common/src/main/java/org/apache/maven/archetype/common/DefaultPomManager.java
URL: http://svn.apache.org/viewvc/maven/archetype/trunk/archetype-common/src/main/java/org/apache/maven/archetype/common/DefaultPomManager.java?rev=764258&r1=764257&r2=764258&view=diff
==============================================================================
--- maven/archetype/trunk/archetype-common/src/main/java/org/apache/maven/archetype/common/DefaultPomManager.java (original)
+++ maven/archetype/trunk/archetype-common/src/main/java/org/apache/maven/archetype/common/DefaultPomManager.java Sat Apr 11 22:37:50 2009
@@ -22,20 +22,25 @@
 import org.apache.maven.archetype.common.util.FileCharsetDetector;
 import org.apache.maven.archetype.common.util.Format;
 import org.apache.maven.archetype.exception.InvalidPackaging;
-import org.apache.maven.model.Build;
-import org.apache.maven.model.Dependency;
+import org.apache.maven.model.io.xpp3.MavenXpp3Reader;
+import org.apache.maven.model.io.xpp3.MavenXpp3Writer;
 import org.apache.maven.model.Model;
 import org.apache.maven.model.Parent;
-import org.apache.maven.model.Plugin;
-import org.apache.maven.model.ReportPlugin;
+import org.apache.maven.model.Dependency;
+import org.apache.maven.model.Build;
+import org.apache.maven.model.Profile;
+import org.apache.maven.model.ModelBase;
 import org.apache.maven.model.Reporting;
-import org.apache.maven.model.io.xpp3.MavenXpp3Reader;
-import org.apache.maven.model.io.xpp3.MavenXpp3Writer;
+import org.apache.maven.model.ReportPlugin;
+import org.apache.maven.model.BuildBase;
+import org.apache.maven.model.Plugin;
 import org.codehaus.plexus.logging.AbstractLogEnabled;
 import org.codehaus.plexus.util.FileUtils;
 import org.codehaus.plexus.util.IOUtil;
 import org.codehaus.plexus.util.StringUtils;
 import org.codehaus.plexus.util.xml.pull.XmlPullParserException;
+import org.codehaus.plexus.util.xml.Xpp3DomUtils;
+import org.codehaus.plexus.util.xml.Xpp3Dom;
 import org.dom4j.Document;
 import org.dom4j.DocumentException;
 import org.dom4j.Element;
@@ -57,10 +62,7 @@
 import java.io.Reader;
 import java.io.StringWriter;
 import java.io.Writer;
-import java.util.HashMap;
-import java.util.Iterator;
-import java.util.List;
-import java.util.Map;
+import java.util.*;
 
 /** @plexus.component */
 public class DefaultPomManager
@@ -194,8 +196,12 @@
     {
         Model model = readPom( pom );
         Model generatedModel = readPom( temporaryPom );
-        mergeDependencies( model, generatedModel );
-        mergeBuildPlugins( model, generatedModel );
+
+        model.getProperties().putAll( generatedModel.getProperties() );
+
+        mergeModelBase( model, generatedModel );
+        mergeModelBuild( model, generatedModel );
+        mergeProfiles( model, generatedModel );
         mergeReportPlugins( model, generatedModel );
 
 //
@@ -404,7 +410,7 @@
             Dependency dependency = (Dependency) dependenciesIterator.next();
 
             dependencyMap.put(
-                dependency.getGroupId() + ":" + dependency.getArtifactId(),
+                dependency.getManagementKey(),
                 dependency
             );
         }
@@ -412,8 +418,7 @@
         return dependencyMap;
     }
 
-    private void mergeBuildPlugins( Model model,
-                                    Model generatedModel )
+    private void mergeModelBuild( Model model, Model generatedModel )
     {
         if ( generatedModel.getBuild() != null )
         {
@@ -422,31 +427,69 @@
                 model.setBuild( new Build() );
             }
 
-            Map pluginsByIds = model.getBuild().getPluginsAsMap();
-            Map generatedPluginsByIds = generatedModel.getBuild().getPluginsAsMap();
+            mergeBuildPlugins( model.getBuild(), generatedModel.getBuild() );
+        }
+    }
 
-            Iterator generatedPluginsIds = generatedPluginsByIds.keySet().iterator();
-            while ( generatedPluginsIds.hasNext() )
+    private void mergeProfiles( Model model, Model generatedModel )
+    {
+        List generatedProfiles = generatedModel.getProfiles();
+        if ( generatedProfiles != null && generatedProfiles.size() > 0 )
+        {
+            List modelProfiles = model.getProfiles();
+            Map modelProfileIdMap = new HashMap();
+            if ( modelProfiles == null )
             {
-                String generatedPluginsId = (String) generatedPluginsIds.next();
+                modelProfiles = new ArrayList();
+                model.setProfiles( modelProfiles );
+            }
+            else if ( modelProfiles.size() > 0 )
+            {
+                // add profile ids from the model for later lookups to the modelProfileIds set
+                Iterator modelProfilesIterator = modelProfiles.iterator();
+                while ( modelProfilesIterator.hasNext() )
+                {
+                    Profile modelProfile = (Profile) modelProfilesIterator.next();
+                    modelProfileIdMap.put( modelProfile.getId(), modelProfile );
+                }
+            }
 
-                if ( !pluginsByIds.containsKey( generatedPluginsId ) )
+            Iterator generatedProfilesIterator = generatedProfiles.iterator();
+            while ( generatedProfilesIterator.hasNext() )
+            {
+                Profile generatedProfile = (Profile) generatedProfilesIterator.next();
+                String generatedProfileId = generatedProfile.getId();
+                if ( !modelProfileIdMap.containsKey( generatedProfileId ) )
                 {
-                    model.getBuild().addPlugin(
-                        (Plugin) generatedPluginsByIds.get( generatedPluginsId )
-                    );
+                    model.addProfile( generatedProfile );
                 }
                 else
                 {
-                    getLogger().warn( "Can not override plugin: " + generatedPluginsId );
+                    getLogger().warn( "Try to merge profiles with id " + generatedProfileId );
+                    mergeModelBase( (Profile) modelProfileIdMap.get( generatedProfileId ), generatedProfile );
+                    mergeProfileBuild( (Profile) modelProfileIdMap.get( generatedProfileId ), generatedProfile );
                 }
             }
         }
     }
 
-    private void mergeDependencies( Model model,
-                                    Model generatedModel )
+    private void mergeProfileBuild( Profile modelProfile, Profile generatedProfile )
+    {
+        if ( generatedProfile.getBuild() != null )
+        {
+            if ( modelProfile.getBuild() == null )
+            {
+                modelProfile.setBuild( new Build() );
+            }
+            mergeBuildPlugins( modelProfile.getBuild(), generatedProfile.getBuild() );
+            // TODO: merge more than just plugins in the profile...
+        }
+    }
+
+    private void mergeModelBase( ModelBase model, ModelBase generatedModel )
     {
+        // ModelBase can be a Model or a Profile...
+
         Map dependenciesByIds = createDependencyMap( model.getDependencies() );
         Map generatedDependenciesByIds = createDependencyMap( generatedModel.getDependencies() );
 
@@ -465,6 +508,11 @@
             {
                 getLogger().warn( "Can not override property: " + generatedDependencyId );
             }
+
+        // TODO: maybe warn, if a property key gets overriden?
+        model.getProperties().putAll( generatedModel.getProperties() );
+
+        // TODO: maybe merge more than just dependencies and properties...
         }
     }
 
@@ -500,4 +548,29 @@
             }
         }
     }
+    private void mergeBuildPlugins( BuildBase modelBuild, BuildBase generatedModelBuild )
+    {
+        Map pluginsByIds = modelBuild.getPluginsAsMap();
+        List generatedPlugins = generatedModelBuild.getPlugins();
+
+        Iterator generatedPluginsIterator = generatedPlugins.iterator();
+        while ( generatedPluginsIterator.hasNext() )
+        {
+            Plugin generatedPlugin = (Plugin) generatedPluginsIterator.next();
+            String generatedPluginsId = generatedPlugin.getKey();
+
+            if ( !pluginsByIds.containsKey( generatedPluginsId ) )
+            {
+                modelBuild.addPlugin( generatedPlugin );
+            }
+            else
+            {
+                getLogger().info( "Try to merge plugin configuration of plugins with id: " + generatedPluginsId );
+                Plugin modelPlugin = (Plugin) pluginsByIds.get( generatedPluginsId );
+
+                modelPlugin.setConfiguration( Xpp3DomUtils.mergeXpp3Dom( (Xpp3Dom) generatedPlugin.getConfiguration(),
+                                                                         (Xpp3Dom) modelPlugin.getConfiguration() ) );
+            }
+        }
+    }
 }

Modified: maven/archetype/trunk/archetype-plugin/pom.xml
URL: http://svn.apache.org/viewvc/maven/archetype/trunk/archetype-plugin/pom.xml?rev=764258&r1=764257&r2=764258&view=diff
==============================================================================
--- maven/archetype/trunk/archetype-plugin/pom.xml (original)
+++ maven/archetype/trunk/archetype-plugin/pom.xml Sat Apr 11 22:37:50 2009
@@ -66,6 +66,11 @@
       <artifactId>commons-collections</artifactId>
       <version>3.2.1</version>
     </dependency>
+    <dependency>
+      <groupId>org.codehaus.plexus</groupId>
+      <artifactId>plexus-utils</artifactId>
+      <version>1.5.8</version>
+    </dependency>
   </dependencies>
 
   <properties>

Modified: maven/archetype/trunk/pom.xml
URL: http://svn.apache.org/viewvc/maven/archetype/trunk/pom.xml?rev=764258&r1=764257&r2=764258&view=diff
==============================================================================
--- maven/archetype/trunk/pom.xml (original)
+++ maven/archetype/trunk/pom.xml Sat Apr 11 22:37:50 2009
@@ -83,7 +83,7 @@
             <dependency>
                 <groupId>org.codehaus.plexus</groupId>
                 <artifactId>plexus-utils</artifactId>
-                <version>1.5.6</version>
+                <version>1.5.8</version>
             </dependency>
             <dependency>
                 <groupId>org.codehaus.plexus</groupId>
@@ -364,4 +364,4 @@
             </dependencyManagement>
         </profile>
     </profiles>
-</project>
\ No newline at end of file
+</project>