From 73f3c915d1c8c7f49a929ae4f58ab852656f72fe Mon Sep 17 00:00:00 2001 From: Benjamin Bentmann Date: Sat, 6 Jun 2009 10:38:42 +0000 Subject: [PATCH] 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 --- .../maven/project/DefaultProjectBuilder.java | 17 +++-- .../DefaultProjectBuildingRequest.java | 71 +++++++++++++------ .../maven/project/ProjectBuildingRequest.java | 2 - .../maven/model/DefaultModelBuilder.java | 35 ++++++--- .../model/DefaultModelBuildingRequest.java | 16 +++++ .../org/apache/maven/model/ModelBuilder.java | 7 +- .../maven/model/ModelBuildingRequest.java | 19 +++++ 7 files changed, 124 insertions(+), 43 deletions(-) diff --git a/maven-core/src/main/java/org/apache/maven/project/DefaultProjectBuilder.java b/maven-core/src/main/java/org/apache/maven/project/DefaultProjectBuilder.java index 72a6246a8c..f8e014cb40 100644 --- a/maven-core/src/main/java/org/apache/maven/project/DefaultProjectBuilder.java +++ b/maven-core/src/main/java/org/apache/maven/project/DefaultProjectBuilder.java @@ -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 ) diff --git a/maven-core/src/main/java/org/apache/maven/project/DefaultProjectBuildingRequest.java b/maven-core/src/main/java/org/apache/maven/project/DefaultProjectBuildingRequest.java index 6c66fb665e..42b6527440 100644 --- a/maven-core/src/main/java/org/apache/maven/project/DefaultProjectBuildingRequest.java +++ b/maven-core/src/main/java/org/apache/maven/project/DefaultProjectBuildingRequest.java @@ -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 profiles; + + private List activeProfileIds; + + private List inactiveProfileIds; + + private Properties executionProperties; + + public DefaultProjectBuildingRequest() + { + processPlugins = true; + profiles = new ArrayList(); + activeProfileIds = new ArrayList(); + inactiveProfileIds = new ArrayList(); + 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 getActiveProfileIds() { - return modelBuildingRequest.getActiveProfileIds(); + return activeProfileIds; } public void setActiveProfileIds( List activeProfileIds ) { - modelBuildingRequest.setActiveProfileIds( activeProfileIds ); + this.activeProfileIds.clear(); + if ( activeProfileIds != null ) + { + this.activeProfileIds.addAll( activeProfileIds ); + } } public List getInactiveProfileIds() { - return modelBuildingRequest.getInactiveProfileIds(); + return inactiveProfileIds; } public void setInactiveProfileIds( List inactiveProfileIds ) { - modelBuildingRequest.setInactiveProfileIds( inactiveProfileIds ); + this.inactiveProfileIds.clear(); + if ( inactiveProfileIds != null ) + { + this.inactiveProfileIds.addAll( inactiveProfileIds ); + } } public void setProfiles( List 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 getProfiles() { - return modelBuildingRequest.getProfiles(); - } - - public ModelBuildingRequest getModelBuildingRequest() - { - return modelBuildingRequest; + return profiles; } } diff --git a/maven-core/src/main/java/org/apache/maven/project/ProjectBuildingRequest.java b/maven-core/src/main/java/org/apache/maven/project/ProjectBuildingRequest.java index 4420f8cf42..c4d77c9ab7 100644 --- a/maven-core/src/main/java/org/apache/maven/project/ProjectBuildingRequest.java +++ b/maven-core/src/main/java/org/apache/maven/project/ProjectBuildingRequest.java @@ -72,6 +72,4 @@ public interface ProjectBuildingRequest List getProfiles(); - ModelBuildingRequest getModelBuildingRequest(); - } diff --git a/maven-model-builder/src/main/java/org/apache/maven/model/DefaultModelBuilder.java b/maven-model-builder/src/main/java/org/apache/maven/model/DefaultModelBuilder.java index 70a20a0a43..06f92b5930 100644 --- a/maven-model-builder/src/main/java/org/apache/maven/model/DefaultModelBuilder.java +++ b/maven-model-builder/src/main/java/org/apache/maven/model/DefaultModelBuilder.java @@ -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 rawModels = new ArrayList(); List resultModels = new ArrayList(); - 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 { diff --git a/maven-model-builder/src/main/java/org/apache/maven/model/DefaultModelBuildingRequest.java b/maven-model-builder/src/main/java/org/apache/maven/model/DefaultModelBuildingRequest.java index 47a83fe3aa..627aa114eb 100644 --- a/maven-model-builder/src/main/java/org/apache/maven/model/DefaultModelBuildingRequest.java +++ b/maven-model-builder/src/main/java/org/apache/maven/model/DefaultModelBuildingRequest.java @@ -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(); @@ -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; + } + } diff --git a/maven-model-builder/src/main/java/org/apache/maven/model/ModelBuilder.java b/maven-model-builder/src/main/java/org/apache/maven/model/ModelBuilder.java index 76780d8abe..ef6bc2328a 100644 --- a/maven-model-builder/src/main/java/org/apache/maven/model/ModelBuilder.java +++ b/maven-model-builder/src/main/java/org/apache/maven/model/ModelBuilder.java @@ -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; } diff --git a/maven-model-builder/src/main/java/org/apache/maven/model/ModelBuildingRequest.java b/maven-model-builder/src/main/java/org/apache/maven/model/ModelBuildingRequest.java index b9273894dc..47ddf20889 100644 --- a/maven-model-builder/src/main/java/org/apache/maven/model/ModelBuildingRequest.java +++ b/maven-model-builder/src/main/java/org/apache/maven/model/ModelBuildingRequest.java @@ -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 ); + }