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
This commit is contained in:
Benjamin Bentmann 2009-08-11 18:45:28 +00:00
parent 87704b69b8
commit 13709defd0
5 changed files with 39 additions and 7 deletions

View File

@ -42,6 +42,7 @@ import org.apache.maven.model.building.ModelProblem;
import org.apache.maven.project.MavenProject; import org.apache.maven.project.MavenProject;
import org.apache.maven.project.ProjectBuilder; import org.apache.maven.project.ProjectBuilder;
import org.apache.maven.project.ProjectBuildingException; import org.apache.maven.project.ProjectBuildingException;
import org.apache.maven.project.ProjectBuildingRequest;
import org.apache.maven.project.ProjectBuildingResult; import org.apache.maven.project.ProjectBuildingResult;
import org.apache.maven.repository.DelegatingLocalArtifactRepository; import org.apache.maven.repository.DelegatingLocalArtifactRepository;
import org.codehaus.plexus.PlexusContainer; import org.codehaus.plexus.PlexusContainer;
@ -215,8 +216,11 @@ public class DefaultMaven
ExceptionHandler handler = new DefaultExceptionHandler(); ExceptionHandler handler = new DefaultExceptionHandler();
ExceptionSummary es = handler.handleException( e ); ExceptionSummary es = handler.handleException( e );
result.addException( e ); if ( !result.getExceptions().contains( e ) )
{
result.addException( e );
}
result.setExceptionSummary( es ); result.setExceptionSummary( es );
@ -288,8 +292,15 @@ public class DefaultMaven
private void collectProjects( List<MavenProject> projects, List<File> files, MavenExecutionRequest request ) private void collectProjects( List<MavenProject> projects, List<File> files, MavenExecutionRequest request )
throws MavenExecutionException, ProjectBuildingException throws MavenExecutionException, ProjectBuildingException
{ {
List<ProjectBuildingResult> results = ProjectBuildingRequest projectBuildingRequest = request.getProjectBuildingRequest();
projectBuilder.build( files, request.isRecursive(), 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<ProjectBuildingResult> results = projectBuilder.build( files, request.isRecursive(), projectBuildingRequest );
for ( ProjectBuildingResult result : results ) for ( ProjectBuildingResult result : results )
{ {

View File

@ -176,6 +176,9 @@ public class DefaultLifecycleExecutor
{ {
session.setCurrentProject( currentProject ); session.setCurrentProject( currentProject );
repositoryRequest.setRemoteRepositories( currentProject.getPluginArtifactRepositories() );
populateDefaultConfigurationForPlugins( currentProject.getBuild().getPlugins(), repositoryRequest );
ClassRealm projectRealm = currentProject.getClassRealm(); ClassRealm projectRealm = currentProject.getClassRealm();
if ( projectRealm != null ) if ( projectRealm != null )
{ {

View File

@ -499,7 +499,7 @@ public class DefaultProjectBuilder
try try
{ {
if ( configuration.isProcessPlugins() ) if ( configuration.isProcessPlugins() && configuration.isProcessPluginConfiguration() )
{ {
RepositoryRequest repositoryRequest = new DefaultRepositoryRequest(); RepositoryRequest repositoryRequest = new DefaultRepositoryRequest();
repositoryRequest.setLocalRepository( configuration.getLocalRepository() ); repositoryRequest.setLocalRepository( configuration.getLocalRepository() );

View File

@ -52,6 +52,8 @@ public class DefaultProjectBuildingRequest
private boolean processPlugins; private boolean processPlugins;
private boolean processPluginConfiguration;
private List<Profile> profiles; private List<Profile> profiles;
private List<String> activeProfileIds; private List<String> activeProfileIds;
@ -67,6 +69,7 @@ public class DefaultProjectBuildingRequest
public DefaultProjectBuildingRequest() public DefaultProjectBuildingRequest()
{ {
processPlugins = true; processPlugins = true;
processPluginConfiguration = true;
profiles = new ArrayList<Profile>(); profiles = new ArrayList<Profile>();
activeProfileIds = new ArrayList<String>(); activeProfileIds = new ArrayList<String>();
inactiveProfileIds = new ArrayList<String>(); inactiveProfileIds = new ArrayList<String>();
@ -221,6 +224,17 @@ public class DefaultProjectBuildingRequest
return this; return this;
} }
public boolean isProcessPluginConfiguration()
{
return processPluginConfiguration;
}
public ProjectBuildingRequest setProcessPluginConfiguration( boolean processPluginConfiguration )
{
this.processPluginConfiguration = processPluginConfiguration;
return this;
}
public ProjectBuildingRequest setValidationLevel( int validationLevel ) public ProjectBuildingRequest setValidationLevel( int validationLevel )
{ {
this.validationLevel = validationLevel; this.validationLevel = validationLevel;

View File

@ -92,11 +92,15 @@ public interface ProjectBuildingRequest
void setTopLevelProjectForReactor(MavenProject mavenProject); void setTopLevelProjectForReactor(MavenProject mavenProject);
MavenProject getTopLevelProjectFromReactor(); MavenProject getTopLevelProjectFromReactor();
ProjectBuildingRequest setProcessPlugins( boolean processPlugins ); ProjectBuildingRequest setProcessPlugins( boolean processPlugins );
boolean isProcessPlugins(); 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. * Controls the level of validation to perform on processed models. By default, models are validated in strict mode.
* *