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