Author: bentmann Date: Sun Jun 21 16:06:02 2009 New Revision: 787045 URL: http://svn.apache.org/viewvc?rev=787045&view=rev Log: [MNG-3641] Lack of error checks on profiles
Modified: maven/components/trunk/maven-core/src/main/java/org/apache/maven/DefaultMaven.java maven/components/trunk/maven-core/src/main/java/org/apache/maven/project/DefaultProjectBuilder.java maven/components/trunk/maven-core/src/main/java/org/apache/maven/project/MavenProject.java Modified: maven/components/trunk/maven-core/src/main/java/org/apache/maven/DefaultMaven.java URL: http://svn.apache.org/viewvc/maven/components/trunk/maven-core/src/main/java/org/apache/maven/DefaultMaven.java?rev=787045&r1=787044&r2=787045&view=diff ============================================================================== --- maven/components/trunk/maven-core/src/main/java/org/apache/maven/DefaultMaven.java (original) +++ maven/components/trunk/maven-core/src/main/java/org/apache/maven/DefaultMaven.java Sun Jun 21 16:06:02 2009 @@ -20,9 +20,11 @@ import java.text.SimpleDateFormat; import java.util.ArrayList; import java.util.Arrays; +import java.util.Collection; import java.util.Date; import java.util.HashMap; import java.util.LinkedHashMap; +import java.util.LinkedHashSet; import java.util.List; import java.util.Map; @@ -44,6 +46,7 @@ import org.codehaus.plexus.PlexusContainer; import org.codehaus.plexus.component.annotations.Component; import org.codehaus.plexus.component.annotations.Requirement; +import org.codehaus.plexus.logging.Logger; import org.codehaus.plexus.util.Os; import org.codehaus.plexus.util.StringUtils; import org.codehaus.plexus.util.dag.CycleDetectedException; @@ -55,6 +58,10 @@ public class DefaultMaven implements Maven { + + @Requirement + private Logger logger; + @Requirement protected ProjectBuilder projectBuilder; @@ -140,7 +147,9 @@ } lifecycleExecutor.execute( session ); - + + validateActivatedProfiles( session.getProjects(), request.getActiveProfiles() ); + if ( session.getResult().hasExceptions() ) { return processResult( result, session.getResult().getExceptions().get( 0 ) ); @@ -246,4 +255,23 @@ return projects; } + + private void validateActivatedProfiles( List<MavenProject> projects, List<String> activeProfileIds ) + { + Collection<String> notActivatedProfileIds = new LinkedHashSet<String>( activeProfileIds ); + + for ( MavenProject project : projects ) + { + for ( List<String> profileIds : project.getInjectedProfileIds().values() ) + { + notActivatedProfileIds.removeAll( profileIds ); + } + } + + for ( String notActivatedProfileId : notActivatedProfileIds ) + { + logger.warn( "Profile with id \"" + notActivatedProfileId + "\" has not been activated." ); + } + } + } Modified: maven/components/trunk/maven-core/src/main/java/org/apache/maven/project/DefaultProjectBuilder.java URL: http://svn.apache.org/viewvc/maven/components/trunk/maven-core/src/main/java/org/apache/maven/project/DefaultProjectBuilder.java?rev=787045&r1=787044&r2=787045&view=diff ============================================================================== --- maven/components/trunk/maven-core/src/main/java/org/apache/maven/project/DefaultProjectBuilder.java (original) +++ maven/components/trunk/maven-core/src/main/java/org/apache/maven/project/DefaultProjectBuilder.java Sun Jun 21 16:06:02 2009 @@ -133,10 +133,28 @@ activeProfiles.addAll( result.getActivePomProfiles( result.getModelIds().get( 0 ) ) ); activeProfiles.addAll( result.getActiveExternalProfiles() ); project.setActiveProfiles( activeProfiles ); - + + project.setInjectedProfileIds( "external", getProfileIds( result.getActiveExternalProfiles() ) ); + for ( String modelId : result.getModelIds() ) + { + project.setInjectedProfileIds( modelId, getProfileIds( result.getActivePomProfiles( modelId ) ) ); + } + return project; } + private List<String> getProfileIds( List<Profile> profiles ) + { + List<String> ids = new ArrayList<String>( profiles.size() ); + + for ( Profile profile : profiles ) + { + ids.add( profile.getId() ); + } + + return ids; + } + private ModelBuildingRequest getModelBuildingRequest( ProjectBuildingRequest configuration ) { ModelResolver resolver = Modified: maven/components/trunk/maven-core/src/main/java/org/apache/maven/project/MavenProject.java URL: http://svn.apache.org/viewvc/maven/components/trunk/maven-core/src/main/java/org/apache/maven/project/MavenProject.java?rev=787045&r1=787044&r2=787045&view=diff ============================================================================== --- maven/components/trunk/maven-core/src/main/java/org/apache/maven/project/MavenProject.java (original) +++ maven/components/trunk/maven-core/src/main/java/org/apache/maven/project/MavenProject.java Sun Jun 21 16:06:02 2009 @@ -25,6 +25,7 @@ import java.util.HashMap; import java.util.HashSet; import java.util.Iterator; +import java.util.LinkedHashMap; import java.util.LinkedHashSet; import java.util.List; import java.util.Map; @@ -125,6 +126,8 @@ private List<Profile> activeProfiles = new ArrayList<Profile>(); + private Map<String, List<String>> injectedProfileIds = new LinkedHashMap<String, List<String>>(); + private Set<Artifact> dependencyArtifacts; private Artifact artifact; @@ -1411,6 +1414,33 @@ return activeProfiles; } + public void setInjectedProfileIds( String source, List<String> injectedProfileIds ) + { + if ( injectedProfileIds != null ) + { + this.injectedProfileIds.put( source, new ArrayList<String>( injectedProfileIds ) ); + } + else + { + this.injectedProfileIds.remove( source ); + } + } + + /** + * Gets the identifiers of all profiles that contributed to this project's effective model. This includes active + * profiles from the project's POM and all its parent POMs as well as from external sources like the {...@code + * settings.xml}. The profile identifiers are grouped by the identifier of their source, e.g. {...@code + * <groupId>:<artifactId>:<version>} for a POM profile or {...@code external} for profiles from the {...@code + * settings.xml}. + * + * @return The identifiers of all injected profiles, indexed by the source from which the profiles originated, never + * {...@code null}. + */ + public Map<String, List<String>> getInjectedProfileIds() + { + return this.injectedProfileIds; + } + public void addAttachedArtifact( Artifact artifact ) throws DuplicateArtifactAttachmentException {