Author: jdcasey
Date: Thu Jan 31 17:53:21 2008
New Revision: 617325
URL: http://svn.apache.org/viewvc?rev=617325&view=rev
Log:
[MNG-2145] Correcting several merge issues between profiles and main build, and
also of duplicate plugin declarations within a single build section.
Modified:
maven/components/trunk/maven-project/src/main/java/org/apache/maven/profiles/injection/DefaultProfileInjector.java
maven/components/trunk/maven-project/src/main/java/org/apache/maven/project/DefaultMavenProjectBuilder.java
maven/components/trunk/maven-project/src/main/java/org/apache/maven/project/ModelUtils.java
maven/components/trunk/maven-project/src/test/java/org/apache/maven/profiles/injection/DefaultProfileInjectorTest.java
maven/components/trunk/maven-project/src/test/java/org/apache/maven/project/ModelUtilsTest.java
Modified:
maven/components/trunk/maven-project/src/main/java/org/apache/maven/profiles/injection/DefaultProfileInjector.java
URL:
http://svn.apache.org/viewvc/maven/components/trunk/maven-project/src/main/java/org/apache/maven/profiles/injection/DefaultProfileInjector.java?rev=617325&r1=617324&r2=617325&view=diff
==============================================================================
---
maven/components/trunk/maven-project/src/main/java/org/apache/maven/profiles/injection/DefaultProfileInjector.java
(original)
+++
maven/components/trunk/maven-project/src/main/java/org/apache/maven/profiles/injection/DefaultProfileInjector.java
Thu Jan 31 17:53:21 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/trunk/maven-project/src/main/java/org/apache/maven/project/DefaultMavenProjectBuilder.java
URL:
http://svn.apache.org/viewvc/maven/components/trunk/maven-project/src/main/java/org/apache/maven/project/DefaultMavenProjectBuilder.java?rev=617325&r1=617324&r2=617325&view=diff
==============================================================================
---
maven/components/trunk/maven-project/src/main/java/org/apache/maven/project/DefaultMavenProjectBuilder.java
(original)
+++
maven/components/trunk/maven-project/src/main/java/org/apache/maven/project/DefaultMavenProjectBuilder.java
Thu Jan 31 17:53:21 2008
@@ -739,6 +739,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/trunk/maven-project/src/main/java/org/apache/maven/project/ModelUtils.java
URL:
http://svn.apache.org/viewvc/maven/components/trunk/maven-project/src/main/java/org/apache/maven/project/ModelUtils.java?rev=617325&r1=617324&r2=617325&view=diff
==============================================================================
---
maven/components/trunk/maven-project/src/main/java/org/apache/maven/project/ModelUtils.java
(original)
+++
maven/components/trunk/maven-project/src/main/java/org/apache/maven/project/ModelUtils.java
Thu Jan 31 17:53:21 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/trunk/maven-project/src/test/java/org/apache/maven/profiles/injection/DefaultProfileInjectorTest.java
URL:
http://svn.apache.org/viewvc/maven/components/trunk/maven-project/src/test/java/org/apache/maven/profiles/injection/DefaultProfileInjectorTest.java?rev=617325&r1=617324&r2=617325&view=diff
==============================================================================
---
maven/components/trunk/maven-project/src/test/java/org/apache/maven/profiles/injection/DefaultProfileInjectorTest.java
(original)
+++
maven/components/trunk/maven-project/src/test/java/org/apache/maven/profiles/injection/DefaultProfileInjectorTest.java
Thu Jan 31 17:53:21 2008
@@ -19,16 +19,15 @@
* under the License.
*/
-import junit.framework.TestCase;
import org.apache.maven.model.Build;
import org.apache.maven.model.BuildBase;
+import org.apache.maven.model.Dependency;
import org.apache.maven.model.Model;
import org.apache.maven.model.Plugin;
import org.apache.maven.model.PluginContainer;
import org.apache.maven.model.PluginExecution;
import org.apache.maven.model.Profile;
import org.apache.maven.model.Repository;
-import org.apache.maven.profiles.injection.DefaultProfileInjector;
import org.codehaus.plexus.util.xml.Xpp3Dom;
import java.util.Collections;
@@ -36,9 +35,42 @@
import java.util.List;
import java.util.Map;
+import junit.framework.TestCase;
+
public class DefaultProfileInjectorTest
extends TestCase
{
+
+ public void testShouldUseMainPluginDependencyVersionOverManagedDepVersion()
+ {
+ 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:
Modified:
maven/components/trunk/maven-project/src/test/java/org/apache/maven/project/ModelUtilsTest.java
URL:
http://svn.apache.org/viewvc/maven/components/trunk/maven-project/src/test/java/org/apache/maven/project/ModelUtilsTest.java?rev=617325&r1=617324&r2=617325&view=diff
==============================================================================
---
maven/components/trunk/maven-project/src/test/java/org/apache/maven/project/ModelUtilsTest.java
(original)
+++
maven/components/trunk/maven-project/src/test/java/org/apache/maven/project/ModelUtilsTest.java
Thu Jan 31 17:53:21 2008
@@ -19,7 +19,6 @@
* under the License.
*/
-import junit.framework.TestCase;
import org.apache.maven.model.Build;
import org.apache.maven.model.Dependency;
import org.apache.maven.model.Plugin;
@@ -36,9 +35,38 @@
import java.util.List;
import java.util.Map;
+import junit.framework.TestCase;
+
public class ModelUtilsTest
extends TestCase
{
+
+ public void testShouldUseMainPluginDependencyVersionOverManagedDepVersion()
+ {
+ Plugin mgtPlugin = createPlugin( "group", "artifact", "1",
Collections.EMPTY_MAP );
+ Dependency mgtDep = createDependency( "g", "a", "2" );
+ mgtPlugin.addDependency( mgtDep );
+
+ Plugin plugin = createPlugin( "group", "artifact", "1",
Collections.EMPTY_MAP );
+ Dependency dep = createDependency( "g", "a", "1" );
+ plugin.addDependency( dep );
+
+ ModelUtils.mergePluginDefinitions( plugin, mgtPlugin, false );
+
+ assertEquals( dep.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;
+ }
public void testShouldNotInheritPluginWithInheritanceSetToFalse()
{