You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@maven.apache.org by be...@apache.org on 2009/02/18 21:47:43 UTC
svn commit: r745642 - in /maven/components/trunk:
maven-mercury/src/main/java/org/apache/maven/mercury/
maven-project-builder/src/main/java/org/apache/maven/project/builder/profile/
maven-project-builder/src/test/java/org/apache/maven/project/builder/p...
Author: bentmann
Date: Wed Feb 18 20:47:42 2009
New Revision: 745642
URL: http://svn.apache.org/viewvc?rev=745642&view=rev
Log:
o Fixed regressions regarding profile de-/activation
Modified:
maven/components/trunk/maven-mercury/src/main/java/org/apache/maven/mercury/MavenDomainModel.java
maven/components/trunk/maven-project-builder/src/main/java/org/apache/maven/project/builder/profile/ProfileContext.java
maven/components/trunk/maven-project-builder/src/test/java/org/apache/maven/project/builder/profile/ProfileContextTest.java
maven/components/trunk/maven-project/src/main/java/org/apache/maven/profiles/DefaultProfileManager.java
maven/components/trunk/maven-project/src/main/java/org/apache/maven/project/builder/impl/DefaultProjectBuilder.java
Modified: maven/components/trunk/maven-mercury/src/main/java/org/apache/maven/mercury/MavenDomainModel.java
URL: http://svn.apache.org/viewvc/maven/components/trunk/maven-mercury/src/main/java/org/apache/maven/mercury/MavenDomainModel.java?rev=745642&r1=745641&r2=745642&view=diff
==============================================================================
--- maven/components/trunk/maven-mercury/src/main/java/org/apache/maven/mercury/MavenDomainModel.java (original)
+++ maven/components/trunk/maven-mercury/src/main/java/org/apache/maven/mercury/MavenDomainModel.java Wed Feb 18 20:47:42 2009
@@ -30,7 +30,6 @@
import org.apache.maven.mercury.artifact.ArtifactBasicMetadata;
import org.apache.maven.project.builder.ArtifactModelContainerFactory;
import org.apache.maven.project.builder.ExclusionModelContainerFactory;
-import org.apache.maven.project.builder.IdModelContainerFactory;
import org.apache.maven.project.builder.PomTransformer;
import org.apache.maven.project.builder.ProjectUri;
import org.apache.maven.project.builder.profile.ProfileContext;
@@ -125,7 +124,7 @@
{
ModelDataSource dataSource = new DefaultModelDataSource( modelProperties, PomTransformer.MODEL_CONTAINER_FACTORIES );
- return new ProfileContext( dataSource, null, properties ).getActiveProfiles();
+ return new ProfileContext( dataSource, null, null, properties ).getActiveProfiles();
}
public ArtifactBasicMetadata getParentMetadata()
Modified: maven/components/trunk/maven-project-builder/src/main/java/org/apache/maven/project/builder/profile/ProfileContext.java
URL: http://svn.apache.org/viewvc/maven/components/trunk/maven-project-builder/src/main/java/org/apache/maven/project/builder/profile/ProfileContext.java?rev=745642&r1=745641&r2=745642&view=diff
==============================================================================
--- maven/components/trunk/maven-project-builder/src/main/java/org/apache/maven/project/builder/profile/ProfileContext.java (original)
+++ maven/components/trunk/maven-project-builder/src/main/java/org/apache/maven/project/builder/profile/ProfileContext.java Wed Feb 18 20:47:42 2009
@@ -14,37 +14,64 @@
private Collection<String> activeProfileIds;
- List<ActiveProfileMatcher> matchers = Collections.unmodifiableList( Arrays.asList(new ByDefaultMatcher(),
+ private Collection<String> inactiveProfileIds;
+
+ private ActiveProfileMatcher defaultMatcher = new ByDefaultMatcher();
+
+ private List<ActiveProfileMatcher> matchers = Collections.unmodifiableList( Arrays.asList(
new FileMatcher(), new JdkMatcher(), new OperatingSystemMatcher(), new PropertyMatcher()
) );
- public ProfileContext(ModelDataSource modelDataSource, Collection<String> activeProfileIds,
- List<InterpolatorProperty> properties) {
+ public ProfileContext( ModelDataSource modelDataSource, Collection<String> activeProfileIds,
+ Collection<String> inactiveProfileIds, List<InterpolatorProperty> properties )
+ {
this.modelDataSource = modelDataSource;
- this.properties = new ArrayList<InterpolatorProperty>(properties);
- this.activeProfileIds = (activeProfileIds != null) ? activeProfileIds : new ArrayList<String>();
+ this.properties = new ArrayList<InterpolatorProperty>( properties );
+ this.activeProfileIds = ( activeProfileIds != null ) ? activeProfileIds : new ArrayList<String>();
+ this.inactiveProfileIds = ( inactiveProfileIds != null ) ? inactiveProfileIds : new ArrayList<String>();
}
- public Collection<ModelContainer> getActiveProfiles() throws DataSourceException {
+ public Collection<ModelContainer> getActiveProfiles()
+ throws DataSourceException
+ {
List<ModelContainer> matchedContainers = new ArrayList<ModelContainer>();
+ List<ModelContainer> defaultContainers = new ArrayList<ModelContainer>();
- List<ModelContainer> modelContainers = modelDataSource.queryFor(ProjectUri.Profiles.Profile.xUri);
- for(ModelContainer mc : modelContainers) {
- for(ActiveProfileMatcher matcher : matchers) {
- if(matcher.isMatch(mc, properties)) {
- matchedContainers.add(mc);
- continue;
- }
- }
+ List<ModelContainer> modelContainers = modelDataSource.queryFor( ProjectUri.Profiles.Profile.xUri );
+ for ( ModelContainer mc : modelContainers )
+ {
+ String profileId = getProfileId( mc.getProperties() );
- String profileId = getProfileId(mc.getProperties());
- if(profileId != null && activeProfileIds.contains(profileId))
+ if ( !inactiveProfileIds.contains( profileId ) )
{
- matchedContainers.add(mc);
+ if ( activeProfileIds.contains( profileId ) )
+ {
+ matchedContainers.add( mc );
+ }
+ else if ( defaultMatcher.isMatch( mc, properties ) )
+ {
+ defaultContainers.add( mc );
+ }
+ else
+ {
+ for ( ActiveProfileMatcher matcher : matchers )
+ {
+ if ( matcher.isMatch( mc, properties ) )
+ {
+ matchedContainers.add( mc );
+ break;
+ }
+ }
+ }
}
}
- return matchedContainers;
+ if ( matchedContainers.isEmpty() )
+ {
+ matchedContainers = defaultContainers;
+ }
+
+ return matchedContainers;
}
private String getProfileId(List<ModelProperty> modelProperties)
Modified: maven/components/trunk/maven-project-builder/src/test/java/org/apache/maven/project/builder/profile/ProfileContextTest.java
URL: http://svn.apache.org/viewvc/maven/components/trunk/maven-project-builder/src/test/java/org/apache/maven/project/builder/profile/ProfileContextTest.java?rev=745642&r1=745641&r2=745642&view=diff
==============================================================================
--- maven/components/trunk/maven-project-builder/src/test/java/org/apache/maven/project/builder/profile/ProfileContextTest.java (original)
+++ maven/components/trunk/maven-project-builder/src/test/java/org/apache/maven/project/builder/profile/ProfileContextTest.java Wed Feb 18 20:47:42 2009
@@ -3,14 +3,14 @@
import org.apache.maven.project.builder.profile.ProfileContext;
import org.apache.maven.project.builder.PomTransformer;
import org.apache.maven.project.builder.ProjectUri;
-import org.apache.maven.project.builder.ArtifactModelContainerFactory;
-import org.apache.maven.project.builder.IdModelContainerFactory;
import org.apache.maven.shared.model.DataSourceException;
import org.apache.maven.shared.model.InterpolatorProperty;
import org.apache.maven.shared.model.ModelContainer;
import org.apache.maven.shared.model.ModelProperty;
import org.apache.maven.shared.model.impl.DefaultModelDataSource;
-import static org.junit.Assert.assertTrue;
+import org.junit.Test;
+
+import static org.junit.Assert.*;
import java.util.ArrayList;
import java.util.Arrays;
@@ -19,7 +19,7 @@
public class ProfileContextTest {
- @org.junit.Test
+ @Test
public void getActiveProfiles() throws DataSourceException {
List<ModelProperty> modelProperties = new ArrayList<ModelProperty>();
modelProperties.add(new ModelProperty(ProjectUri.xUri, null));
@@ -35,7 +35,7 @@
List<InterpolatorProperty> interpolatorProperties = new ArrayList<InterpolatorProperty>();
interpolatorProperties.add(new InterpolatorProperty( "${foo}", "bar"));
- ProfileContext ctx = new ProfileContext(dataSource, null, interpolatorProperties);
+ ProfileContext ctx = new ProfileContext(dataSource, null, null, interpolatorProperties);
Collection<ModelContainer> profiles = ctx.getActiveProfiles();
@@ -43,7 +43,7 @@
}
- @org.junit.Test
+ @Test
public void getActiveProfilesById() throws DataSourceException {
List<ModelProperty> modelProperties = new ArrayList<ModelProperty>();
modelProperties.add(new ModelProperty(ProjectUri.xUri, null));
@@ -55,11 +55,75 @@
List<InterpolatorProperty> interpolatorProperties = new ArrayList<InterpolatorProperty>();
- ProfileContext ctx = new ProfileContext(dataSource, Arrays.asList("test"), interpolatorProperties);
+ ProfileContext ctx = new ProfileContext(dataSource, Arrays.asList("test"), null, interpolatorProperties);
Collection<ModelContainer> profiles = ctx.getActiveProfiles();
assertTrue(profiles.size() == 1);
}
+
+ @Test
+ public void getActiveByDefaultProfilesOnlyActivatedIfNoOtherPomProfilesAreActive()
+ throws DataSourceException
+ {
+ List<ModelProperty> modelProperties = new ArrayList<ModelProperty>();
+ modelProperties.add( new ModelProperty( ProjectUri.xUri, null ) );
+ modelProperties.add( new ModelProperty( ProjectUri.Profiles.xUri, null ) );
+ modelProperties.add( new ModelProperty( ProjectUri.Profiles.Profile.xUri, null ) );
+ modelProperties.add( new ModelProperty( ProjectUri.Profiles.Profile.id, "default" ) );
+ modelProperties.add( new ModelProperty( ProjectUri.Profiles.Profile.Activation.xUri, null ) );
+ modelProperties.add( new ModelProperty( ProjectUri.Profiles.Profile.Activation.activeByDefault, "true" ) );
+ modelProperties.add( new ModelProperty( ProjectUri.Profiles.Profile.xUri, null ) );
+ modelProperties.add( new ModelProperty( ProjectUri.Profiles.Profile.id, "explicit" ) );
+
+ DefaultModelDataSource dataSource =
+ new DefaultModelDataSource( modelProperties, PomTransformer.MODEL_CONTAINER_FACTORIES );
+
+ List<InterpolatorProperty> interpolatorProperties = new ArrayList<InterpolatorProperty>();
+
+ ProfileContext ctx = new ProfileContext( dataSource, Arrays.asList( "explicit" ), null, interpolatorProperties );
+
+ Collection<ModelContainer> profiles = ctx.getActiveProfiles();
+
+ assertEquals( 1, profiles.size() );
+ assertProperty( profiles.iterator().next().getProperties(), ProjectUri.Profiles.Profile.id, "explicit" );
+ }
+
+ @Test
+ public void getDeactivateProfiles()
+ throws DataSourceException
+ {
+ List<ModelProperty> modelProperties = new ArrayList<ModelProperty>();
+ modelProperties.add( new ModelProperty( ProjectUri.xUri, null ) );
+ modelProperties.add( new ModelProperty( ProjectUri.Profiles.xUri, null ) );
+ modelProperties.add( new ModelProperty( ProjectUri.Profiles.Profile.xUri, null ) );
+ modelProperties.add( new ModelProperty( ProjectUri.Profiles.Profile.id, "default" ) );
+ modelProperties.add( new ModelProperty( ProjectUri.Profiles.Profile.Activation.xUri, null ) );
+ modelProperties.add( new ModelProperty( ProjectUri.Profiles.Profile.Activation.activeByDefault, "true" ) );
+
+ DefaultModelDataSource dataSource =
+ new DefaultModelDataSource( modelProperties, PomTransformer.MODEL_CONTAINER_FACTORIES );
+
+ List<InterpolatorProperty> interpolatorProperties = new ArrayList<InterpolatorProperty>();
+
+ ProfileContext ctx = new ProfileContext( dataSource, null, Arrays.asList( "default" ), interpolatorProperties );
+
+ Collection<ModelContainer> profiles = ctx.getActiveProfiles();
+
+ assertEquals( 0, profiles.size() );
+ }
+
+ private void assertProperty( Collection<ModelProperty> properties, String uri, String value )
+ {
+ for ( ModelProperty property : properties )
+ {
+ if ( uri.equals( property.getUri() ) && value.equals( property.getValue() ) )
+ {
+ return;
+ }
+ }
+ fail( "missing model property " + uri + " = " + value );
+ }
+
}
Modified: maven/components/trunk/maven-project/src/main/java/org/apache/maven/profiles/DefaultProfileManager.java
URL: http://svn.apache.org/viewvc/maven/components/trunk/maven-project/src/main/java/org/apache/maven/profiles/DefaultProfileManager.java?rev=745642&r1=745641&r2=745642&view=diff
==============================================================================
--- maven/components/trunk/maven-project/src/main/java/org/apache/maven/profiles/DefaultProfileManager.java (original)
+++ maven/components/trunk/maven-project/src/main/java/org/apache/maven/profiles/DefaultProfileManager.java Wed Feb 18 20:47:42 2009
@@ -181,6 +181,7 @@
return getActiveProfiles( null );
}
+ // TODO: Portions of this logic are duplicated in o.a.m.p.b.p.ProfileContext, something is wrong here
public List getActiveProfiles( Model model )
throws ProfileActivationException
{
Modified: maven/components/trunk/maven-project/src/main/java/org/apache/maven/project/builder/impl/DefaultProjectBuilder.java
URL: http://svn.apache.org/viewvc/maven/components/trunk/maven-project/src/main/java/org/apache/maven/project/builder/impl/DefaultProjectBuilder.java?rev=745642&r1=745641&r2=745642&view=diff
==============================================================================
--- maven/components/trunk/maven-project/src/main/java/org/apache/maven/project/builder/impl/DefaultProjectBuilder.java (original)
+++ maven/components/trunk/maven-project/src/main/java/org/apache/maven/project/builder/impl/DefaultProjectBuilder.java Wed Feb 18 20:47:42 2009
@@ -26,14 +26,12 @@
import java.util.*;
import org.apache.maven.MavenTools;
-import org.apache.maven.profiles.activation.ProfileActivationContext;
import org.apache.maven.mercury.PomProcessor;
import org.apache.maven.mercury.PomProcessorException;
import org.apache.maven.mercury.MavenDomainModel;
import org.apache.maven.mercury.MavenDomainModelFactory;
import org.apache.maven.mercury.builder.api.MetadataReader;
import org.apache.maven.mercury.builder.api.MetadataReaderException;
-import org.apache.maven.mercury.builder.api.DependencyProcessorException;
import org.apache.maven.mercury.artifact.ArtifactBasicMetadata;
import org.apache.maven.artifact.Artifact;
import org.apache.maven.artifact.InvalidRepositoryException;
@@ -48,7 +46,6 @@
import org.apache.maven.project.builder.*;
import org.apache.maven.project.builder.ProjectUri;
import org.apache.maven.project.builder.profile.ProfileContext;
-import org.apache.maven.project.builder.profile.ProfileUri;
import org.apache.maven.shared.model.*;
import org.apache.maven.shared.model.impl.DefaultModelDataSource;
import org.codehaus.plexus.component.annotations.Component;
@@ -166,13 +163,13 @@
PomArtifactResolver resolver )
throws IOException
{
- return buildModel( pom, null, interpolatorProperties, null, resolver );
+ return buildModel( pom, null, interpolatorProperties, null, null, resolver );
}
private PomClassicDomainModel buildModel( File pom,
List<Model> mixins,
Collection<InterpolatorProperty> interpolatorProperties,
- Collection<String> activeProfileIds,
+ Collection<String> activeProfileIds, Collection<String> inactiveProfileIds,
PomArtifactResolver resolver )
throws IOException
{
@@ -201,6 +198,10 @@
{
activeProfileIds = new ArrayList<String>();
}
+ if ( inactiveProfileIds == null )
+ {
+ inactiveProfileIds = new ArrayList<String>();
+ }
List<InterpolatorProperty> properties;
if ( interpolatorProperties == null )
@@ -219,7 +220,7 @@
//Process Profile on most specialized child model
ProfileContext profileContext = new ProfileContext(new DefaultModelDataSource(domainModel.getModelProperties(),
- PomTransformer.MODEL_CONTAINER_FACTORIES), activeProfileIds, properties);
+ PomTransformer.MODEL_CONTAINER_FACTORIES), activeProfileIds, inactiveProfileIds, properties);
Collection<ModelContainer> profileContainers = profileContext.getActiveProfiles();
@@ -246,11 +247,15 @@
List<DomainModel> mavenParents;
if ( isParentLocal( domainModel.getModel().getParent(), pom.getParentFile() ) )
{
- mavenParents = getDomainModelParentsFromLocalPath( domainModel, resolver, pom.getParentFile(), properties, activeProfileIds );
+ mavenParents =
+ getDomainModelParentsFromLocalPath( domainModel, resolver, pom.getParentFile(), properties,
+ activeProfileIds, inactiveProfileIds );
}
else
{
- mavenParents = getDomainModelParentsFromRepository( domainModel, resolver, properties, activeProfileIds );
+ mavenParents =
+ getDomainModelParentsFromRepository( domainModel, resolver, properties, activeProfileIds,
+ inactiveProfileIds );
}
if ( mavenParents.size() > 0 )
@@ -295,16 +300,20 @@
throws IOException
{
- List<String> profileIds = (projectBuilderConfiguration != null &&
+ List<String> activeProfileIds = (projectBuilderConfiguration != null &&
projectBuilderConfiguration.getGlobalProfileManager() != null &&
projectBuilderConfiguration.getGlobalProfileManager().getProfileActivationContext() != null) ?
projectBuilderConfiguration.getGlobalProfileManager().getProfileActivationContext().getExplicitlyActiveProfileIds() : new ArrayList<String>();
+ List<String> inactiveProfileIds =
+ ( projectBuilderConfiguration != null && projectBuilderConfiguration.getGlobalProfileManager() != null &&
+ projectBuilderConfiguration.getGlobalProfileManager().getProfileActivationContext() != null ) ?
+ projectBuilderConfiguration.getGlobalProfileManager().getProfileActivationContext().getExplicitlyInactiveProfileIds() : new ArrayList<String>();
PomClassicDomainModel domainModel = buildModel( pom,
mixins,
interpolatorProperties,
- profileIds,
+ activeProfileIds, inactiveProfileIds,
resolver );
try
@@ -354,7 +363,8 @@
private List<DomainModel> getDomainModelParentsFromRepository( PomClassicDomainModel domainModel,
PomArtifactResolver artifactResolver,
List<InterpolatorProperty> properties,
- Collection<String> activeProfileIds)
+ Collection<String> activeProfileIds,
+ Collection<String> inactiveProfileIds )
throws IOException
{
List<DomainModel> domainModels = new ArrayList<DomainModel>();
@@ -383,7 +393,7 @@
//Process Profiles
ProfileContext profileContext = new ProfileContext(new DefaultModelDataSource(parentDomainModel.getModelProperties(),
- PomTransformer.MODEL_CONTAINER_FACTORIES), activeProfileIds, properties);
+ PomTransformer.MODEL_CONTAINER_FACTORIES), activeProfileIds, inactiveProfileIds, properties);
Collection<ModelContainer> profileContainers = profileContext.getActiveProfiles();
for(ModelContainer mc : profileContainers)
@@ -403,7 +413,8 @@
domainModels.add(new PomClassicDomainModel(transformed));
}
- domainModels.addAll( getDomainModelParentsFromRepository( parentDomainModel, artifactResolver, properties, activeProfileIds ) );
+ domainModels.addAll( getDomainModelParentsFromRepository( parentDomainModel, artifactResolver, properties,
+ activeProfileIds, inactiveProfileIds ) );
return domainModels;
}
@@ -420,7 +431,8 @@
PomArtifactResolver artifactResolver,
File projectDirectory,
List<InterpolatorProperty> properties,
- Collection<String> activeProfileIds)
+ Collection<String> activeProfileIds,
+ Collection<String> inactiveProfileIds )
throws IOException
{
List<DomainModel> domainModels = new ArrayList<DomainModel>();
@@ -450,7 +462,7 @@
//Process Profiles
ProfileContext profileContext = new ProfileContext(new DefaultModelDataSource(parentDomainModel.getModelProperties(),
- PomTransformer.MODEL_CONTAINER_FACTORIES), activeProfileIds, properties);
+ PomTransformer.MODEL_CONTAINER_FACTORIES), activeProfileIds, inactiveProfileIds, properties);
Collection<ModelContainer> profileContainers = profileContext.getActiveProfiles();
for(ModelContainer mc : profileContainers)
@@ -475,7 +487,9 @@
+ parentDomainModel.getId() + ", Child ID = " + domainModel.getId() + ", Expected Parent ID = "
+ domainModel.getModel().getParent().getId() );
- List<DomainModel> parentDomainModels = getDomainModelParentsFromRepository( domainModel, artifactResolver, properties, activeProfileIds );
+ List<DomainModel> parentDomainModels =
+ getDomainModelParentsFromRepository( domainModel, artifactResolver, properties, activeProfileIds,
+ inactiveProfileIds );
if(parentDomainModels.size() == 0)
{
@@ -493,11 +507,14 @@
if ( isParentLocal( parentDomainModel.getModel().getParent(), parentFile.getParentFile() ) )
{
domainModels.addAll( getDomainModelParentsFromLocalPath( parentDomainModel, artifactResolver,
- parentFile.getParentFile(), properties, activeProfileIds ) );
+ parentFile.getParentFile(), properties,
+ activeProfileIds, inactiveProfileIds ) );
}
else
{
- domainModels.addAll( getDomainModelParentsFromRepository( parentDomainModel, artifactResolver, properties, activeProfileIds ) );
+ domainModels.addAll( getDomainModelParentsFromRepository( parentDomainModel, artifactResolver,
+ properties, activeProfileIds,
+ inactiveProfileIds ) );
}
}