[MNG-4347] Create a session-specific instance of MavenMetadataSource to be used during project-building, which passes the global profile manager throughout the build
git-svn-id: https://svn.apache.org/repos/asf/maven/maven-2/branches/maven-2.2.x-MNG-4347@813112 13f79535-47bb-0310-9956-ffa450edef68
diff --git a/maven-core/src/main/java/org/apache/maven/DefaultMaven.java b/maven-core/src/main/java/org/apache/maven/DefaultMaven.java
index 697ca77..9cc9960 100644
--- a/maven-core/src/main/java/org/apache/maven/DefaultMaven.java
+++ b/maven-core/src/main/java/org/apache/maven/DefaultMaven.java
@@ -63,6 +63,7 @@
import org.apache.maven.project.MavenProjectBuilder;
import org.apache.maven.project.MissingProjectException;
import org.apache.maven.project.ProjectBuildingException;
+import org.apache.maven.project.artifact.MavenMetadataSource;
import org.apache.maven.reactor.MavenExecutionException;
import org.apache.maven.settings.Mirror;
import org.apache.maven.settings.Proxy;
@@ -107,6 +108,8 @@
protected ErrorDiagnostics errorDiagnostics;
protected RuntimeInformation runtimeInformation;
+
+ protected MavenMetadataSource mavenMetadataSource;
private static final long MB = 1024 * 1024;
@@ -267,6 +270,9 @@
globalProfileManager.loadSettingsProfiles( request.getSettings() );
getLogger().info( "Scanning for projects..." );
+
+ request.getProjectBuilderConfiguration()
+ .setMetadataSource( new MavenMetadataSource( mavenMetadataSource, request.getProjectBuilderConfiguration() ) );
boolean foundProjects = true;
List projects = getProjects( request );
@@ -616,9 +622,7 @@
protected MavenSession createSession( MavenExecutionRequest request,
ReactorManager rpm )
{
- return new MavenSession( container, request.getSettings(), request.getLocalRepository(),
- request.getEventDispatcher(), rpm, request.getGoals(), request.getBaseDirectory(),
- request.getExecutionProperties(), request.getUserProperties(), request.getStartTime() );
+ return new MavenSession( container, request, rpm );
}
/**
diff --git a/maven-core/src/main/java/org/apache/maven/execution/MavenSession.java b/maven-core/src/main/java/org/apache/maven/execution/MavenSession.java
index 6360e79..bb63976 100644
--- a/maven-core/src/main/java/org/apache/maven/execution/MavenSession.java
+++ b/maven-core/src/main/java/org/apache/maven/execution/MavenSession.java
@@ -25,6 +25,7 @@
import org.apache.maven.project.DefaultProjectBuilderConfiguration;
import org.apache.maven.project.MavenProject;
import org.apache.maven.project.ProjectBuilderConfiguration;
+import org.apache.maven.project.artifact.MavenMetadataSource;
import org.apache.maven.settings.Settings;
import org.codehaus.plexus.PlexusContainer;
import org.codehaus.plexus.component.repository.exception.ComponentLookupException;
@@ -44,7 +45,7 @@
private ArtifactRepository localRepository;
- private List goals;
+ private List<String> goals;
private EventDispatcher eventDispatcher;
@@ -65,15 +66,17 @@
private MavenProject currentProject;
+ private ProjectBuilderConfiguration projectBuilderConfig;
+
public MavenSession( PlexusContainer container, Settings settings, ArtifactRepository localRepository,
- EventDispatcher eventDispatcher, ReactorManager reactorManager, List goals,
+ EventDispatcher eventDispatcher, ReactorManager reactorManager, List<String> goals,
String executionRootDir, Properties executionProperties, Date startTime )
{
this( container, settings, localRepository, eventDispatcher, reactorManager, goals, executionRootDir, executionProperties, null, startTime );
}
public MavenSession( PlexusContainer container, Settings settings, ArtifactRepository localRepository,
- EventDispatcher eventDispatcher, ReactorManager reactorManager, List goals,
+ EventDispatcher eventDispatcher, ReactorManager reactorManager, List<String> goals,
String executionRootDir, Properties executionProperties, Properties userProperties, Date startTime )
{
this.container = container;
@@ -97,6 +100,21 @@
this.startTime = startTime;
}
+ public MavenSession( PlexusContainer container, MavenExecutionRequest request, ReactorManager rpm )
+ {
+ this.container = container;
+ this.settings = request.getSettings();
+ this.localRepository = request.getLocalRepository();
+ this.eventDispatcher = request.getEventDispatcher();
+ this.reactorManager = rpm;
+ this.goals = request.getGoals();
+ this.executionRootDir = request.getBaseDirectory();
+ this.executionProperties = request.getExecutionProperties();
+ this.userProperties = request.getUserProperties();
+ this.startTime = request.getStartTime();
+ this.projectBuilderConfig = request.getProjectBuilderConfiguration();
+ }
+
public Map getPluginContext( PluginDescriptor pluginDescriptor, MavenProject project )
{
return reactorManager.getPluginContext( pluginDescriptor, project );
@@ -112,7 +130,7 @@
return localRepository;
}
- public List getGoals()
+ public List<String> getGoals()
{
return goals;
}
@@ -138,13 +156,13 @@
return container.lookup( role, roleHint );
}
- public List lookupList( String role )
+ public List<?> lookupList( String role )
throws ComponentLookupException
{
return container.lookupList( role );
}
- public Map lookupMap( String role )
+ public Map<String, ?> lookupMap( String role )
throws ComponentLookupException
{
return container.lookupMap( role );
@@ -209,18 +227,19 @@
this.userProperties = userProperties;
}
- /**
- * NOTE: This varies from {@link DefaultMavenExecutionRequest#getProjectBuilderConfiguration()} in that
- * it doesn't supply a global profile manager.
- */
public ProjectBuilderConfiguration getProjectBuilderConfiguration()
{
- ProjectBuilderConfiguration config = new DefaultProjectBuilderConfiguration();
- config.setLocalRepository( getLocalRepository() )
- .setExecutionProperties( getExecutionProperties() )
- .setUserProperties( getUserProperties() )
- .setBuildStartTime( getStartTime() );
+ if ( projectBuilderConfig == null )
+ {
+ ProjectBuilderConfiguration config = new DefaultProjectBuilderConfiguration();
+ config.setLocalRepository( getLocalRepository() )
+ .setExecutionProperties( getExecutionProperties() )
+ .setUserProperties( getUserProperties() )
+ .setBuildStartTime( getStartTime() );
+
+ this.projectBuilderConfig = config;
+ }
- return config;
+ return projectBuilderConfig;
}
}
\ No newline at end of file
diff --git a/maven-core/src/main/java/org/apache/maven/extension/DefaultExtensionManager.java b/maven-core/src/main/java/org/apache/maven/extension/DefaultExtensionManager.java
index 9949513..b0bd04c 100644
--- a/maven-core/src/main/java/org/apache/maven/extension/DefaultExtensionManager.java
+++ b/maven-core/src/main/java/org/apache/maven/extension/DefaultExtensionManager.java
@@ -21,7 +21,7 @@
import static org.apache.maven.container.ContainerUtils.findChildComponentHints;
-import org.apache.maven.MavenArtifactFilterManager;
+import org.apache.maven.MavenArtifactFilterManager;
import org.apache.maven.artifact.Artifact;
import org.apache.maven.artifact.ArtifactUtils;
import org.apache.maven.artifact.factory.ArtifactFactory;
@@ -38,7 +38,9 @@
import org.apache.maven.artifact.resolver.filter.ArtifactFilter;
import org.apache.maven.model.Extension;
import org.apache.maven.plugin.DefaultPluginManager;
+import org.apache.maven.project.DefaultProjectBuilderConfiguration;
import org.apache.maven.project.MavenProject;
+import org.apache.maven.project.ProjectBuilderConfiguration;
import org.apache.maven.wagon.Wagon;
import org.codehaus.classworlds.ClassRealm;
import org.codehaus.classworlds.ClassWorld;
@@ -61,7 +63,6 @@
import java.io.InputStreamReader;
import java.util.Collections;
import java.util.HashMap;
-import java.util.Iterator;
import java.util.LinkedHashSet;
import java.util.Map;
import java.util.Set;
@@ -99,6 +100,14 @@
ArtifactRepository localRepository )
throws ArtifactResolutionException, PlexusContainerException, ArtifactNotFoundException
{
+ addExtension( extension, project, new DefaultProjectBuilderConfiguration().setLocalRepository( localRepository ) );
+ }
+
+ public void addExtension( Extension extension,
+ MavenProject project,
+ ProjectBuilderConfiguration builderConfig )
+ throws ArtifactResolutionException, PlexusContainerException, ArtifactNotFoundException
+ {
String extensionId = ArtifactUtils.versionlessKey( extension.getGroupId(), extension.getArtifactId() );
getLogger().debug( "Initialising extension: " + extensionId );
@@ -108,11 +117,17 @@
if ( artifact != null )
{
ArtifactFilter filter = new ProjectArtifactExceptionFilter( artifactFilter, project.getArtifact() );
+
+ ArtifactMetadataSource metadataSource = builderConfig.getMetadataSource();
+ if ( metadataSource == null )
+ {
+ metadataSource = artifactMetadataSource;
+ }
ResolutionGroup resolutionGroup;
try
{
- resolutionGroup = artifactMetadataSource.retrieve( artifact, localRepository,
+ resolutionGroup = metadataSource.retrieve( artifact, builderConfig.getLocalRepository(),
project.getRemoteArtifactRepositories() );
}
catch ( ArtifactMetadataRetrievalException e )
@@ -123,10 +138,10 @@
// We use the same hack here to make sure that plexus 1.1 is available for extensions that do
// not declare plexus-utils but need it. MNG-2900
- Set rgArtifacts = resolutionGroup.getArtifacts();
+ Set<Artifact> rgArtifacts = resolutionGroup.getArtifacts();
rgArtifacts = DefaultPluginManager.checkPlexusUtils( rgArtifacts, artifactFactory );
- Set dependencies = new LinkedHashSet();
+ Set<Artifact> dependencies = new LinkedHashSet<Artifact>();
dependencies.add( artifact );
dependencies.addAll( rgArtifacts );
@@ -136,16 +151,16 @@
ArtifactResolutionResult result = artifactResolver.resolveTransitively( dependencies, project.getArtifact(),
Collections.EMPTY_MAP,
//project.getManagedVersionMap(),
- localRepository,
+ builderConfig.getLocalRepository(),
project.getRemoteArtifactRepositories(),
- artifactMetadataSource, filter );
+ metadataSource, filter );
// gross hack for some backwards compat (MNG-2749)
// if it is a lone artifact, then we assume it to be a resource package, and put it in the main container
// as before. If it has dependencies, that's when we risk conflict and exile to the child container
// jvz: we have to make this 2 because plexus is always added now.
- Set artifacts = result.getArtifacts();
+ Set<Artifact> artifacts = result.getArtifacts();
// Lifecycles are loaded by the Lifecycle executor by looking up lifecycle definitions from the
// core container. So we need to look if an extension has a lifecycle mapping and use the container
@@ -153,10 +168,8 @@
if ( extensionContainsLifeycle( artifact.getFile() ) )
{
- for ( Iterator i = artifacts.iterator(); i.hasNext(); )
+ for ( Artifact a : artifacts )
{
- Artifact a = (Artifact) i.next();
-
if ( artifactFilter.include( a ) )
{
getLogger().debug( "Adding extension to core container: " + a.getFile() );
@@ -167,10 +180,8 @@
}
else if ( artifacts.size() == 2 )
{
- for ( Iterator i = artifacts.iterator(); i.hasNext(); )
+ for ( Artifact a : artifacts )
{
- Artifact a = (Artifact) i.next();
-
if ( !a.getArtifactId().equals( "plexus-utils" ) )
{
a = project.replaceWithActiveArtifact( a );
@@ -191,10 +202,8 @@
extensionContainer = createContainer();
}
- for ( Iterator i = result.getArtifacts().iterator(); i.hasNext(); )
+ for ( Artifact a : (Set<Artifact>) result.getArtifacts() )
{
- Artifact a = (Artifact) i.next();
-
a = project.replaceWithActiveArtifact( a );
getLogger().debug( "Adding to extension classpath: " + a.getFile() );
diff --git a/maven-core/src/main/java/org/apache/maven/extension/ExtensionManager.java b/maven-core/src/main/java/org/apache/maven/extension/ExtensionManager.java
index 4667a90..61b1b59 100644
--- a/maven-core/src/main/java/org/apache/maven/extension/ExtensionManager.java
+++ b/maven-core/src/main/java/org/apache/maven/extension/ExtensionManager.java
@@ -25,6 +25,7 @@
import org.apache.maven.artifact.resolver.ArtifactResolutionException;
import org.apache.maven.model.Extension;
import org.apache.maven.project.MavenProject;
+import org.apache.maven.project.ProjectBuilderConfiguration;
import org.codehaus.plexus.PlexusContainerException;
import java.util.Map;
@@ -43,4 +44,7 @@
void registerWagons();
Map<String, ArtifactHandler> getArtifactTypeHandlers();
+
+ void addExtension( Extension extension, MavenProject project, ProjectBuilderConfiguration builderConfig )
+ throws ArtifactResolutionException, PlexusContainerException, ArtifactNotFoundException;
}
diff --git a/maven-core/src/main/java/org/apache/maven/lifecycle/DefaultLifecycleExecutor.java b/maven-core/src/main/java/org/apache/maven/lifecycle/DefaultLifecycleExecutor.java
index 024b3b7..d9b13eb 100644
--- a/maven-core/src/main/java/org/apache/maven/lifecycle/DefaultLifecycleExecutor.java
+++ b/maven-core/src/main/java/org/apache/maven/lifecycle/DefaultLifecycleExecutor.java
@@ -193,7 +193,7 @@
try
{
getLogger().debug( "Adding extension: " + extension );
- extensionManager.addExtension( extension, project, session.getLocalRepository() );
+ extensionManager.addExtension( extension, project, session.getProjectBuilderConfiguration() );
}
catch ( PlexusContainerException e )
{
diff --git a/maven-core/src/main/java/org/apache/maven/plugin/DefaultPluginManager.java b/maven-core/src/main/java/org/apache/maven/plugin/DefaultPluginManager.java
index 696b607..a11e02a 100644
--- a/maven-core/src/main/java/org/apache/maven/plugin/DefaultPluginManager.java
+++ b/maven-core/src/main/java/org/apache/maven/plugin/DefaultPluginManager.java
@@ -740,10 +740,16 @@
ArtifactRepository localRepository = session.getLocalRepository();
+ ArtifactMetadataSource metadataSource = session.getProjectBuilderConfiguration().getMetadataSource();
+ if ( metadataSource == null )
+ {
+ metadataSource = artifactMetadataSource;
+ }
+
ResolutionGroup resolutionGroup;
try
{
- resolutionGroup = artifactMetadataSource.retrieve( pluginArtifact, localRepository,
+ resolutionGroup = metadataSource.retrieve( pluginArtifact, localRepository,
project.getPluginArtifactRepositories() );
}
catch ( ArtifactMetadataRetrievalException e )
@@ -835,7 +841,7 @@
ArtifactResolutionResult result = artifactResolver.resolveTransitively( dependencies, pluginArtifact,
pluginManagedDependencies,
localRepository, repositories,
- artifactMetadataSource,
+ metadataSource,
artifactFilter );
Set resolved = result.getArtifacts();
diff --git a/maven-core/src/main/resources/META-INF/plexus/components.xml b/maven-core/src/main/resources/META-INF/plexus/components.xml
index 2bd2d63..a3ab50c 100644
--- a/maven-core/src/main/resources/META-INF/plexus/components.xml
+++ b/maven-core/src/main/resources/META-INF/plexus/components.xml
@@ -108,6 +108,11 @@
<requirement>
<role>org.apache.maven.execution.RuntimeInformation</role>
</requirement>
+ <requirement>
+ <role>org.apache.maven.artifact.metadata.ArtifactMetadataSource</role>
+ <role-hint>maven</role-hint>
+ <field-name>mavenMetadataSource</field-name>
+ </requirement>
</requirements>
</component>
diff --git a/maven-project/src/main/java/org/apache/maven/project/DefaultMavenProjectBuilder.java b/maven-project/src/main/java/org/apache/maven/project/DefaultMavenProjectBuilder.java
index 878b33b..c8f24e3 100644
--- a/maven-project/src/main/java/org/apache/maven/project/DefaultMavenProjectBuilder.java
+++ b/maven-project/src/main/java/org/apache/maven/project/DefaultMavenProjectBuilder.java
@@ -239,6 +239,17 @@
boolean allowStubModel )
throws ProjectBuildingException
{
+ ProjectBuilderConfiguration config = new DefaultProjectBuilderConfiguration().setLocalRepository( localRepository );
+
+ return buildFromRepository( artifact, remoteArtifactRepositories, config, allowStubModel );
+ }
+
+ public MavenProject buildFromRepository( Artifact artifact,
+ List remoteArtifactRepositories,
+ ProjectBuilderConfiguration config,
+ boolean allowStubModel )
+ throws ProjectBuildingException
+ {
String cacheKey = createCacheKey( artifact.getGroupId(), artifact.getArtifactId(), artifact.getVersion() );
MavenProject project = (MavenProject) processedProjectCache.get( cacheKey );
@@ -248,9 +259,7 @@
return project;
}
- Model model = findModelFromRepository( artifact, remoteArtifactRepositories, localRepository, allowStubModel );
-
- ProjectBuilderConfiguration config = new DefaultProjectBuilderConfiguration().setLocalRepository( localRepository );
+ Model model = findModelFromRepository( artifact, remoteArtifactRepositories, config, allowStubModel );
return buildInternal( "Artifact [" + artifact + "]", model, config, remoteArtifactRepositories,
null, false );
@@ -526,7 +535,7 @@
private Model findModelFromRepository( Artifact artifact,
List remoteArtifactRepositories,
- ArtifactRepository localRepository,
+ ProjectBuilderConfiguration config,
boolean allowStubModel )
throws ProjectBuildingException
{
@@ -555,7 +564,7 @@
try
{
- artifactResolver.resolve( projectArtifact, remoteArtifactRepositories, localRepository );
+ artifactResolver.resolve( projectArtifact, remoteArtifactRepositories, config.getLocalRepository() );
File file = projectArtifact.getFile();
@@ -574,7 +583,7 @@
status = ArtifactStatus.valueOf( distributionManagement.getStatus() );
}
- checkStatusAndUpdate( projectArtifact, status, file, remoteArtifactRepositories, localRepository );
+ checkStatusAndUpdate( projectArtifact, status, file, remoteArtifactRepositories, config.getLocalRepository() );
// TODO: this is gross. Would like to give it the whole model, but maven-artifact shouldn't depend on that
// Can a maven-core implementation of the Artifact interface store it, and be used in the exceptions?
@@ -859,6 +868,7 @@
// only add the super repository if it wasn't overridden by a profile or project
List repositories = new ArrayList( aggregatedRemoteWagonRepositories );
+ repositories.addAll( parentSearchRepositories );
List superRepositories = buildArtifactRepositories( superModel );
@@ -996,7 +1006,7 @@
// MNG-3482: Make sure depMgmt is interpolated before merging.
if ( !isSuperPom )
{
- mergeManagedDependencies( model, config.getLocalRepository(), remoteRepositories );
+ mergeManagedDependencies( model, config, remoteRepositories );
}
// interpolation is before injection, because interpolation is off-limits in the injected variables
@@ -1389,7 +1399,7 @@
try
{
- model = findModelFromRepository( parentArtifact, remoteRepositories, config.getLocalRepository(), false );
+ model = findModelFromRepository( parentArtifact, remoteRepositories, config, false );
}
catch ( ProjectBuildingException e )
{
@@ -1422,7 +1432,7 @@
return project;
}
- private void mergeManagedDependencies(Model model, ArtifactRepository localRepository, List parentSearchRepositories)
+ private void mergeManagedDependencies(Model model, ProjectBuilderConfiguration config, List parentSearchRepositories)
throws ProjectBuildingException
{
DependencyManagement modelDepMgmt = model.getDependencyManagement();
@@ -1453,7 +1463,7 @@
{
Artifact artifact = artifactFactory.createProjectArtifact( dep.getGroupId(), dep.getArtifactId(),
dep.getVersion(), dep.getScope() );
- MavenProject project = buildFromRepository(artifact, parentSearchRepositories, localRepository, false);
+ MavenProject project = buildFromRepository(artifact, parentSearchRepositories, config, false);
DependencyManagement depMgmt = project.getDependencyManagement();
diff --git a/maven-project/src/main/java/org/apache/maven/project/DefaultProjectBuilderConfiguration.java b/maven-project/src/main/java/org/apache/maven/project/DefaultProjectBuilderConfiguration.java
index 77fb4b7..6940b01 100644
--- a/maven-project/src/main/java/org/apache/maven/project/DefaultProjectBuilderConfiguration.java
+++ b/maven-project/src/main/java/org/apache/maven/project/DefaultProjectBuilderConfiguration.java
@@ -1,5 +1,6 @@
package org.apache.maven.project;
+import org.apache.maven.artifact.metadata.ArtifactMetadataSource;
import org.apache.maven.artifact.repository.ArtifactRepository;
import org.apache.maven.profiles.ProfileManager;
@@ -20,6 +21,8 @@
private Date buildStartTime;
+ private ArtifactMetadataSource metadataSource;
+
public DefaultProjectBuilderConfiguration()
{
}
@@ -84,4 +87,15 @@
return this;
}
+ public ProjectBuilderConfiguration setMetadataSource( ArtifactMetadataSource metadataSource )
+ {
+ this.metadataSource = metadataSource;
+ return this;
+ }
+
+ public ArtifactMetadataSource getMetadataSource()
+ {
+ return metadataSource;
+ }
+
}
diff --git a/maven-project/src/main/java/org/apache/maven/project/MavenProjectBuilder.java b/maven-project/src/main/java/org/apache/maven/project/MavenProjectBuilder.java
index e398ae9..bb29b17 100644
--- a/maven-project/src/main/java/org/apache/maven/project/MavenProjectBuilder.java
+++ b/maven-project/src/main/java/org/apache/maven/project/MavenProjectBuilder.java
@@ -91,6 +91,22 @@
throws ProjectBuildingException;
/**
+ * Build the artifact using the local repository and profile manager from the project-builder
+ * configuration, resolving it if necessary.
+ *
+ * @param artifact the artifact description
+ * @param configuration The {@link ProjectBuilderConfiguration} instance containing local
+ * repository, profile manager, etc.
+ * @param remoteArtifactRepositories the remote repository list
+ * @param allowStubModel return a stub if the POM is not found
+ * @return the built project
+ * @throws ProjectBuildingException
+ */
+ MavenProject buildFromRepository( Artifact artifact, List remoteArtifactRepositories,
+ ProjectBuilderConfiguration configuration, boolean allowStubModel )
+ throws ProjectBuildingException;
+
+ /**
* @deprecated Use {@link MavenProjectBuilder#buildStandaloneSuperProject(ProjectBuilderConfiguration)} instead.
*/
MavenProject buildStandaloneSuperProject( ArtifactRepository localRepository )
diff --git a/maven-project/src/main/java/org/apache/maven/project/ProjectBuilderConfiguration.java b/maven-project/src/main/java/org/apache/maven/project/ProjectBuilderConfiguration.java
index f8ce413..f190ad7 100644
--- a/maven-project/src/main/java/org/apache/maven/project/ProjectBuilderConfiguration.java
+++ b/maven-project/src/main/java/org/apache/maven/project/ProjectBuilderConfiguration.java
@@ -1,5 +1,6 @@
package org.apache.maven.project;
+import org.apache.maven.artifact.metadata.ArtifactMetadataSource;
import org.apache.maven.artifact.repository.ArtifactRepository;
import org.apache.maven.profiles.ProfileManager;
@@ -29,4 +30,8 @@
ProjectBuilderConfiguration setBuildStartTime( Date buildStartTime );
+ ProjectBuilderConfiguration setMetadataSource( ArtifactMetadataSource mms );
+
+ ArtifactMetadataSource getMetadataSource();
+
}
diff --git a/maven-project/src/main/java/org/apache/maven/project/artifact/MavenMetadataSource.java b/maven-project/src/main/java/org/apache/maven/project/artifact/MavenMetadataSource.java
index f765795..4ab0f07 100644
--- a/maven-project/src/main/java/org/apache/maven/project/artifact/MavenMetadataSource.java
+++ b/maven-project/src/main/java/org/apache/maven/project/artifact/MavenMetadataSource.java
@@ -53,6 +53,7 @@
import org.apache.maven.project.InvalidProjectModelException;
import org.apache.maven.project.MavenProject;
import org.apache.maven.project.MavenProjectBuilder;
+import org.apache.maven.project.ProjectBuilderConfiguration;
import org.apache.maven.project.ProjectBuildingException;
import org.apache.maven.project.validation.ModelValidationResult;
import org.codehaus.plexus.logging.AbstractLogEnabled;
@@ -78,8 +79,29 @@
// lazily instantiated and cached.
private MavenProject superProject;
- private Set warnedPoms = new HashSet();
-
+ // cache
+ private final Set<String> warnedPoms;
+
+ // per-session information
+ private ProjectBuilderConfiguration projectBuilderConfig;
+
+ public MavenMetadataSource()
+ {
+ warnedPoms = new HashSet<String>();
+ }
+
+ public MavenMetadataSource( MavenMetadataSource mms, ProjectBuilderConfiguration configuration )
+ {
+ mavenProjectBuilder = mms.mavenProjectBuilder;
+ artifactFactory = mms.artifactFactory;
+ repositoryMetadataManager = mms.repositoryMetadataManager;
+ superProject = mms.superProject;
+ warnedPoms = mms.warnedPoms;
+
+ projectBuilderConfig = configuration;
+ projectBuilderConfig.setMetadataSource( this );
+ }
+
/**
* Resolve all relocations in the POM for this artifact, and return the new artifact coordinate.
*/
@@ -143,6 +165,12 @@
throws ArtifactMetadataRetrievalException
{
MavenProject project = null;
+
+ ProjectBuilderConfiguration config = projectBuilderConfig;
+ if ( config == null )
+ {
+ config = new DefaultProjectBuilderConfiguration().setLocalRepository( localRepository );
+ }
Artifact pomArtifact;
boolean done = false;
@@ -160,7 +188,7 @@
{
try
{
- project = mavenProjectBuilder.buildFromRepository( pomArtifact, remoteRepositories, localRepository,
+ project = mavenProjectBuilder.buildFromRepository( pomArtifact, remoteRepositories, config,
true );
}
catch ( InvalidProjectModelException e )
@@ -352,11 +380,17 @@
private List aggregateRepositoryLists( List remoteRepositories, List remoteArtifactRepositories )
throws ArtifactMetadataRetrievalException
{
+ ProjectBuilderConfiguration config = projectBuilderConfig;
+ if ( config == null )
+ {
+ config = new DefaultProjectBuilderConfiguration();
+ }
+
if ( superProject == null )
{
try
{
- superProject = mavenProjectBuilder.buildStandaloneSuperProject( new DefaultProjectBuilderConfiguration() );
+ superProject = mavenProjectBuilder.buildStandaloneSuperProject( config );
}
catch ( ProjectBuildingException e )
{