You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@maven.apache.org by jd...@apache.org on 2005/08/11 18:46:28 UTC

svn commit: r231481 - in /maven/components/trunk: maven-core-it/ maven-core-it/it0048/ maven-project/src/main/java/org/apache/maven/project/ maven-project/src/main/java/org/apache/maven/project/inheritance/ maven-project/src/main/java/org/apache/maven/...

Author: jdcasey
Date: Thu Aug 11 09:46:19 2005
New Revision: 231481

URL: http://svn.apache.org/viewcvs?rev=231481&view=rev
Log:
o Removed it0048, and replaced it with a unit test for the DefaultProfileInjector.
o Reverted the logic of the DefaultProfileInjector to merge-and-override the model, with the profile being dominant
o Added merging for distributionManagement and modules (conditionally, based on flag) in the modelBase merge
o Refactored the override logic into a couple of methods in ModelUtils to make it easier to understand what's going on here.
o Verified that both the build and the model itself are being merged correctly during profile injection, with profile dominance, but persistence of changes to the model.

Added:
    maven/components/trunk/maven-project/src/test/java/org/apache/maven/project/injection/DefaultProfileInjectorTest.java   (with props)
Removed:
    maven/components/trunk/maven-core-it/it0048/
Modified:
    maven/components/trunk/maven-core-it/README.txt
    maven/components/trunk/maven-core-it/integration-tests.txt
    maven/components/trunk/maven-project/src/main/java/org/apache/maven/project/ModelUtils.java
    maven/components/trunk/maven-project/src/main/java/org/apache/maven/project/inheritance/DefaultModelInheritanceAssembler.java
    maven/components/trunk/maven-project/src/main/java/org/apache/maven/project/injection/DefaultProfileInjector.java

Modified: maven/components/trunk/maven-core-it/README.txt
URL: http://svn.apache.org/viewcvs/maven/components/trunk/maven-core-it/README.txt?rev=231481&r1=231480&r2=231481&view=diff
==============================================================================
--- maven/components/trunk/maven-core-it/README.txt (original)
+++ maven/components/trunk/maven-core-it/README.txt Thu Aug 11 09:46:19 2005
@@ -134,7 +134,7 @@
 it0047: Test the use case for having a compile time dependency be transitive: when you extend a class you need its
         dependencies at compile time.
 
-it0048: Test profile overrides of values specified in the pom.
+it0048: REMOVED. REPLACED WITH UNIT TESTS IN maven-project.
 
 it0049: Test parameter alias usage.
 

Modified: maven/components/trunk/maven-core-it/integration-tests.txt
URL: http://svn.apache.org/viewcvs/maven/components/trunk/maven-core-it/integration-tests.txt?rev=231481&r1=231480&r2=231481&view=diff
==============================================================================
--- maven/components/trunk/maven-core-it/integration-tests.txt (original)
+++ maven/components/trunk/maven-core-it/integration-tests.txt Thu Aug 11 09:46:19 2005
@@ -1,5 +1,5 @@
 it0049
-it0048
+#it0048
 it0047
 it0046
 it0045

Modified: maven/components/trunk/maven-project/src/main/java/org/apache/maven/project/ModelUtils.java
URL: http://svn.apache.org/viewcvs/maven/components/trunk/maven-project/src/main/java/org/apache/maven/project/ModelUtils.java?rev=231481&r1=231480&r2=231481&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 Aug 11 09:46:19 2005
@@ -16,9 +16,11 @@
  * limitations under the License.
  */
 
+import org.apache.maven.model.Build;
 import org.apache.maven.model.BuildBase;
 import org.apache.maven.model.Dependency;
 import org.apache.maven.model.DependencyManagement;
+import org.apache.maven.model.DistributionManagement;
 import org.apache.maven.model.Goal;
 import org.apache.maven.model.Model;
 import org.apache.maven.model.ModelBase;
@@ -26,6 +28,7 @@
 import org.apache.maven.model.PluginContainer;
 import org.apache.maven.model.PluginExecution;
 import org.apache.maven.model.PluginManagement;
+import org.apache.maven.model.Profile;
 import org.apache.maven.model.ReportPlugin;
 import org.apache.maven.model.ReportSet;
 import org.apache.maven.model.Reporting;
@@ -277,18 +280,97 @@
         child.setConfiguration( childConfiguration );
     }
 
-    public static void mergeModelBases( ModelBase dominant, ModelBase recessive )
+    public static void mergeModelBases( ModelBase dominant, ModelBase recessive, boolean mergePathStructures )
     {
         mergeDependencies( dominant, recessive );
         
+        if ( mergePathStructures )
+        {
+            mergeModules( dominant, recessive );
+        }
+        
         dominant.setRepositories( mergeRepositoryLists( dominant.getRepositories(), recessive.getRepositories() ) );
         dominant.setPluginRepositories( mergeRepositoryLists( dominant.getPluginRepositories(), recessive.getPluginRepositories() ) );
         
         mergeReporting( dominant, recessive );
         
         mergeDependencyManagementSections( dominant, recessive );
+        
+        mergeDistributionManagementSections( dominant, recessive );
     }
     
+    private static void mergeModules( ModelBase dominant, ModelBase recessive )
+    {
+        List modules = new ArrayList();
+        
+        List dominantModules = dominant.getModules();
+        
+        if ( dominantModules != null && !dominantModules.isEmpty() )
+        {
+            modules.addAll( dominantModules );
+        }
+        
+        List recessiveModules = recessive.getModules();
+        
+        if ( recessiveModules != null )
+        {
+            for ( Iterator it = recessiveModules.iterator(); it.hasNext(); )
+            {
+                String module = (String) it.next();
+                
+                if ( !modules.contains( module ) )
+                {
+                    modules.add( module );
+                }
+            }
+        }
+        
+        dominant.setModules( modules );
+    }
+
+    private static void mergeDistributionManagementSections( ModelBase dominant, ModelBase recessive )
+    {
+        DistributionManagement dDistMgmt = dominant.getDistributionManagement();
+        DistributionManagement rDistMgmt = recessive.getDistributionManagement();
+        
+        if ( dDistMgmt == null )
+        {
+            dominant.setDistributionManagement( rDistMgmt );
+        }
+        else if ( rDistMgmt != null )
+        {
+            if ( dDistMgmt.getRepository() == null )
+            {
+                dDistMgmt.setRepository( rDistMgmt.getRepository() );
+            }
+            
+            if ( dDistMgmt.getSnapshotRepository() == null )
+            {
+                dDistMgmt.setSnapshotRepository( rDistMgmt.getSnapshotRepository() );
+            }
+            
+            if ( StringUtils.isEmpty( dDistMgmt.getDownloadUrl() ) )
+            {
+                dDistMgmt.setDownloadUrl( rDistMgmt.getDownloadUrl() );
+            }
+            
+            if ( dDistMgmt.getRelocation() == null )
+            {
+                dDistMgmt.setRelocation( rDistMgmt.getRelocation() );
+            }
+            
+            if ( dDistMgmt.getSite() == null )
+            {
+                dDistMgmt.setSite( rDistMgmt.getSite() );
+            }
+            
+            if ( dDistMgmt.getStatus() == null )
+            {
+                dDistMgmt.setStatus( rDistMgmt.getStatus() );
+            }
+        }
+    }
+
     private static List mergeRepositoryLists( List dominantRepositories, List recessiveRepositories )
     {
         List repositories = new ArrayList();
@@ -590,5 +672,29 @@
         newModel.setVersion( model.getVersion() );
         newModel.setArtifactId( model.getArtifactId() );
         return newModel;
+    }
+
+    public static void overrideModelBase( Model target, ModelBase overrides )
+    {
+        target.setDependencies( overrides.getDependencies() );
+        target.setDependencyManagement( overrides.getDependencyManagement() );
+        target.setDistributionManagement( overrides.getDistributionManagement() );
+        target.setModules( overrides.getModules() );
+        target.setPluginRepositories( overrides.getPluginRepositories() );
+        target.setReporting( overrides.getReporting() );
+        target.setRepositories( overrides.getRepositories() );
+    }
+
+    public static void overrideBuildBase( Build target, BuildBase overrides )
+    {
+        target.setDefaultGoal( overrides.getDefaultGoal() );
+        target.setFinalName( overrides.getFinalName() );
+        target.setPluginManagement( overrides.getPluginManagement() );
+        
+        target.setPlugins( overrides.getPlugins() );
+        target.flushPluginMap();
+        
+        target.setResources( overrides.getResources() );
+        target.setTestResources( overrides.getTestResources() );
     }
 }

Modified: maven/components/trunk/maven-project/src/main/java/org/apache/maven/project/inheritance/DefaultModelInheritanceAssembler.java
URL: http://svn.apache.org/viewcvs/maven/components/trunk/maven-project/src/main/java/org/apache/maven/project/inheritance/DefaultModelInheritanceAssembler.java?rev=231481&r1=231480&r2=231481&view=diff
==============================================================================
--- maven/components/trunk/maven-project/src/main/java/org/apache/maven/project/inheritance/DefaultModelInheritanceAssembler.java (original)
+++ maven/components/trunk/maven-project/src/main/java/org/apache/maven/project/inheritance/DefaultModelInheritanceAssembler.java Thu Aug 11 09:46:19 2005
@@ -142,7 +142,7 @@
         // Build
         assembleBuildInheritance( child, parent.getBuild() );
 
-        ModelUtils.mergeModelBases( child, parent );
+        ModelUtils.mergeModelBases( child, parent, false );
     }
 
     private void assembleBuildInheritance( Model child, Build parentBuild )

Modified: maven/components/trunk/maven-project/src/main/java/org/apache/maven/project/injection/DefaultProfileInjector.java
URL: http://svn.apache.org/viewcvs/maven/components/trunk/maven-project/src/main/java/org/apache/maven/project/injection/DefaultProfileInjector.java?rev=231481&r1=231480&r2=231481&view=diff
==============================================================================
--- maven/components/trunk/maven-project/src/main/java/org/apache/maven/project/injection/DefaultProfileInjector.java (original)
+++ maven/components/trunk/maven-project/src/main/java/org/apache/maven/project/injection/DefaultProfileInjector.java Thu Aug 11 09:46:19 2005
@@ -12,24 +12,21 @@
 
     public void inject( Profile profile, Model model )
     {
-        ModelUtils.mergeModelBases( model, profile );
-
+        // [jc 11-aug-2005] NOTE: the following merge-then-override procedure is used to preserve proper dominance 
+        // (profile wins), while ensuring that any changes are pushed to the model.
+        ModelUtils.mergeModelBases( profile, model, true );
+        
+        ModelUtils.overrideModelBase( model, profile );
+        
         BuildBase profileBuild = profile.getBuild();
+        
         if ( profileBuild != null )
         {
             ModelUtils.mergeBuildBases( profile.getBuild(), model.getBuild() );
             
             Build modelBuild = model.getBuild();
             
-            modelBuild.setDefaultGoal( profileBuild.getDefaultGoal() );
-            modelBuild.setFinalName( profileBuild.getFinalName() );
-            modelBuild.setPluginManagement( profileBuild.getPluginManagement() );
-            
-            modelBuild.setPlugins( profileBuild.getPlugins() );
-            modelBuild.flushPluginMap();
-            
-            modelBuild.setResources( profileBuild.getResources() );
-            modelBuild.setTestResources( profileBuild.getTestResources() );
+            ModelUtils.overrideBuildBase( modelBuild, profileBuild );
         }
     }
 

Added: maven/components/trunk/maven-project/src/test/java/org/apache/maven/project/injection/DefaultProfileInjectorTest.java
URL: http://svn.apache.org/viewcvs/maven/components/trunk/maven-project/src/test/java/org/apache/maven/project/injection/DefaultProfileInjectorTest.java?rev=231481&view=auto
==============================================================================
--- maven/components/trunk/maven-project/src/test/java/org/apache/maven/project/injection/DefaultProfileInjectorTest.java (added)
+++ maven/components/trunk/maven-project/src/test/java/org/apache/maven/project/injection/DefaultProfileInjectorTest.java Thu Aug 11 09:46:19 2005
@@ -0,0 +1,117 @@
+package org.apache.maven.project.injection;
+
+import org.apache.maven.model.Build;
+import org.apache.maven.model.BuildBase;
+import org.apache.maven.model.Model;
+import org.apache.maven.model.Plugin;
+import org.apache.maven.model.Profile;
+import org.apache.maven.model.Repository;
+import org.codehaus.plexus.configuration.xml.XmlPlexusConfiguration;
+import org.codehaus.plexus.util.xml.Xpp3Dom;
+
+import java.util.List;
+
+import junit.framework.TestCase;
+
+public class DefaultProfileInjectorTest
+    extends TestCase
+{
+    
+    public void testProfilePluginConfigurationShouldOverrideModelPluginConfiguration()
+    {
+        Plugin mPlugin = new Plugin();
+        mPlugin.setGroupId("test");
+        mPlugin.setArtifactId("test-artifact");
+        mPlugin.setVersion("1.0-SNAPSHOT");
+        
+        Xpp3Dom mConfigChild = new Xpp3Dom("test");
+        mConfigChild.setValue("value");
+        
+        Xpp3Dom mConfig = new Xpp3Dom("configuration");
+        mConfig.addChild( mConfigChild );
+        
+        mPlugin.setConfiguration(mConfig);
+        
+        Build mBuild = new Build();
+        mBuild.addPlugin(mPlugin);
+        
+        Model model = new Model();
+        model.setBuild(mBuild);
+        
+        Plugin pPlugin = new Plugin();
+        pPlugin.setGroupId("test");
+        pPlugin.setArtifactId("test-artifact");
+        pPlugin.setVersion("1.0-SNAPSHOT");
+        
+        Xpp3Dom pConfigChild = new Xpp3Dom("test");
+        pConfigChild.setValue("replacedValue");
+        
+        Xpp3Dom pConfig = new Xpp3Dom("configuration");
+        pConfig.addChild( pConfigChild );
+        
+        pPlugin.setConfiguration(pConfig);
+        
+        BuildBase pBuild = new BuildBase();
+        pBuild.addPlugin(pPlugin);
+        
+        Profile profile = new Profile();
+        profile.setId("testId");
+        
+        profile.setBuild(pBuild);
+        
+        new DefaultProfileInjector().inject(profile, model);
+        
+        Build rBuild = model.getBuild();
+        Plugin rPlugin = (Plugin) rBuild.getPlugins().get(0);
+        Xpp3Dom rConfig = (Xpp3Dom) rPlugin.getConfiguration();
+        
+        Xpp3Dom rChild = rConfig.getChild("test");
+        
+        assertEquals("replacedValue", rChild.getValue());
+    }
+
+    public void testProfileRepositoryShouldOverrideModelRepository()
+    {
+        Repository mRepository = new Repository();
+        mRepository.setId("testId");
+        mRepository.setName("Test repository");
+        mRepository.setUrl("http://www.google.com");
+        
+        Model model = new Model();
+        model.addRepository(mRepository);
+        
+        Repository pRepository = new Repository();
+        pRepository.setId("testId");
+        pRepository.setName("Test repository");
+        pRepository.setUrl("http://www.yahoo.com");
+        
+        Profile profile = new Profile();
+        profile.setId("testId");
+        
+        profile.addRepository(pRepository);
+        
+        new DefaultProfileInjector().inject(profile, model);
+        
+        Repository rRepository = (Repository) model.getRepositories().get(0);
+        
+        assertEquals("http://www.yahoo.com", rRepository.getUrl());
+    }
+
+    public void testShouldPreserveModelModulesWhenProfileHasNone()
+    {
+        Model model = new Model();
+        
+        model.addModule("module1");
+        
+        Profile profile = new Profile();
+        profile.setId("testId");
+        
+        new DefaultProfileInjector().inject(profile, model);
+        
+        List rModules = model.getModules();
+        
+        assertEquals( 1, rModules.size());
+        assertEquals("module1", rModules.get(0));
+    }
+
+}

Propchange: maven/components/trunk/maven-project/src/test/java/org/apache/maven/project/injection/DefaultProfileInjectorTest.java
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: maven/components/trunk/maven-project/src/test/java/org/apache/maven/project/injection/DefaultProfileInjectorTest.java
------------------------------------------------------------------------------
    svn:keywords = "Author Date Id Revision"



---------------------------------------------------------------------
To unsubscribe, e-mail: dev-unsubscribe@maven.apache.org
For additional commands, e-mail: dev-help@maven.apache.org