From 13709defd00f969cecfabb1e37a22cb843581c9c Mon Sep 17 00:00:00 2001 From: Benjamin Bentmann Date: Tue, 11 Aug 2009 18:45:28 +0000 Subject: [PATCH] o Delayed injection of plugin default configuration until the project is actually executed to allow for plugin resolution from the reactor git-svn-id: https://svn.apache.org/repos/asf/maven/components/trunk@803243 13f79535-47bb-0310-9956-ffa450edef68 --- .../java/org/apache/maven/DefaultMaven.java | 19 +++++++++++++++---- .../lifecycle/DefaultLifecycleExecutor.java | 3 +++ .../maven/project/DefaultProjectBuilder.java | 2 +- .../DefaultProjectBuildingRequest.java | 14 ++++++++++++++ .../maven/project/ProjectBuildingRequest.java | 8 ++++++-- 5 files changed, 39 insertions(+), 7 deletions(-) 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 290e1ca4f1..723e50b23b 100644 --- a/maven-core/src/main/java/org/apache/maven/DefaultMaven.java +++ b/maven-core/src/main/java/org/apache/maven/DefaultMaven.java @@ -42,6 +42,7 @@ import org.apache.maven.project.MavenProject; import org.apache.maven.project.ProjectBuilder; import org.apache.maven.project.ProjectBuildingException; +import org.apache.maven.project.ProjectBuildingRequest; import org.apache.maven.project.ProjectBuildingResult; import org.apache.maven.repository.DelegatingLocalArtifactRepository; import org.codehaus.plexus.PlexusContainer; @@ -215,8 +216,11 @@ private MavenExecutionResult processResult( MavenExecutionResult result, Excepti ExceptionHandler handler = new DefaultExceptionHandler(); ExceptionSummary es = handler.handleException( e ); - - result.addException( e ); + + if ( !result.getExceptions().contains( e ) ) + { + result.addException( e ); + } result.setExceptionSummary( es ); @@ -288,8 +292,15 @@ private Map getProjectMap( List projects ) private void collectProjects( List projects, List files, MavenExecutionRequest request ) throws MavenExecutionException, ProjectBuildingException { - List results = - projectBuilder.build( files, request.isRecursive(), request.getProjectBuildingRequest() ); + ProjectBuildingRequest projectBuildingRequest = request.getProjectBuildingRequest(); + + /* + * NOTE: We delay plugin configuration processing until a project is actually build to allow plugins to be + * resolved from the reactor. + */ + projectBuildingRequest.setProcessPluginConfiguration( false ); + + List results = projectBuilder.build( files, request.isRecursive(), projectBuildingRequest ); for ( ProjectBuildingResult result : results ) { 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 b139f1ecb0..ed3c5bd77a 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 @@ -176,6 +176,9 @@ public void execute( MavenSession session ) { session.setCurrentProject( currentProject ); + repositoryRequest.setRemoteRepositories( currentProject.getPluginArtifactRepositories() ); + populateDefaultConfigurationForPlugins( currentProject.getBuild().getPlugins(), repositoryRequest ); + ClassRealm projectRealm = currentProject.getClassRealm(); if ( projectRealm != null ) { 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 6da7d4ed94..85b67959a3 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 @@ -499,7 +499,7 @@ private MavenProject toProject( ModelBuildingResult result, ProjectBuildingReque try { - if ( configuration.isProcessPlugins() ) + if ( configuration.isProcessPlugins() && configuration.isProcessPluginConfiguration() ) { RepositoryRequest repositoryRequest = new DefaultRepositoryRequest(); repositoryRequest.setLocalRepository( configuration.getLocalRepository() ); 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 22d3ccb612..9e7f614feb 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 @@ -52,6 +52,8 @@ public class DefaultProjectBuildingRequest private boolean processPlugins; + private boolean processPluginConfiguration; + private List profiles; private List activeProfileIds; @@ -67,6 +69,7 @@ public class DefaultProjectBuildingRequest public DefaultProjectBuildingRequest() { processPlugins = true; + processPluginConfiguration = true; profiles = new ArrayList(); activeProfileIds = new ArrayList(); inactiveProfileIds = new ArrayList(); @@ -221,6 +224,17 @@ public ProjectBuildingRequest setProcessPlugins( boolean processPlugins ) return this; } + public boolean isProcessPluginConfiguration() + { + return processPluginConfiguration; + } + + public ProjectBuildingRequest setProcessPluginConfiguration( boolean processPluginConfiguration ) + { + this.processPluginConfiguration = processPluginConfiguration; + return this; + } + public ProjectBuildingRequest setValidationLevel( int validationLevel ) { this.validationLevel = validationLevel; 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 1a6c512c5c..d6cd0dee68 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 @@ -92,11 +92,15 @@ public interface ProjectBuildingRequest void setTopLevelProjectForReactor(MavenProject mavenProject); MavenProject getTopLevelProjectFromReactor(); - + ProjectBuildingRequest setProcessPlugins( boolean processPlugins ); - + boolean isProcessPlugins(); + ProjectBuildingRequest setProcessPluginConfiguration( boolean processPluginConfiguration ); + + boolean isProcessPluginConfiguration(); + /** * Controls the level of validation to perform on processed models. By default, models are validated in strict mode. *