o Decoupled project building request from model building request

o Moved model resolver into model building request

git-svn-id: https://svn.apache.org/repos/asf/maven/components/trunk@782223 13f79535-47bb-0310-9956-ffa450edef68
This commit is contained in:
Benjamin Bentmann 2009-06-06 10:38:42 +00:00
parent 39c3724b6f
commit 73f3c915d1
7 changed files with 124 additions and 43 deletions

View File

@ -28,10 +28,12 @@ import org.apache.maven.artifact.resolver.ResolutionErrorHandler;
import org.apache.maven.lifecycle.LifecycleExecutionException;
import org.apache.maven.lifecycle.LifecycleExecutor;
import org.apache.maven.model.Build;
import org.apache.maven.model.DefaultModelBuildingRequest;
import org.apache.maven.model.FileModelSource;
import org.apache.maven.model.Model;
import org.apache.maven.model.ModelBuilder;
import org.apache.maven.model.ModelBuildingException;
import org.apache.maven.model.ModelBuildingRequest;
import org.apache.maven.model.ModelBuildingResult;
import org.apache.maven.model.io.ModelReader;
import org.apache.maven.model.resolution.ModelResolver;
@ -86,18 +88,25 @@ public class DefaultProjectBuilder
new RepositoryModelResolver( repositorySystem, resolutionErrorHandler, configuration.getLocalRepository(),
configuration.getRemoteRepositories() );
ModelBuildingRequest request = new DefaultModelBuildingRequest();
request.setLenientValidation( configuration.istLenientValidation() );
request.setProcessPlugins( configuration.isProcessPlugins() );
request.setProfiles( configuration.getProfiles() );
request.setActiveProfileIds( configuration.getActiveProfileIds() );
request.setInactiveProfileIds( configuration.getInactiveProfileIds() );
request.setExecutionProperties( configuration.getExecutionProperties() );
request.setModelResolver( resolver );
ModelBuildingResult result;
try
{
if ( localProject )
{
result = modelBuilder.build( pomFile, configuration.getModelBuildingRequest(), resolver );
result = modelBuilder.build( pomFile, request );
}
else
{
result =
modelBuilder.build( new FileModelSource( pomFile ), configuration.getModelBuildingRequest(),
resolver );
result = modelBuilder.build( new FileModelSource( pomFile ), request );
}
}
catch ( ModelBuildingException e )

View File

@ -24,8 +24,6 @@ import java.util.List;
import java.util.Properties;
import org.apache.maven.artifact.repository.ArtifactRepository;
import org.apache.maven.model.DefaultModelBuildingRequest;
import org.apache.maven.model.ModelBuildingRequest;
import org.apache.maven.model.ModelEventListener;
import org.apache.maven.model.Profile;
@ -40,7 +38,26 @@ public class DefaultProjectBuildingRequest
private MavenProject topProject;
private ModelBuildingRequest modelBuildingRequest = new DefaultModelBuildingRequest().setProcessPlugins( true );
private boolean lenientValidation;
private boolean processPlugins;
private List<Profile> profiles;
private List<String> activeProfileIds;
private List<String> inactiveProfileIds;
private Properties executionProperties;
public DefaultProjectBuildingRequest()
{
processPlugins = true;
profiles = new ArrayList<Profile>();
activeProfileIds = new ArrayList<String>();
inactiveProfileIds = new ArrayList<String>();
executionProperties = new Properties();
}
public MavenProject getTopLevelProjectFromReactor()
{
@ -80,12 +97,17 @@ public class DefaultProjectBuildingRequest
public Properties getExecutionProperties()
{
return modelBuildingRequest.getExecutionProperties();
return executionProperties;
}
public ProjectBuildingRequest setExecutionProperties( Properties executionProperties )
{
modelBuildingRequest.setExecutionProperties( executionProperties );
this.executionProperties.clear();
if ( executionProperties != null )
{
this.executionProperties.putAll( executionProperties );
}
return this;
}
@ -102,64 +124,71 @@ public class DefaultProjectBuildingRequest
public boolean isProcessPlugins()
{
return modelBuildingRequest.isProcessPlugins();
return processPlugins;
}
public ProjectBuildingRequest setProcessPlugins( boolean processPlugins )
{
modelBuildingRequest.setProcessPlugins( processPlugins );
this.processPlugins = processPlugins;
return this;
}
public ProjectBuildingRequest setLenientValidation( boolean lenientValidation )
{
modelBuildingRequest.setLenientValidation( lenientValidation );
this.lenientValidation = lenientValidation;
return this;
}
public boolean istLenientValidation()
{
return modelBuildingRequest.istLenientValidation();
return lenientValidation;
}
public List<String> getActiveProfileIds()
{
return modelBuildingRequest.getActiveProfileIds();
return activeProfileIds;
}
public void setActiveProfileIds( List<String> activeProfileIds )
{
modelBuildingRequest.setActiveProfileIds( activeProfileIds );
this.activeProfileIds.clear();
if ( activeProfileIds != null )
{
this.activeProfileIds.addAll( activeProfileIds );
}
}
public List<String> getInactiveProfileIds()
{
return modelBuildingRequest.getInactiveProfileIds();
return inactiveProfileIds;
}
public void setInactiveProfileIds( List<String> inactiveProfileIds )
{
modelBuildingRequest.setInactiveProfileIds( inactiveProfileIds );
this.inactiveProfileIds.clear();
if ( inactiveProfileIds != null )
{
this.inactiveProfileIds.addAll( inactiveProfileIds );
}
}
public void setProfiles( List<Profile> profiles )
{
modelBuildingRequest.setProfiles( profiles );
this.profiles.clear();
if ( profiles != null )
{
this.profiles.addAll( profiles );
}
}
public void addProfile( Profile profile )
{
modelBuildingRequest.getProfiles().add(profile);
profiles.add(profile);
}
public List<Profile> getProfiles()
{
return modelBuildingRequest.getProfiles();
}
public ModelBuildingRequest getModelBuildingRequest()
{
return modelBuildingRequest;
return profiles;
}
}

View File

@ -72,6 +72,4 @@ public interface ProjectBuildingRequest
List<Profile> getProfiles();
ModelBuildingRequest getModelBuildingRequest();
}

View File

@ -93,20 +93,19 @@ public class DefaultModelBuilder
@Requirement
private PluginConfigurationExpander pluginConfigurationExpander;
public ModelBuildingResult build( File pomFile, ModelBuildingRequest request, ModelResolver modelResolver )
public ModelBuildingResult build( File pomFile, ModelBuildingRequest request )
throws ModelBuildingException
{
return build( new FileModelSource( pomFile ), pomFile, request, modelResolver );
return build( new FileModelSource( pomFile ), pomFile, request );
}
public ModelBuildingResult build( ModelSource modelSource, ModelBuildingRequest request, ModelResolver modelResolver )
public ModelBuildingResult build( ModelSource modelSource, ModelBuildingRequest request )
throws ModelBuildingException
{
return build( modelSource, null, request, modelResolver );
return build( modelSource, null, request );
}
private ModelBuildingResult build( ModelSource modelSource, File pomFile, ModelBuildingRequest request,
ModelResolver modelResolver )
private ModelBuildingResult build( ModelSource modelSource, File pomFile, ModelBuildingRequest request )
throws ModelBuildingException
{
DefaultModelBuildingResult result = new DefaultModelBuildingResult();
@ -121,7 +120,7 @@ public class DefaultModelBuilder
List<Model> rawModels = new ArrayList<Model>();
List<Model> resultModels = new ArrayList<Model>();
for ( Model current = model; current != null; current = readParent( current, request, modelResolver ) )
for ( Model current = model; current != null; current = readParent( current, request ) )
{
Model resultModel = current;
resultModels.add( resultModel );
@ -148,7 +147,7 @@ public class DefaultModelBuilder
result.setActiveProfiles( rawModel, activeProfiles );
configureResolver( modelResolver, resultModel );
configureResolver( request.getModelResolver(), resultModel );
}
Model superModel = getSuperModel();
@ -272,6 +271,11 @@ public class DefaultModelBuilder
private void configureResolver( ModelResolver modelResolver, Model model )
throws ModelBuildingException
{
if ( modelResolver == null )
{
return;
}
for ( Repository repository : model.getRepositories() )
{
try
@ -311,7 +315,7 @@ public class DefaultModelBuilder
}
}
private Model readParent( Model childModel, ModelBuildingRequest request, ModelResolver modelResolver )
private Model readParent( Model childModel, ModelBuildingRequest request )
throws ModelBuildingException
{
Model parentModel;
@ -324,7 +328,7 @@ public class DefaultModelBuilder
if ( parentModel == null )
{
parentModel = readParentExternally( childModel, request, modelResolver );
parentModel = readParentExternally( childModel, request );
}
}
else
@ -387,11 +391,20 @@ public class DefaultModelBuilder
return candidateModel;
}
private Model readParentExternally( Model childModel, ModelBuildingRequest request, ModelResolver modelResolver )
private Model readParentExternally( Model childModel, ModelBuildingRequest request )
throws ModelBuildingException
{
Parent parent = childModel.getParent();
ModelResolver modelResolver = request.getModelResolver();
if ( modelResolver == null )
{
Exception e = new IllegalArgumentException( "No model resolver provided" );
throw new UnresolvableParentException( "Failed to resolve parent POM " + toId( parent ) + " for POM "
+ toSourceHint( childModel ), e );
}
ModelSource modelSource;
try
{

View File

@ -23,6 +23,8 @@ import java.util.ArrayList;
import java.util.List;
import java.util.Properties;
import org.apache.maven.model.resolution.ModelResolver;
/**
* Collects settings that control building of effective models.
*
@ -44,6 +46,8 @@ public class DefaultModelBuildingRequest
private Properties executionProperties;
private ModelResolver modelResolver;
public DefaultModelBuildingRequest()
{
profiles = new ArrayList<Profile>();
@ -140,4 +144,16 @@ public class DefaultModelBuildingRequest
return this;
}
public ModelResolver getModelResolver()
{
return this.modelResolver;
}
public DefaultModelBuildingRequest setModelResolver( ModelResolver modelResolver )
{
this.modelResolver = modelResolver;
return this;
}
}

View File

@ -38,12 +38,10 @@ public interface ModelBuilder
*
* @param pomFile The POM file of the project to build the effective model from, must not be {@code null}.
* @param request The model building request that holds further settings, must not be {@code null}.
* @param modelResolver The model resolver used to resolve parent POMs that are not locally reachable from the
* project directory, must not be {@code null}.
* @return The result of the model building, never {@code null}.
* @throws ModelBuildingException If the effective model could not be built.
*/
ModelBuildingResult build( File pomFile, ModelBuildingRequest request, ModelResolver modelResolver )
ModelBuildingResult build( File pomFile, ModelBuildingRequest request )
throws ModelBuildingException;
/**
@ -53,11 +51,10 @@ public interface ModelBuilder
*
* @param modelSource The source of the POM, must not be {@code null}.
* @param request The model building request that holds further settings, must not be {@code null}.
* @param modelResolver The model resolver used to resolve parent POMs, must not be {@code null}.
* @return The result of the model building, never {@code null}.
* @throws ModelBuildingException If the effective model could not be built.
*/
ModelBuildingResult build( ModelSource modelSource, ModelBuildingRequest request, ModelResolver modelResolver )
ModelBuildingResult build( ModelSource modelSource, ModelBuildingRequest request )
throws ModelBuildingException;
}

View File

@ -22,6 +22,8 @@ package org.apache.maven.model;
import java.util.List;
import java.util.Properties;
import org.apache.maven.model.resolution.ModelResolver;
/**
* Collects settings that control the building of effective models.
*
@ -127,4 +129,21 @@ public interface ModelBuildingRequest
*/
ModelBuildingRequest setExecutionProperties( Properties executionProperties );
/**
* Gets the model resolver to use for resolution of mixins or parents that are not locally reachable from the
* project directory.
*
* @return The model resolver or {@code null} if not set.
*/
ModelResolver getModelResolver();
/**
* Sets the model resolver to use for resolution of mixins or parents that are not locally reachable from the
* project directory.
*
* @param modelResolver The model resolver to use, may be {@code null}.
* @return This request, never {@code null}.
*/
ModelBuildingRequest setModelResolver( ModelResolver modelResolver );
}