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>