Author: jdcasey
Date: Thu Jan 31 17:54:15 2008
New Revision: 617326
URL: http://svn.apache.org/viewvc?rev=617326&view=rev
Log:
[MNG-2145] Merging fix from trunk revId: 617325
Modified:
maven/components/branches/maven-2.0.x/maven-project/src/main/java/org/apache/maven/project/DefaultMavenProjectBuilder.java
maven/components/branches/maven-2.0.x/maven-project/src/main/java/org/apache/maven/project/ModelUtils.java
maven/components/branches/maven-2.0.x/maven-project/src/main/java/org/apache/maven/project/injection/DefaultProfileInjector.java
maven/components/branches/maven-2.0.x/maven-project/src/test/java/org/apache/maven/project/injection/DefaultProfileInjectorTest.java
Modified:
maven/components/branches/maven-2.0.x/maven-project/src/main/java/org/apache/maven/project/DefaultMavenProjectBuilder.java
URL:
http://svn.apache.org/viewvc/maven/components/branches/maven-2.0.x/maven-project/src/main/java/org/apache/maven/project/DefaultMavenProjectBuilder.java?rev=617326&r1=617325&r2=617326&view=diff
==============================================================================
---
maven/components/branches/maven-2.0.x/maven-project/src/main/java/org/apache/maven/project/DefaultMavenProjectBuilder.java
(original)
+++
maven/components/branches/maven-2.0.x/maven-project/src/main/java/org/apache/maven/project/DefaultMavenProjectBuilder.java
Thu Jan 31 17:54:15 2008
@@ -843,6 +843,9 @@
}
}
+ // merge any duplicated plugin definitions together, using the first
appearance as the dominant one.
+ ModelUtils.mergeDuplicatePluginDefinitions(
project.getModel().getBuild() );
+
mergeManagedDependencies(project.getModel(), localRepository,
parentSearchRepositories);
try
Modified:
maven/components/branches/maven-2.0.x/maven-project/src/main/java/org/apache/maven/project/ModelUtils.java
URL:
http://svn.apache.org/viewvc/maven/components/branches/maven-2.0.x/maven-project/src/main/java/org/apache/maven/project/ModelUtils.java?rev=617326&r1=617325&r2=617326&view=diff
==============================================================================
---
maven/components/branches/maven-2.0.x/maven-project/src/main/java/org/apache/maven/project/ModelUtils.java
(original)
+++
maven/components/branches/maven-2.0.x/maven-project/src/main/java/org/apache/maven/project/ModelUtils.java
Thu Jan 31 17:54:15 2008
@@ -62,6 +62,54 @@
{
/**
+ * Given this plugin list:
+ *
+ * A1 -> B -> C -> A2 -> D
+ *
+ * Rearrange it to this:
+ *
+ * A(A1 + A2) -> B -> C -> D
+ *
+ * In cases of overlapping definitions, A1 is overridden by A2
+ *
+ */
+ public static void mergeDuplicatePluginDefinitions( PluginContainer
pluginContainer )
+ {
+ if ( pluginContainer == null )
+ {
+ return;
+ }
+
+ List originalPlugins = pluginContainer.getPlugins();
+
+ if ( ( originalPlugins == null ) || originalPlugins.isEmpty() )
+ {
+ return;
+ }
+
+ List normalized = new ArrayList( originalPlugins.size() );
+
+ for ( Iterator it = originalPlugins.iterator(); it.hasNext(); )
+ {
+ Plugin currentPlugin = (Plugin) it.next();
+
+ if ( normalized.contains( currentPlugin ) )
+ {
+ int idx = normalized.indexOf( currentPlugin );
+ Plugin firstPlugin = (Plugin) normalized.get( idx );
+
+ mergePluginDefinitions( firstPlugin, currentPlugin, false );
+ }
+ else
+ {
+ normalized.add( currentPlugin );
+ }
+ }
+
+ pluginContainer.setPlugins( normalized );
+ }
+
+ /**
* This should be the resulting ordering of plugins after merging:
*
* Given:
Modified:
maven/components/branches/maven-2.0.x/maven-project/src/main/java/org/apache/maven/project/injection/DefaultProfileInjector.java
URL:
http://svn.apache.org/viewvc/maven/components/branches/maven-2.0.x/maven-project/src/main/java/org/apache/maven/project/injection/DefaultProfileInjector.java?rev=617326&r1=617325&r2=617326&view=diff
==============================================================================
---
maven/components/branches/maven-2.0.x/maven-project/src/main/java/org/apache/maven/project/injection/DefaultProfileInjector.java
(original)
+++
maven/components/branches/maven-2.0.x/maven-project/src/main/java/org/apache/maven/project/injection/DefaultProfileInjector.java
Thu Jan 31 17:54:15 2008
@@ -66,7 +66,8 @@
public void inject( Profile profile, Model model )
{
- injectDependencies( profile, model );
+
+ model.setDependencies( injectDependencies( profile.getDependencies(),
model.getDependencies() ) );
injectModules( profile, model );
@@ -213,6 +214,8 @@
modelPlugin.setVersion( profilePlugin.getVersion() );
}
+ modelPlugin.setDependencies( injectDependencies(
profilePlugin.getDependencies(), modelPlugin.getDependencies() ) );
+
// merge the lists of goals that are not attached to an <execution/>
injectConfigurationContainer( profilePlugin, modelPlugin );
@@ -590,33 +593,29 @@
recessive.flushReportSetMap();
}
- private void injectDependencies( Profile profile, Model model )
+ private List injectDependencies( List profileDeps, List modelDeps )
{
Map depsMap = new LinkedHashMap();
- List deps = model.getDependencies();
-
- if ( deps != null )
+ if ( modelDeps != null )
{
- for ( Iterator it = deps.iterator(); it.hasNext(); )
+ for ( Iterator it = modelDeps.iterator(); it.hasNext(); )
{
Dependency dependency = (Dependency) it.next();
depsMap.put( dependency.getManagementKey(), dependency );
}
}
- deps = profile.getDependencies();
-
- if ( deps != null )
+ if ( profileDeps != null )
{
- for ( Iterator it = deps.iterator(); it.hasNext(); )
+ for ( Iterator it = profileDeps.iterator(); it.hasNext(); )
{
Dependency dependency = (Dependency) it.next();
depsMap.put( dependency.getManagementKey(), dependency );
}
}
- model.setDependencies( new ArrayList( depsMap.values() ) );
+ return new ArrayList( depsMap.values() );
}
}
Modified:
maven/components/branches/maven-2.0.x/maven-project/src/test/java/org/apache/maven/project/injection/DefaultProfileInjectorTest.java
URL:
http://svn.apache.org/viewvc/maven/components/branches/maven-2.0.x/maven-project/src/test/java/org/apache/maven/project/injection/DefaultProfileInjectorTest.java?rev=617326&r1=617325&r2=617326&view=diff
==============================================================================
---
maven/components/branches/maven-2.0.x/maven-project/src/test/java/org/apache/maven/project/injection/DefaultProfileInjectorTest.java
(original)
+++
maven/components/branches/maven-2.0.x/maven-project/src/test/java/org/apache/maven/project/injection/DefaultProfileInjectorTest.java
Thu Jan 31 17:54:15 2008
@@ -35,10 +35,44 @@
import org.apache.maven.model.Profile;
import org.apache.maven.model.Repository;
import org.codehaus.plexus.util.xml.Xpp3Dom;
+import org.apache.maven.model.Dependency;
+
+import junit.framework.TestCase;
public class DefaultProfileInjectorTest
extends TestCase
{
+
+ public void
testShouldUseProfilePluginDependencyVersionOverMainPluginDepVersion()
+ {
+ PluginContainer profile = new PluginContainer();
+ Plugin profilePlugin = createPlugin( "group", "artifact", "1",
Collections.EMPTY_MAP );
+ Dependency profileDep = createDependency( "g", "a", "2" );
+ profilePlugin.addDependency( profileDep );
+ profile.addPlugin( profilePlugin );
+
+ PluginContainer model = new PluginContainer();
+ Plugin plugin = createPlugin( "group", "artifact", "1",
Collections.EMPTY_MAP );
+ Dependency dep = createDependency( "g", "a", "1" );
+ plugin.addDependency( dep );
+ model.addPlugin( plugin );
+
+ new DefaultProfileInjector().injectPlugins( profile, model );
+
+ assertEquals( profileDep.getVersion(), ((Dependency)
plugin.getDependencies().get( 0 ) ).getVersion() );
+ }
+
+ private Dependency createDependency( String gid,
+ String aid,
+ String ver )
+ {
+ Dependency dep = new Dependency();
+ dep.setGroupId( gid );
+ dep.setArtifactId( aid );
+ dep.setVersion( ver );
+
+ return dep;
+ }
/**
* Test that this is the resulting ordering of plugins after merging: