Author: jdcasey Date: Mon Jan 29 13:26:30 2007 New Revision: 501186 URL: http://svn.apache.org/viewvc?view=rev&rev=501186 Log: Fixing project-loading to process inheritance in the correct direction, and finishing support for custom profile activators...also moving /project/build/extensions handling out to a separate extension scanner component, for later reuse elsewhere.
Added: maven/components/trunk/maven-core/src/main/java/org/apache/maven/extension/BuildExtensionScanner.java (with props) maven/components/trunk/maven-core/src/main/java/org/apache/maven/extension/DefaultBuildExtensionScanner.java (with props) maven/components/trunk/maven-core/src/main/java/org/apache/maven/extension/ExtensionScanningException.java (with props) Modified: maven/components/trunk/maven-core/src/main/java/org/apache/maven/DefaultArtifactFilterManager.java maven/components/trunk/maven-core/src/main/java/org/apache/maven/DefaultMaven.java maven/components/trunk/maven-core/src/main/java/org/apache/maven/extension/DefaultExtensionManager.java maven/components/trunk/maven-core/src/main/resources/META-INF/plexus/components.xml 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/profiles/activation/CustomActivator.java maven/components/trunk/maven-project/src/main/java/org/apache/maven/profiles/activation/CustomActivatorAdvice.java maven/components/trunk/maven-project/src/main/java/org/apache/maven/project/build/model/DefaultModelLineage.java maven/components/trunk/maven-project/src/main/java/org/apache/maven/project/build/model/ModelLineage.java Modified: maven/components/trunk/maven-core/src/main/java/org/apache/maven/DefaultArtifactFilterManager.java URL: http://svn.apache.org/viewvc/maven/components/trunk/maven-core/src/main/java/org/apache/maven/DefaultArtifactFilterManager.java?view=diff&rev=501186&r1=501185&r2=501186 ============================================================================== --- maven/components/trunk/maven-core/src/main/java/org/apache/maven/DefaultArtifactFilterManager.java (original) +++ maven/components/trunk/maven-core/src/main/java/org/apache/maven/DefaultArtifactFilterManager.java Mon Jan 29 13:26:30 2007 @@ -42,6 +42,7 @@ artifacts.add( "jsch" ); artifacts.add( "maven-artifact" ); artifacts.add( "maven-artifact-manager" ); + artifacts.add( "maven-build-context" ); artifacts.add( "maven-core" ); artifacts.add( "maven-error-diagnoser" ); artifacts.add( "maven-model" ); 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?view=diff&rev=501186&r1=501185&r2=501186 ============================================================================== --- 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 Mon Jan 29 13:26:30 2007 @@ -17,9 +17,7 @@ */ -import org.apache.maven.artifact.ArtifactUtils; import org.apache.maven.artifact.repository.ArtifactRepository; -import org.apache.maven.artifact.resolver.ArtifactNotFoundException; import org.apache.maven.artifact.resolver.ArtifactResolutionException; import org.apache.maven.artifact.versioning.DefaultArtifactVersion; import org.apache.maven.context.BuildContextManager; @@ -32,31 +30,26 @@ import org.apache.maven.execution.MavenSession; import org.apache.maven.execution.ReactorManager; import org.apache.maven.execution.RuntimeInformation; +import org.apache.maven.extension.BuildExtensionScanner; import org.apache.maven.extension.ExtensionManager; +import org.apache.maven.extension.ExtensionScanningException; import org.apache.maven.lifecycle.LifecycleExecutor; -import org.apache.maven.model.Build; -import org.apache.maven.model.Extension; -import org.apache.maven.model.Model; import org.apache.maven.monitor.event.DefaultEventDispatcher; import org.apache.maven.monitor.event.EventDispatcher; import org.apache.maven.monitor.event.MavenEvents; import org.apache.maven.profiles.DefaultProfileManager; import org.apache.maven.profiles.ProfileManager; -import org.apache.maven.profiles.activation.CustomActivatorAdvice; import org.apache.maven.profiles.activation.ProfileActivationException; import org.apache.maven.project.DuplicateProjectException; import org.apache.maven.project.MavenProject; import org.apache.maven.project.MavenProjectBuilder; import org.apache.maven.project.ProjectBuildingException; -import org.apache.maven.project.build.model.ModelLineage; import org.apache.maven.project.build.model.ModelLineageBuilder; -import org.apache.maven.project.build.model.ModelLineageIterator; import org.apache.maven.reactor.MavenExecutionException; import org.apache.maven.settings.Settings; import org.apache.maven.usability.diagnostics.ErrorDiagnostics; import org.codehaus.plexus.PlexusConstants; import org.codehaus.plexus.PlexusContainer; -import org.codehaus.plexus.PlexusContainerException; import org.codehaus.plexus.context.Context; import org.codehaus.plexus.context.ContextException; import org.codehaus.plexus.logging.AbstractLogEnabled; @@ -90,10 +83,6 @@ // Components // ---------------------------------------------------------------------- - protected ExtensionManager extensionManager; - - protected ModelLineageBuilder modelLineageBuilder; - protected BuildContextManager buildContextManager; protected MavenProjectBuilder projectBuilder; @@ -106,6 +95,8 @@ protected RuntimeInformation runtimeInformation; + private BuildExtensionScanner buildExtensionScanner; + private static final long MB = 1024 * 1024; private static final int MS_PER_SEC = 1000; @@ -354,7 +345,23 @@ throw new MavenExecutionException( "Error selecting project files for the reactor: " + e.getMessage(), e ); } - scanProjectsForExtensions( files, request, globalProfileManager ); + // TODO: We should probably do this discovery just-in-time, if we can move to building project + // instances just-in-time. + Map cache = new HashMap(); + + for ( Iterator it = files.iterator(); it.hasNext(); ) + { + File pom = (File) it.next(); + + try + { + buildExtensionScanner.scanForBuildExtensions( pom, request.getLocalRepository(), globalProfileManager, cache ); + } + catch ( ExtensionScanningException e ) + { + throw new MavenExecutionException( "Error scanning: " + pom + " for extensions: " + e.getMessage(), e ); + } + } try { @@ -375,109 +382,6 @@ throw new MavenExecutionException( e.getMessage(), e ); } return projects; - } - - // TODO: We should probably do this discovery just-in-time, if we can move to building project - // instances just-in-time. - private void scanProjectsForExtensions( List files, MavenExecutionRequest request, - ProfileManager globalProfileManager ) - throws MavenExecutionException - { - // setup the CustomActivatorAdvice to fail quietly while we discover extensions...then, we'll - // reset it. - CustomActivatorAdvice activatorAdvice = CustomActivatorAdvice.getCustomActivatorAdvice( buildContextManager ); - activatorAdvice.setFailQuietly( true ); - activatorAdvice.store( buildContextManager ); - - try - { - MavenProject superProject; - try - { - superProject = projectBuilder.buildStandaloneSuperProject( request.getLocalRepository(), - globalProfileManager ); - } - catch ( ProjectBuildingException e ) - { - throw new MavenExecutionException( "Error building super-POM for retrieving the default remote repository list: " + e.getMessage(), e ); - } - - List originalRemoteRepositories = superProject.getRemoteArtifactRepositories(); - Map cache = new HashMap(); - - for ( Iterator it = files.iterator(); it.hasNext(); ) - { - File pom = (File) it.next(); - - ModelLineage lineage; - try - { - getLogger().debug( "Building model-lineage for: " + pom + " to pre-scan for extensions." ); - - lineage = modelLineageBuilder.buildModelLineage( pom, request.getLocalRepository(), originalRemoteRepositories, globalProfileManager, cache ); - } - catch ( ProjectBuildingException e ) - { - throw new MavenExecutionException( "Error building model lineage in order to pre-scan for extensions: " + e.getMessage(), e ); - } - - for ( ModelLineageIterator lineageIterator = lineage.lineageIterator(); lineageIterator.hasNext(); ) - { - Model model = (Model) lineageIterator.next(); - - Build build = model.getBuild(); - - if ( build != null ) - { - List extensions = build.getExtensions(); - - if ( extensions != null && !extensions.isEmpty() ) - { - List remoteRepositories = lineageIterator.getArtifactRepositories(); - - // thankfully, we don't have to deal with dependencyManagement here, yet. - // TODO Revisit if/when extensions are made to use the info in dependencyManagement - for ( Iterator extensionIterator = extensions.iterator(); extensionIterator.hasNext(); ) - { - Extension extension = (Extension) extensionIterator.next(); - - getLogger().debug( "Adding extension: " + ArtifactUtils.versionlessKey( extension.getGroupId(), extension.getArtifactId() ) + " from model: " + model.getId() ); - - try - { - extensionManager.addExtension( extension, model, remoteRepositories, request.getLocalRepository() ); - } - catch ( ArtifactResolutionException e ) - { - throw new MavenExecutionException( "Cannot resolve pre-scanned extension artifact: " - + extension.getGroupId() + ":" + extension.getArtifactId() + ": " + e.getMessage(), - e ); - } - catch ( ArtifactNotFoundException e ) - { - throw new MavenExecutionException( "Cannot find pre-scanned extension artifact: " - + extension.getGroupId() + ":" + extension.getArtifactId() + ": " + e.getMessage(), - e ); - } - catch ( PlexusContainerException e ) - { - throw new MavenExecutionException( "Failed to add pre-scanned extension: " - + extension.getGroupId() + ":" + extension.getArtifactId() + ": " + e.getMessage(), - e ); - } - } - } - } - } - } - - extensionManager.registerWagons(); - } - finally - { - activatorAdvice.reset(); - activatorAdvice.store( buildContextManager ); - } } private void logReactorSummaryLine( String name, Added: maven/components/trunk/maven-core/src/main/java/org/apache/maven/extension/BuildExtensionScanner.java URL: http://svn.apache.org/viewvc/maven/components/trunk/maven-core/src/main/java/org/apache/maven/extension/BuildExtensionScanner.java?view=auto&rev=501186 ============================================================================== --- maven/components/trunk/maven-core/src/main/java/org/apache/maven/extension/BuildExtensionScanner.java (added) +++ maven/components/trunk/maven-core/src/main/java/org/apache/maven/extension/BuildExtensionScanner.java Mon Jan 29 13:26:30 2007 @@ -0,0 +1,17 @@ +package org.apache.maven.extension; + +import org.apache.maven.artifact.repository.ArtifactRepository; +import org.apache.maven.profiles.ProfileManager; + +import java.io.File; +import java.util.Map; + +public interface BuildExtensionScanner +{ + + String ROLE = BuildExtensionScanner.class.getName(); + + void scanForBuildExtensions( File pom, ArtifactRepository localRepository, ProfileManager globalProfileManager, Map pomFilesById ) + throws ExtensionScanningException; + +} Propchange: maven/components/trunk/maven-core/src/main/java/org/apache/maven/extension/BuildExtensionScanner.java ------------------------------------------------------------------------------ svn:eol-style = native Propchange: maven/components/trunk/maven-core/src/main/java/org/apache/maven/extension/BuildExtensionScanner.java ------------------------------------------------------------------------------ svn:keywords = "Author Date Id Revision" Added: maven/components/trunk/maven-core/src/main/java/org/apache/maven/extension/DefaultBuildExtensionScanner.java URL: http://svn.apache.org/viewvc/maven/components/trunk/maven-core/src/main/java/org/apache/maven/extension/DefaultBuildExtensionScanner.java?view=auto&rev=501186 ============================================================================== --- maven/components/trunk/maven-core/src/main/java/org/apache/maven/extension/DefaultBuildExtensionScanner.java (added) +++ maven/components/trunk/maven-core/src/main/java/org/apache/maven/extension/DefaultBuildExtensionScanner.java Mon Jan 29 13:26:30 2007 @@ -0,0 +1,255 @@ +package org.apache.maven.extension; + +import org.apache.maven.artifact.ArtifactUtils; +import org.apache.maven.artifact.repository.ArtifactRepository; +import org.apache.maven.artifact.resolver.ArtifactNotFoundException; +import org.apache.maven.artifact.resolver.ArtifactResolutionException; +import org.apache.maven.context.BuildContextManager; +import org.apache.maven.model.Build; +import org.apache.maven.model.Extension; +import org.apache.maven.model.Model; +import org.apache.maven.profiles.ProfileManager; +import org.apache.maven.profiles.activation.CustomActivatorAdvice; +import org.apache.maven.project.MavenProject; +import org.apache.maven.project.MavenProjectBuilder; +import org.apache.maven.project.ProjectBuildingException; +import org.apache.maven.project.build.model.ModelLineage; +import org.apache.maven.project.build.model.ModelLineageBuilder; +import org.apache.maven.project.build.model.ModelLineageIterator; +import org.apache.maven.project.interpolation.ModelInterpolationException; +import org.apache.maven.project.interpolation.ModelInterpolator; +import org.codehaus.plexus.PlexusContainerException; +import org.codehaus.plexus.logging.LogEnabled; +import org.codehaus.plexus.logging.Logger; +import org.codehaus.plexus.logging.console.ConsoleLogger; + +import java.io.File; +import java.util.Collections; +import java.util.HashMap; +import java.util.Iterator; +import java.util.List; +import java.util.Map; +import java.util.Properties; + +public class DefaultBuildExtensionScanner + implements BuildExtensionScanner, LogEnabled +{ + + private Logger logger; + + private BuildContextManager buildContextManager; + + private ExtensionManager extensionManager; + + private MavenProjectBuilder projectBuilder; + + private ModelLineageBuilder modelLineageBuilder; + + private ModelInterpolator modelInterpolator; + + public void scanForBuildExtensions( File pom, ArtifactRepository localRepository, + ProfileManager globalProfileManager, Map pomFilesById ) + throws ExtensionScanningException + { + // setup the CustomActivatorAdvice to fail quietly while we discover extensions...then, we'll + // reset it. + CustomActivatorAdvice activatorAdvice = CustomActivatorAdvice.getCustomActivatorAdvice( buildContextManager ); + activatorAdvice.setFailQuietly( true ); + activatorAdvice.store( buildContextManager ); + + try + { + List originalRemoteRepositories = getInitialRemoteRepositories( localRepository, globalProfileManager ); + + getLogger().debug( "Pre-scanning POM lineage of: " + pom + " for build extensions." ); + + ModelLineage lineage = buildModelLineage( pom, localRepository, originalRemoteRepositories, + globalProfileManager, pomFilesById ); + + Map inheritedInterpolationValues = new HashMap(); + + for ( ModelLineageIterator lineageIterator = lineage.reversedLineageIterator(); lineageIterator.hasNext(); ) + { + Model model = (Model) lineageIterator.next(); + + getLogger().debug( "Checking: " + model.getId() + " for extensions." ); + + if ( inheritedInterpolationValues == null ) + { + inheritedInterpolationValues = new HashMap(); + } + + model = modelInterpolator.interpolate( model, inheritedInterpolationValues, false ); + + checkModelBuildForExtensions( model, localRepository, lineageIterator.getArtifactRepositories() ); + + checkModulesForExtensions( pom, model, localRepository, originalRemoteRepositories, globalProfileManager, + pomFilesById ); + + Properties modelProps = model.getProperties(); + if ( modelProps != null ) + { + inheritedInterpolationValues.putAll( modelProps ); + } + } + + getLogger().debug( "Finished pre-scanning: " + pom + " for build extensions." ); + + extensionManager.registerWagons(); + } + catch ( ModelInterpolationException e ) + { + throw new ExtensionScanningException( "Failed to interpolate model from: " + pom + " prior to scanning for extensions.", e ); + } + finally + { + activatorAdvice.reset(); + activatorAdvice.store( buildContextManager ); + } + } + + private void checkModulesForExtensions( File containingPom, Model model, ArtifactRepository localRepository, + List originalRemoteRepositories, ProfileManager globalProfileManager, + Map pomFilesById ) + throws ExtensionScanningException + { + // FIXME: This gets a little sticky, because modules can be added by profiles that require + // an extension in place before they can be activated. + List modules = model.getModules(); + + if ( modules != null ) + { + File basedir = containingPom.getParentFile(); + + for ( Iterator it = modules.iterator(); it.hasNext(); ) + { + // TODO: change this if we ever find a way to replace module definitions with g:a:v + String moduleSubpath = (String) it.next(); + + getLogger().debug( "Scanning module: " + moduleSubpath ); + + File modulePom = new File( basedir, moduleSubpath ); + + if ( modulePom.isDirectory() ) + { + getLogger().debug( + "Assuming POM file 'pom.xml' in module: " + moduleSubpath + " under basedir: " + + basedir ); + modulePom = new File( modulePom, "pom.xml" ); + } + + if ( !modulePom.exists() ) + { + getLogger().debug( + "Cannot find POM for module: " + moduleSubpath + + "; continuing scan with next module." ); + continue; + } + + scanForBuildExtensions( modulePom, localRepository, globalProfileManager, pomFilesById ); + } + } + } + + private void checkModelBuildForExtensions( Model model, ArtifactRepository localRepository, List remoteRepositories ) + throws ExtensionScanningException + { + Build build = model.getBuild(); + + if ( build != null ) + { + List extensions = build.getExtensions(); + + if ( extensions != null && !extensions.isEmpty() ) + { + // thankfully, we don't have to deal with dependencyManagement here, yet. + // TODO Revisit if/when extensions are made to use the info in dependencyManagement + for ( Iterator extensionIterator = extensions.iterator(); extensionIterator.hasNext(); ) + { + Extension extension = (Extension) extensionIterator.next(); + + getLogger().debug( + "Adding extension: " + + ArtifactUtils.versionlessKey( extension.getGroupId(), extension + .getArtifactId() ) + " from model: " + model.getId() ); + + try + { + extensionManager.addExtension( extension, model, remoteRepositories, localRepository ); + } + catch ( ArtifactResolutionException e ) + { + throw new ExtensionScanningException( "Cannot resolve pre-scanned extension artifact: " + + extension.getGroupId() + ":" + extension.getArtifactId() + ": " + e.getMessage(), e ); + } + catch ( ArtifactNotFoundException e ) + { + throw new ExtensionScanningException( "Cannot find pre-scanned extension artifact: " + + extension.getGroupId() + ":" + extension.getArtifactId() + ": " + e.getMessage(), e ); + } + catch ( PlexusContainerException e ) + { + throw new ExtensionScanningException( "Failed to add pre-scanned extension: " + + extension.getGroupId() + ":" + extension.getArtifactId() + ": " + e.getMessage(), e ); + } + } + } + } + } + + private ModelLineage buildModelLineage( File pom, ArtifactRepository localRepository, + List originalRemoteRepositories, ProfileManager globalProfileManager, + Map cache ) + throws ExtensionScanningException + { + ModelLineage lineage; + try + { + getLogger().debug( "Building model-lineage for: " + pom + " to pre-scan for extensions." ); + + lineage = modelLineageBuilder.buildModelLineage( pom, localRepository, originalRemoteRepositories, + globalProfileManager, cache ); + } + catch ( ProjectBuildingException e ) + { + throw new ExtensionScanningException( "Error building model lineage in order to pre-scan for extensions: " + + e.getMessage(), e ); + } + + return lineage; + } + + private List getInitialRemoteRepositories( ArtifactRepository localRepository, ProfileManager globalProfileManager ) + throws ExtensionScanningException + { + MavenProject superProject; + try + { + superProject = projectBuilder.buildStandaloneSuperProject( localRepository, globalProfileManager ); + } + catch ( ProjectBuildingException e ) + { + throw new ExtensionScanningException( + "Error building super-POM for retrieving the default remote repository list: " + + e.getMessage(), e ); + } + + return superProject.getRemoteArtifactRepositories(); + } + + protected Logger getLogger() + { + if ( logger == null ) + { + logger = new ConsoleLogger( Logger.LEVEL_DEBUG, "DefaultBuildExtensionScanner:internal" ); + } + + return logger; + } + + public void enableLogging( Logger logger ) + { + this.logger = logger; + } + +} Propchange: maven/components/trunk/maven-core/src/main/java/org/apache/maven/extension/DefaultBuildExtensionScanner.java ------------------------------------------------------------------------------ svn:eol-style = native Propchange: maven/components/trunk/maven-core/src/main/java/org/apache/maven/extension/DefaultBuildExtensionScanner.java ------------------------------------------------------------------------------ svn:keywords = "Author Date Id Revision" Modified: maven/components/trunk/maven-core/src/main/java/org/apache/maven/extension/DefaultExtensionManager.java URL: http://svn.apache.org/viewvc/maven/components/trunk/maven-core/src/main/java/org/apache/maven/extension/DefaultExtensionManager.java?view=diff&rev=501186&r1=501185&r2=501186 ============================================================================== --- maven/components/trunk/maven-core/src/main/java/org/apache/maven/extension/DefaultExtensionManager.java (original) +++ maven/components/trunk/maven-core/src/main/java/org/apache/maven/extension/DefaultExtensionManager.java Mon Jan 29 13:26:30 2007 @@ -124,6 +124,8 @@ ActiveArtifactResolver activeArtifactResolver ) throws ArtifactResolutionException, PlexusContainerException, ArtifactNotFoundException { + getLogger().debug( "Starting extension-addition process for: " + extensionArtifact ); + if ( extensionArtifact != null ) { ArtifactFilter filter = @@ -142,7 +144,7 @@ a = activeArtifactResolver.replaceWithActiveArtifact( a ); } - getLogger().debug( "Adding to extension classpath: " + a.getFile() ); + getLogger().debug( "Adding to extension classpath: " + a.getFile() + " in classRealm: " + container.getContainerRealm().getId() ); container.addJarResource( a.getFile() ); Added: maven/components/trunk/maven-core/src/main/java/org/apache/maven/extension/ExtensionScanningException.java URL: http://svn.apache.org/viewvc/maven/components/trunk/maven-core/src/main/java/org/apache/maven/extension/ExtensionScanningException.java?view=auto&rev=501186 ============================================================================== --- maven/components/trunk/maven-core/src/main/java/org/apache/maven/extension/ExtensionScanningException.java (added) +++ maven/components/trunk/maven-core/src/main/java/org/apache/maven/extension/ExtensionScanningException.java Mon Jan 29 13:26:30 2007 @@ -0,0 +1,17 @@ +package org.apache.maven.extension; + +public class ExtensionScanningException + extends Exception +{ + + public ExtensionScanningException( String message, Throwable cause ) + { + super( message, cause ); + } + + public ExtensionScanningException( String message ) + { + super( message ); + } + +} Propchange: maven/components/trunk/maven-core/src/main/java/org/apache/maven/extension/ExtensionScanningException.java ------------------------------------------------------------------------------ svn:eol-style = native Propchange: maven/components/trunk/maven-core/src/main/java/org/apache/maven/extension/ExtensionScanningException.java ------------------------------------------------------------------------------ svn:keywords = "Author Date Id Revision" Modified: maven/components/trunk/maven-core/src/main/resources/META-INF/plexus/components.xml URL: http://svn.apache.org/viewvc/maven/components/trunk/maven-core/src/main/resources/META-INF/plexus/components.xml?view=diff&rev=501186&r1=501185&r2=501186 ============================================================================== --- maven/components/trunk/maven-core/src/main/resources/META-INF/plexus/components.xml (original) +++ maven/components/trunk/maven-core/src/main/resources/META-INF/plexus/components.xml Mon Jan 29 13:26:30 2007 @@ -1,6 +1,31 @@ <component-set> <components> <component> + <role>org.apache.maven.extension.BuildExtensionScanner</role> + <role-hint>default</role-hint> + <implementation>org.apache.maven.extension.DefaultBuildExtensionScanner</implementation> + <requirements> + <requirement> + <role>org.apache.maven.extension.ExtensionManager</role> + </requirement> + <requirement> + <role>org.apache.maven.project.interpolation.ModelInterpolator</role> + </requirement> + <requirement> + <role>org.apache.maven.project.build.model.ModelLineageBuilder</role> + <role-hint>default</role-hint> + </requirement> + <requirement> + <role>org.apache.maven.context.BuildContextManager</role> + <role-hint>default</role-hint> + </requirement> + <requirement> + <role>org.apache.maven.project.MavenProjectBuilder</role> + </requirement> + </requirements> + </component> + + <component> <role>org.apache.maven.ArtifactFilterManager</role> <implementation>org.apache.maven.DefaultArtifactFilterManager</implementation> </component> @@ -84,10 +109,7 @@ <implementation>org.apache.maven.DefaultMaven</implementation> <requirements> <requirement> - <role>org.apache.maven.extension.ExtensionManager</role> - </requirement> - <requirement> - <role>org.apache.maven.project.build.model.ModelLineageBuilder</role> + <role>org.apache.maven.extension.BuildExtensionScanner</role> <role-hint>default</role-hint> </requirement> <requirement> 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?view=diff&rev=501186&r1=501185&r2=501186 ============================================================================== --- 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 Mon Jan 29 13:26:30 2007 @@ -257,7 +257,14 @@ if ( activator.canDetermineActivation( profile ) ) { - return activator.isActive( profile ); + boolean result = activator.isActive( profile ); + + if ( result ) + { + container.getLogger().debug( "Profile: " + profile.getId() + " is active. (source: " + profile.getSource() + ")" ); + } + + return result; } } Modified: maven/components/trunk/maven-project/src/main/java/org/apache/maven/profiles/activation/CustomActivator.java URL: http://svn.apache.org/viewvc/maven/components/trunk/maven-project/src/main/java/org/apache/maven/profiles/activation/CustomActivator.java?view=diff&rev=501186&r1=501185&r2=501186 ============================================================================== --- maven/components/trunk/maven-project/src/main/java/org/apache/maven/profiles/activation/CustomActivator.java (original) +++ maven/components/trunk/maven-project/src/main/java/org/apache/maven/profiles/activation/CustomActivator.java Mon Jan 29 13:26:30 2007 @@ -90,11 +90,9 @@ } catch ( ComponentLookupException e ) { - getLogger().debug( "Failed to lookup ProfileActivator \'" + type + "\'", e ); - if ( !advice.failQuietly() ) { - throw new ProfileActivationException( "Cannot find ProfileActivator with role-hint: " + type + throw new ProfileActivationException( "Cannot find custom ProfileActivator: " + type + ". \nPerhaps you're missing a build extension?", e ); } } @@ -109,11 +107,9 @@ } catch ( ComponentConfigurationException e ) { - getLogger().debug( "Failed to configure ProfileActivator \'" + type + "\'", e ); - if ( !advice.failQuietly() ) { - throw new ProfileActivationException( "Failed to configure ProfileActivator with role-hint: " + type + throw new ProfileActivationException( "Failed to configure custom ProfileActivator: " + type + ".", e ); } } Modified: maven/components/trunk/maven-project/src/main/java/org/apache/maven/profiles/activation/CustomActivatorAdvice.java URL: http://svn.apache.org/viewvc/maven/components/trunk/maven-project/src/main/java/org/apache/maven/profiles/activation/CustomActivatorAdvice.java?view=diff&rev=501186&r1=501185&r2=501186 ============================================================================== --- maven/components/trunk/maven-project/src/main/java/org/apache/maven/profiles/activation/CustomActivatorAdvice.java (original) +++ maven/components/trunk/maven-project/src/main/java/org/apache/maven/profiles/activation/CustomActivatorAdvice.java Mon Jan 29 13:26:30 2007 @@ -17,7 +17,7 @@ public static final String BUILD_CONTEXT_KEY = CustomActivatorAdvice.class.getName(); - private static final boolean DEFAULT_FAIL_QUIETLY = true; + private static final boolean DEFAULT_FAIL_QUIETLY = false; /** * If set to false, this tells the CustomProfileActivator to fail quietly when the specified Modified: maven/components/trunk/maven-project/src/main/java/org/apache/maven/project/build/model/DefaultModelLineage.java URL: http://svn.apache.org/viewvc/maven/components/trunk/maven-project/src/main/java/org/apache/maven/project/build/model/DefaultModelLineage.java?view=diff&rev=501186&r1=501185&r2=501186 ============================================================================== --- maven/components/trunk/maven-project/src/main/java/org/apache/maven/project/build/model/DefaultModelLineage.java (original) +++ maven/components/trunk/maven-project/src/main/java/org/apache/maven/project/build/model/DefaultModelLineage.java Mon Jan 29 13:26:30 2007 @@ -368,4 +368,44 @@ }; } + public ModelLineageIterator reversedLineageIterator() + { + return new ModelLineageIterator() + { + + private int idx = tuples.size(); + + public boolean hasNext() + { + return idx > 0; + } + + public Object next() + { + return ( (ModelLineageTuple) tuples.get( ( --idx ) ) ).model; + } + + public void remove() + { + tuples.remove( idx ); + } + + public List getArtifactRepositories() + { + return ( (ModelLineageTuple) tuples.get( idx ) ).remoteRepositories; + } + + public Model getModel() + { + return ( (ModelLineageTuple) tuples.get( idx ) ).model; + } + + public File getPOMFile() + { + return ( (ModelLineageTuple) tuples.get( idx ) ).file; + } + + }; + } + } Modified: maven/components/trunk/maven-project/src/main/java/org/apache/maven/project/build/model/ModelLineage.java URL: http://svn.apache.org/viewvc/maven/components/trunk/maven-project/src/main/java/org/apache/maven/project/build/model/ModelLineage.java?view=diff&rev=501186&r1=501185&r2=501186 ============================================================================== --- maven/components/trunk/maven-project/src/main/java/org/apache/maven/project/build/model/ModelLineage.java (original) +++ maven/components/trunk/maven-project/src/main/java/org/apache/maven/project/build/model/ModelLineage.java Mon Jan 29 13:26:30 2007 @@ -98,6 +98,14 @@ ModelLineageIterator lineageIterator(); /** + * Retrieve an Iterator derivative that functions in the simplest sense just like the return + * value of the modelIterator() method. However, the ModelLineageIterator also gives access to + * the current POM file and current remote ArtifactRepository instances used to resolve the + * current Model...along with a method to give explicit access to the current Model instance. + */ + ModelLineageIterator reversedLineageIterator(); + + /** * Iterate over the lineage of Model instances, starting with the child (current) Model, * and ending with the deepest ancestor. */