From d22c870e0252ea2a192b944c53b57e98baea99bb Mon Sep 17 00:00:00 2001 From: Jason van Zyl Date: Mon, 30 Mar 2009 01:11:02 +0000 Subject: [PATCH] o coming close to something i can easily test git-svn-id: https://svn.apache.org/repos/asf/maven/components/branches/MNG-2766@759818 13f79535-47bb-0310-9956-ffa450edef68 --- maven-core/pom.xml | 47 +-- .../AggregatedBuildFailureException.java | 37 -- .../java/org/apache/maven/DefaultMaven.java | 364 ++++++------------ .../src/main/java/org/apache/maven/Maven.java | 6 +- .../maven/NoGoalsSpecifiedException.java | 20 - .../DefaultMavenExecutionRequest.java | 3 - .../execution/MavenExecutionRequest.java | 3 - .../apache/maven/execution/MavenSession.java | 15 - .../lifecycle/DefaultLifecycleExecutor.java | 53 ++- .../{ => lifecycle}/InvalidTaskException.java | 4 +- .../maven/lifecycle/TaskValidationResult.java | 1 - .../maven/plugin/DefaultPluginManager.java | 161 ++------ .../maven/plugin/MavenPluginCollector.java | 4 +- .../apache/maven/plugin/MojoExecution.java | 24 -- .../maven/AbstractCoreMavenComponentTest.java | 25 +- .../test/java/org/apache/maven/MavenTest.java | 38 ++ .../maven/plugin/PluginManagerTest.java | 37 ++ ...luginParameterExpressionEvaluatorTest.java | 2 - .../org/apache/maven/cli/CLIRequestUtils.java | 1 - .../apache/maven/embedder/MavenEmbedder.java | 13 +- ...DefaultMavenExecutionRequestPopulator.java | 34 -- .../plugin/descriptor/PluginDescriptor.java | 61 +-- 22 files changed, 307 insertions(+), 646 deletions(-) delete mode 100644 maven-core/src/main/java/org/apache/maven/AggregatedBuildFailureException.java delete mode 100644 maven-core/src/main/java/org/apache/maven/NoGoalsSpecifiedException.java rename maven-core/src/main/java/org/apache/maven/{ => lifecycle}/InvalidTaskException.java (89%) create mode 100644 maven-core/src/test/java/org/apache/maven/MavenTest.java diff --git a/maven-core/pom.xml b/maven-core/pom.xml index 7af0352e9f..ecfa073424 100644 --- a/maven-core/pom.xml +++ b/maven-core/pom.xml @@ -20,10 +20,6 @@ maven-core Maven Core - - org.apache.maven - maven-reporting-api - org.apache.maven maven-model @@ -49,14 +45,6 @@ org.apache.maven maven-project-builder - - commons-cli - commons-cli - - - org.codehaus.plexus - plexus-interactivity-api - org.codehaus.plexus plexus-interpolation @@ -69,22 +57,6 @@ org.codehaus.plexus plexus-classworlds - - org.apache.maven.wagon - wagon-file - test - - - easymock - easymock - test - - - org.apache.maven.shared - maven-test-tools - 1.0-alpha-1 - test - org.codehaus.plexus plexus-component-annotations @@ -117,6 +89,17 @@ commons-jxpath commons-jxpath + + + org.apache.maven.wagon + wagon-file + test + + + easymock + easymock + test + @@ -134,14 +117,6 @@ - - maven-surefire-plugin - - - **/testutils/** - - - diff --git a/maven-core/src/main/java/org/apache/maven/AggregatedBuildFailureException.java b/maven-core/src/main/java/org/apache/maven/AggregatedBuildFailureException.java deleted file mode 100644 index fe5813c1f5..0000000000 --- a/maven-core/src/main/java/org/apache/maven/AggregatedBuildFailureException.java +++ /dev/null @@ -1,37 +0,0 @@ -package org.apache.maven; - -import org.apache.maven.plugin.MojoFailureException; - -/** - * Exception which occurs when an @aggregator plugin fails to execute. This - * exception is meant to wrap a {@link MojoFailureException}, and provide - * additional details about the mojo that failed, via {@link MojoBinding} and - * the root directory in which the build executes. - * - * @author jdcasey - * - */ -public class AggregatedBuildFailureException - extends BuildFailureException -{ - - private final String executionRootDirectory; - - public AggregatedBuildFailureException( String executionRootDirectory, - MojoFailureException cause ) - { - super( "Build in root directory: " + executionRootDirectory + " failed during execution of aggregator mojo.", cause ); - - this.executionRootDirectory = executionRootDirectory; - } - - public MojoFailureException getMojoFailureException() - { - return (MojoFailureException) getCause(); - } - - public String getExecutionRootDirectory() - { - return executionRootDirectory; - } -} 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 62a66b7398..3f20a241b1 100644 --- a/maven-core/src/main/java/org/apache/maven/DefaultMaven.java +++ b/maven-core/src/main/java/org/apache/maven/DefaultMaven.java @@ -1,31 +1,24 @@ package org.apache.maven; /* - * Licensed to the Apache Software Foundation (ASF) under one - * or more contributor license agreements. See the NOTICE file - * distributed with this work for additional information - * regarding copyright ownership. The ASF licenses this file - * to you under the Apache License, Version 2.0 (the - * "License"); you may not use this file except in compliance - * with the License. You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, - * software distributed under the License is distributed on an - * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY - * KIND, either express or implied. See the License for the - * specific language governing permissions and limitations - * under the License. + * Licensed to the Apache Software Foundation (ASF) under one or more contributor license + * agreements. See the NOTICE file distributed with this work for additional information regarding + * copyright ownership. The ASF licenses this file to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance with the License. You may obtain a + * copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software distributed under the License + * is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express + * or implied. See the License for the specific language governing permissions and limitations under + * the License. */ - import java.io.File; import java.io.IOException; import java.util.ArrayList; -import java.util.Collections; -import java.util.Date; -import java.util.Iterator; +import java.util.Arrays; import java.util.List; import org.apache.maven.artifact.versioning.DefaultArtifactVersion; @@ -34,9 +27,7 @@ import org.apache.maven.execution.DuplicateProjectException; import org.apache.maven.execution.MavenExecutionRequest; import org.apache.maven.execution.MavenExecutionResult; import org.apache.maven.execution.MavenSession; -import org.apache.maven.execution.ReactorManager; import org.apache.maven.execution.RuntimeInformation; -import org.apache.maven.lifecycle.Lifecycle; import org.apache.maven.lifecycle.LifecycleExecutionException; import org.apache.maven.lifecycle.LifecycleExecutor; import org.apache.maven.project.MavenProject; @@ -47,16 +38,12 @@ import org.apache.maven.reactor.MissingModuleException; import org.codehaus.plexus.PlexusContainer; import org.codehaus.plexus.component.annotations.Component; import org.codehaus.plexus.component.annotations.Requirement; -import org.codehaus.plexus.logging.Logger; -import org.codehaus.plexus.util.FileUtils; import org.codehaus.plexus.util.Os; import org.codehaus.plexus.util.StringUtils; import org.codehaus.plexus.util.dag.CycleDetectedException; /** * @author Jason van Zyl - * @version $Id$ - * @todo EventDispatcher should be a component as it is internal to maven. */ @Component(role = Maven.class) public class DefaultMaven @@ -64,7 +51,7 @@ public class DefaultMaven { @Requirement protected MavenProjectBuilder projectBuilder; - + @Requirement protected LifecycleExecutor lifecycleExecutor; @@ -74,14 +61,11 @@ public class DefaultMaven @Requirement protected RuntimeInformation runtimeInformation; - @Requirement - private Logger logger; - public List getLifecyclePhases() { return lifecycleExecutor.getLifecyclePhases(); } - + // ---------------------------------------------------------------------- // Project execution // ---------------------------------------------------------------------- @@ -92,28 +76,17 @@ public class DefaultMaven public MavenExecutionResult execute( MavenExecutionRequest request ) { - request.setStartTime( new Date() ); - MavenExecutionResult result = new DefaultMavenExecutionResult(); - ReactorManager reactorManager = createReactorManager( request, result ); + MavenSession session = createMavenSession( request, result ); - if ( result.hasExceptions() ) + if ( session.getReactorManager().hasMultipleProjects() ) { - return result; - } + //logger.info( "Reactor build order: " ); - MavenSession session = createSession( request, reactorManager ); - - logger.info( "Scanning for projects..." ); - - if ( reactorManager.hasMultipleProjects() ) - { - logger.info( "Reactor build order: " ); - - for( MavenProject project : reactorManager.getSortedProjects() ) + for ( MavenProject project : session.getReactorManager().getSortedProjects() ) { - logger.info( " " + project.getName() ); + //logger.info( " " + project.getName() ); } } @@ -134,18 +107,21 @@ public class DefaultMaven return result; } - result.setTopologicallySortedProjects( reactorManager.getSortedProjects() ); + result.setTopologicallySortedProjects( session.getReactorManager().getSortedProjects() ); - result.setProject( reactorManager.getTopLevelProject() ); + result.setProject( session.getReactorManager().getTopLevelProject() ); return result; - } - - public ReactorManager createReactorManager( MavenExecutionRequest request, MavenExecutionResult result ) + } + + public MavenSession createMavenSession( MavenExecutionRequest request, MavenExecutionResult result ) { - List projects; + MavenSession session; + + List projects; + try - { + { projects = getProjects( request ); if ( projects.isEmpty() ) @@ -166,13 +142,11 @@ public class DefaultMaven return null; } - ReactorManager reactorManager; - try - { - reactorManager = new ReactorManager( projects, request.getReactorFailureBehavior() ); - - result.setReactorManager( reactorManager ); + { + session = new MavenSession( container, request, projects ); + + result.setReactorManager( session.getReactorManager() ); } catch ( CycleDetectedException e ) { @@ -191,205 +165,101 @@ public class DefaultMaven return null; } - return reactorManager; - } - - protected List getProjects( MavenExecutionRequest request ) - throws MavenExecutionException - { - List projects; - - List files; - try - { - files = getProjectFiles( request ); - } - catch ( IOException e ) - { - throw new MavenExecutionException( "Error selecting project files for the reactor: " + e.getMessage(), e ); - } - - projects = collectProjects( files, request, !request.useReactor() ); - - return projects; - } - - private List collectProjects( List files, MavenExecutionRequest request, boolean isRoot ) - throws MavenExecutionException - { - List projects = new ArrayList( files.size() ); - - if ( !files.isEmpty() ) - { - for ( Iterator iterator = files.iterator(); iterator.hasNext(); ) - { - File file = (File) iterator.next(); - - MavenProject project; - - try - { - project = projectBuilder.build( file, request.getProjectBuildingConfiguration() ); - } - catch ( ProjectBuildingException e ) - { - throw new MavenExecutionException( "Failed to build MavenProject instance for: " + file, file, e ); - } - - if ( isRoot ) - { - project.setExecutionRoot( true ); - } - - if ( ( project.getPrerequisites() != null ) && ( project.getPrerequisites().getMaven() != null ) ) - { - DefaultArtifactVersion version = new DefaultArtifactVersion( project.getPrerequisites().getMaven() ); - - if ( runtimeInformation.getApplicationInformation().getVersion().compareTo( version ) < 0 ) - { - throw new MavenExecutionException( - "Unable to build project '" + file + - "; it requires Maven version " + version.toString(), file ); - } - } - - if ( ( project.getModules() != null ) && !project.getModules().isEmpty() && request.isRecursive() ) - { - // TODO: Really should fail if it was not? What if it is aggregating - eg "ear"? - project.setPackaging( "pom" ); - - File basedir = file.getParentFile(); - - // Initial ordering is as declared in the modules section - List moduleFiles = new ArrayList( project.getModules().size() ); - - for ( Iterator i = project.getModules().iterator(); i.hasNext(); ) - { - String name = (String) i.next(); - - if ( StringUtils.isEmpty( StringUtils.trim( name ) ) ) - { - logger.warn( "Empty module detected. Please check you don't have any empty module definitions in your POM." ); - - continue; - } - - File moduleFile = new File( basedir, name ); - if ( !moduleFile.exists() ) - { - throw new MissingModuleException( name, moduleFile, file ); - } - else if ( moduleFile.isDirectory() ) - { - moduleFile = new File( basedir, name + "/" + Maven.POMv4 ); - } - - if ( Os.isFamily( Os.FAMILY_WINDOWS ) ) - { - // we don't canonicalize on unix to avoid interfering with symlinks - - try - { - moduleFile = moduleFile.getCanonicalFile(); - } - catch ( IOException e ) - { - throw new MavenExecutionException( "Unable to canonicalize file name " + moduleFile, e ); - } - } - else - { - moduleFile = new File( moduleFile.toURI().normalize() ); - } - - moduleFiles.add( moduleFile ); - } - - List collectedProjects = collectProjects( moduleFiles, request, false ); - - projects.addAll( collectedProjects ); - project.setCollectedProjects( collectedProjects ); - } - projects.add( project ); - } - } - - return projects; - } - - // ---------------------------------------------------------------------- - // Methods used by all execution request handlers - // ---------------------------------------------------------------------- - - //!! We should probably have the execution request handler create the - // session as - // the session type would be specific to the request i.e. having a project - // or not. - - protected MavenSession createSession( MavenExecutionRequest request, ReactorManager reactorManager ) - { - MavenSession session = new MavenSession( container, request ); - return session; } - private List getProjectFiles( MavenExecutionRequest request ) - throws IOException + protected List getProjects( MavenExecutionRequest request ) + throws MavenExecutionException { - List files = Collections.EMPTY_LIST; + List files = Arrays.asList( new File[] { new File( request.getPomFile() ) } ); - File userDir = new File( request.getBaseDirectory() ); + List projects = collectProjects( files, request ); - if ( request.useReactor() ) + return projects; + } + + private List collectProjects( List files, MavenExecutionRequest request ) + throws MavenExecutionException + { + List projects = new ArrayList(); + + for ( File file : files ) { - String includes = System.getProperty( "maven.reactor.includes", "**/" + POMv4 ); + MavenProject project; - String excludes = System.getProperty( "maven.reactor.excludes", POMv4 ); - - files = FileUtils.getFiles( userDir, includes, excludes ); - - // make sure there is consistent ordering on all platforms, rather than using the filesystem ordering - Collections.sort( files ); - } - else if ( request.getPom() != null ) - { - File projectFile = request.getPom().getAbsoluteFile(); - - if ( projectFile.exists() ) + try { - files = Collections.singletonList( projectFile ); + project = projectBuilder.build( file, request.getProjectBuildingConfiguration() ); + } + catch ( ProjectBuildingException e ) + { + throw new MavenExecutionException( "Failed to build MavenProject instance for: " + file, file, e ); + } + + if ( ( project.getPrerequisites() != null ) && ( project.getPrerequisites().getMaven() != null ) ) + { + DefaultArtifactVersion version = new DefaultArtifactVersion( project.getPrerequisites().getMaven() ); + + if ( runtimeInformation.getApplicationInformation().getVersion().compareTo( version ) < 0 ) + { + throw new MavenExecutionException( "Unable to build project '" + file + "; it requires Maven version " + version.toString(), file ); + } + } + + if ( ( project.getModules() != null ) && !project.getModules().isEmpty() && request.isRecursive() ) + { + File basedir = file.getParentFile(); + + List moduleFiles = new ArrayList(); + + for ( String name : project.getModules() ) + { + if ( StringUtils.isEmpty( StringUtils.trim( name ) ) ) + { + continue; + } + + File moduleFile = new File( basedir, name ); + + if ( !moduleFile.exists() ) + { + throw new MissingModuleException( name, moduleFile, file ); + } + else if ( moduleFile.isDirectory() ) + { + moduleFile = new File( basedir, name + "/" + Maven.POMv4 ); + } + + if ( Os.isFamily( Os.FAMILY_WINDOWS ) ) + { + // we don't canonicalize on unix to avoid interfering with symlinks + try + { + moduleFile = moduleFile.getCanonicalFile(); + } + catch ( IOException e ) + { + throw new MavenExecutionException( "Unable to canonicalize file name " + moduleFile, e ); + } + } + else + { + moduleFile = new File( moduleFile.toURI().normalize() ); + } + + moduleFiles.add( moduleFile ); + } + + List collectedProjects = collectProjects( moduleFiles, request ); + + projects.addAll( collectedProjects ); + + project.setCollectedProjects( collectedProjects ); } - } - else - { - File projectFile = new File( userDir, POMv4 ); - if ( projectFile.exists() ) - { - files = Collections.singletonList( projectFile ); - } + projects.add( project ); } - return files; - } - - // Lifecycle phases - - public List getBuildLifecyclePhases() - { - // TODO Auto-generated method stub - return null; - } - - public List getCleanLifecyclePhases() - { - // TODO Auto-generated method stub - return null; - } - - public List getSiteLifecyclePhases() - { - // TODO Auto-generated method stub - return null; + return projects; } } diff --git a/maven-core/src/main/java/org/apache/maven/Maven.java b/maven-core/src/main/java/org/apache/maven/Maven.java index 2158117119..4f6c32fec1 100644 --- a/maven-core/src/main/java/org/apache/maven/Maven.java +++ b/maven-core/src/main/java/org/apache/maven/Maven.java @@ -31,13 +31,9 @@ import org.apache.maven.execution.ReactorManager; */ public interface Maven { - //jvz!! CLI pollution String POMv4 = "pom.xml"; MavenExecutionResult execute( MavenExecutionRequest request ); - - //!!jvz This should not be exposed but is as a result of the buildProjectWithDependencies - ReactorManager createReactorManager( MavenExecutionRequest request, MavenExecutionResult result ); - List getLifecyclePhases(); + List getLifecyclePhases(); } \ No newline at end of file diff --git a/maven-core/src/main/java/org/apache/maven/NoGoalsSpecifiedException.java b/maven-core/src/main/java/org/apache/maven/NoGoalsSpecifiedException.java deleted file mode 100644 index 3a31e36e6f..0000000000 --- a/maven-core/src/main/java/org/apache/maven/NoGoalsSpecifiedException.java +++ /dev/null @@ -1,20 +0,0 @@ -package org.apache.maven; - -/** - * Exception indicating that Maven has no instructions for what to execute. This - * happens when no goals are specified on the command line, and there is no - * defaultGoal specified in the POM itself. - * - * @author jdcasey - * - */ -public class NoGoalsSpecifiedException - extends BuildFailureException -{ - - public NoGoalsSpecifiedException( String message ) - { - super( message ); - } - -} diff --git a/maven-core/src/main/java/org/apache/maven/execution/DefaultMavenExecutionRequest.java b/maven-core/src/main/java/org/apache/maven/execution/DefaultMavenExecutionRequest.java index c76a759c02..46bb4499fe 100644 --- a/maven-core/src/main/java/org/apache/maven/execution/DefaultMavenExecutionRequest.java +++ b/maven-core/src/main/java/org/apache/maven/execution/DefaultMavenExecutionRequest.java @@ -31,7 +31,6 @@ import org.apache.maven.wagon.events.TransferListener; /** * @author Jason van Zyl - * @version $Id$ */ public class DefaultMavenExecutionRequest implements MavenExecutionRequest @@ -133,12 +132,10 @@ public class DefaultMavenExecutionRequest copy.setGlobalSettingsFile( original.getGlobalSettingsFile() ); copy.setBaseDirectory( new File( original.getBaseDirectory() ) ); copy.setGoals( original.getGoals() ); - copy.setUseReactor( original.useReactor() ); copy.setRecursive( original.isRecursive() ); copy.setPom( original.getPom() ); copy.setReactorFailureBehavior( original.getReactorFailureBehavior() ); copy.setProperties( original.getProperties() ); - copy.setStartTime( original.getStartTime() ); copy.setShowErrors( original.isShowErrors() ); copy.setActiveProfiles( original.getActiveProfiles()); copy.setInactiveProfiles( original.getInactiveProfiles()); diff --git a/maven-core/src/main/java/org/apache/maven/execution/MavenExecutionRequest.java b/maven-core/src/main/java/org/apache/maven/execution/MavenExecutionRequest.java index 86d354e8ee..bf5a52e481 100644 --- a/maven-core/src/main/java/org/apache/maven/execution/MavenExecutionRequest.java +++ b/maven-core/src/main/java/org/apache/maven/execution/MavenExecutionRequest.java @@ -101,9 +101,6 @@ public interface MavenExecutionRequest MavenExecutionRequest setReactorFailureBehavior( String failureBehavior ); String getReactorFailureBehavior(); - MavenExecutionRequest setUseReactor( boolean useReactor ); - boolean useReactor(); - // Recursive (really to just process the top-level POM) MavenExecutionRequest setRecursive( boolean recursive ); boolean isRecursive(); 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 abae02bb21..d5db3dc186 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 @@ -19,22 +19,15 @@ package org.apache.maven.execution; * under the License. */ -import java.util.ArrayList; import java.util.Arrays; -import java.util.Collections; -import java.util.Date; -import java.util.LinkedHashMap; import java.util.List; import java.util.Map; import java.util.Properties; -import java.util.Set; import org.apache.maven.artifact.repository.ArtifactRepository; -import org.apache.maven.plugin.descriptor.MojoDescriptor; import org.apache.maven.plugin.descriptor.PluginDescriptor; import org.apache.maven.project.MavenProject; import org.apache.maven.project.ProjectBuilderConfiguration; -import org.apache.maven.reporting.MavenReport; import org.apache.maven.settings.Settings; import org.codehaus.plexus.PlexusContainer; import org.codehaus.plexus.util.dag.CycleDetectedException; @@ -125,11 +118,6 @@ public class MavenSession return request.isProjectPresent(); } - public Date getStartTime() - { - return request.getStartTime(); - } - public MavenExecutionRequest getRequest() { return request; @@ -140,9 +128,6 @@ public class MavenSession this.currentProject = currentProject; } - /** - * Return the current project for use in a mojo execution. - */ public MavenProject getCurrentProject() { return currentProject; 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 f379f1f170..db2ebfc557 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 @@ -29,6 +29,10 @@ import org.apache.maven.execution.ReactorManager; import org.apache.maven.lifecycle.mapping.LifecycleMapping; import org.apache.maven.model.Plugin; import org.apache.maven.model.PluginExecution; +import org.apache.maven.plugin.MojoExecution; +import org.apache.maven.plugin.MojoFailureException; +import org.apache.maven.plugin.PluginConfigurationException; +import org.apache.maven.plugin.PluginExecutionException; import org.apache.maven.plugin.PluginLoaderException; import org.apache.maven.plugin.PluginManager; import org.apache.maven.plugin.descriptor.MojoDescriptor; @@ -184,35 +188,30 @@ public class DefaultLifecycleExecutor { List lifecyclePlan = calculateLifecyclePlan( task, session ); - for( MojoDescriptor md : lifecyclePlan ) + for ( MojoDescriptor mojoDescriptor : lifecyclePlan ) { - System.out.println( md.getFullGoalName() ); - } - - /* - for ( MojoExecution mojoExecution : goals ) - { - MojoDescriptor mojoDescriptor = mojoExecution.getMojoDescriptor(); - - try - { - pluginManager.executeMojo( project, mojoExecution, session ); - } - catch ( PluginManagerException e ) - { - throw new LifecycleExecutionException( "Internal error in the plugin manager executing goal '" + mojoDescriptor.getId() + "': " + e.getMessage(), e ); - } - catch ( MojoFailureException e ) - { - throw new BuildFailureException( e.getMessage(), e ); - } - catch ( PluginConfigurationException e ) - { - throw new LifecycleExecutionException( e.getMessage(), e ); - } - } - */ + MojoExecution mojoExecution = new MojoExecution( mojoDescriptor ); + try + { + pluginManager.executeMojo( project, mojoExecution, session ); + } + catch ( MojoFailureException e ) + { + // If the mojo actually screws up, like a compilation error + throw new LifecycleExecutionException( "Error executing goal.", e ); + } + catch ( PluginExecutionException e ) + { + // This looks like a duplicate + throw new LifecycleExecutionException( "Error executing goal.", e ); + } + catch ( PluginConfigurationException e ) + { + // If the mojo can't actually be configured + throw new LifecycleExecutionException( "Error executing goal.", e ); + } + } } // 1. Find the lifecycle given the phase (default lifecycle when given install) diff --git a/maven-core/src/main/java/org/apache/maven/InvalidTaskException.java b/maven-core/src/main/java/org/apache/maven/lifecycle/InvalidTaskException.java similarity index 89% rename from maven-core/src/main/java/org/apache/maven/InvalidTaskException.java rename to maven-core/src/main/java/org/apache/maven/lifecycle/InvalidTaskException.java index af3f243375..5f832a4d6d 100644 --- a/maven-core/src/main/java/org/apache/maven/InvalidTaskException.java +++ b/maven-core/src/main/java/org/apache/maven/lifecycle/InvalidTaskException.java @@ -1,6 +1,6 @@ -package org.apache.maven; +package org.apache.maven.lifecycle; -import org.apache.maven.lifecycle.TaskValidationResult; +import org.apache.maven.BuildFailureException; /** * Exception which occurs when a task or goal is specified on the command line diff --git a/maven-core/src/main/java/org/apache/maven/lifecycle/TaskValidationResult.java b/maven-core/src/main/java/org/apache/maven/lifecycle/TaskValidationResult.java index 945a2ec240..2b181741d3 100644 --- a/maven-core/src/main/java/org/apache/maven/lifecycle/TaskValidationResult.java +++ b/maven-core/src/main/java/org/apache/maven/lifecycle/TaskValidationResult.java @@ -1,6 +1,5 @@ package org.apache.maven.lifecycle; -import org.apache.maven.InvalidTaskException; import org.apache.maven.plugin.InvalidPluginException; import org.apache.maven.plugin.PluginLoaderException; 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 26a1f4b8ce..2ab5ffc10a 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 @@ -29,7 +29,6 @@ import java.util.List; import java.util.Map; import java.util.Set; -//TODO: all of this needs to be translated into the RepositorySystem or removed. import org.apache.maven.ArtifactFilterManager; import org.apache.maven.artifact.Artifact; import org.apache.maven.artifact.ArtifactUtils; @@ -48,7 +47,6 @@ import org.apache.maven.artifact.resolver.filter.AndArtifactFilter; import org.apache.maven.artifact.resolver.filter.ArtifactFilter; import org.apache.maven.artifact.resolver.filter.ScopeArtifactFilter; import org.apache.maven.artifact.versioning.DefaultArtifactVersion; -// end import org.apache.maven.execution.MavenSession; import org.apache.maven.execution.RuntimeInformation; import org.apache.maven.model.Dependency; @@ -59,7 +57,6 @@ import org.apache.maven.monitor.logging.DefaultLog; import org.apache.maven.plugin.descriptor.MojoDescriptor; import org.apache.maven.plugin.descriptor.Parameter; import org.apache.maven.plugin.descriptor.PluginDescriptor; -import org.apache.maven.plugin.descriptor.PluginDescriptorBuilder; import org.apache.maven.project.DuplicateArtifactAttachmentException; import org.apache.maven.project.MavenProject; import org.apache.maven.project.MavenProjectBuilder; @@ -69,7 +66,6 @@ import org.apache.maven.project.builder.PomInterpolatorTag; import org.apache.maven.project.builder.PomTransformer; import org.apache.maven.project.builder.ProjectUri; import org.apache.maven.project.path.PathTranslator; -import org.apache.maven.reporting.MavenReport; import org.apache.maven.repository.RepositorySystem; import org.apache.maven.repository.VersionNotFoundException; import org.apache.maven.shared.model.InterpolatorProperty; @@ -107,8 +103,6 @@ public class DefaultPluginManager @Requirement protected PlexusContainer container; - protected PluginDescriptorBuilder pluginDescriptorBuilder; - @Requirement protected ArtifactFilterManager coreArtifactFilterManager; @@ -136,11 +130,6 @@ public class DefaultPluginManager private Map pluginDefinitionsByPrefix = new HashMap(); - public DefaultPluginManager() - { - pluginDescriptorBuilder = new PluginDescriptorBuilder(); - } - // This should be template method code for allowing subclasses to assist in contributing search/hint information public Plugin findPluginForPrefix( String prefix, MavenProject project, MavenSession session ) { @@ -151,18 +140,20 @@ public class DefaultPluginManager throws PluginLoaderException { PluginDescriptor pluginDescriptor = pluginCollector.getPluginDescriptor( plugin ); - - if ( pluginDescriptor != null ) + + // There are cases where plugins are discovered but not actually populated. These are edge cases where you are working in the IDE on + // Maven itself so this speaks to a problem we have with the system not starting entirely clean. + if ( pluginDescriptor != null && pluginDescriptor.getClassRealm() != null ) { return pluginDescriptor; } try - { + { resolvePluginVersion( plugin, project, session ); addPlugin( plugin, project, session ); - + pluginDescriptor = pluginCollector.getPluginDescriptor( plugin ); project.addPlugin( plugin ); @@ -194,9 +185,6 @@ public class DefaultPluginManager throw new PluginLoaderException( plugin, "Failed to load plugin. Reason: " + e.getMessage(), e ); } } - - // We need to load different - private Map pluginRealms = new HashMap(); private String pluginKey( Plugin plugin ) { @@ -205,9 +193,7 @@ public class DefaultPluginManager protected void addPlugin( Plugin plugin, MavenProject project, MavenSession session ) throws ArtifactNotFoundException, ArtifactResolutionException, PluginManagerException, InvalidPluginException, PluginVersionResolutionException - { - logger.debug( "Resolving plugin artifact " + plugin.getKey() + " from " + project.getRemoteArtifactRepositories() ); - + { ArtifactRepository localRepository = session.getLocalRepository(); MavenProject pluginProject = buildPluginProject( plugin, localRepository, project.getRemoteArtifactRepositories() ); @@ -224,94 +210,43 @@ public class DefaultPluginManager ArtifactResolutionResult result = repositorySystem.resolve( request ); - resolutionErrorHandler.throwErrors( request, result ); - - // ---------------------------------------------------------------------------- - // Get the dependencies for the Plugin - // ---------------------------------------------------------------------------- + resolutionErrorHandler.throwErrors( request, result ); - // the only Plugin instance which will have dependencies is the one specified in the project. - // We need to look for a Plugin instance there, in case the instance we're using didn't come from - // the project. - - // Trying to cache the version of the plugin for a project? - Plugin projectPlugin = project.getPlugin( plugin.getKey() ); + ClassRealm pluginRealm = container.createChildRealm( pluginKey( plugin ) ); - if ( projectPlugin == null ) + Set pluginArtifacts = getPluginArtifacts( pluginArtifact, plugin, project, session.getLocalRepository() ); + + for ( Artifact a : pluginArtifacts ) { - projectPlugin = plugin; - } - else if ( projectPlugin.getVersion() == null || Artifact.RELEASE_VERSION.equals( projectPlugin.getVersion() ) ) - { - projectPlugin.setVersion( plugin.getVersion() ); - } - - // associate the realm with the descriptor - - ClassRealm pluginRealm = pluginRealms.get( pluginKey( plugin ) ); - - if ( pluginRealm == null ) - { - pluginRealm = container.createChildRealm( pluginKey( plugin ) ); - - Set pluginArtifacts = getPluginArtifacts( pluginArtifact, projectPlugin, project, session.getLocalRepository() ); - - for( Artifact a : pluginArtifacts ) - { - try - { - pluginRealm.addURL( a.getFile().toURI().toURL() ); - } - catch ( MalformedURLException e ) - { - // Not going to happen - } - } - try { - logger.debug( "Discovering components in realm: " + pluginRealm ); - - container.discoverComponents( pluginRealm ); + pluginRealm.addURL( a.getFile().toURI().toURL() ); } - catch ( PlexusConfigurationException e ) + catch ( MalformedURLException e ) { - throw new PluginContainerException( plugin, pluginRealm, "Error scanning plugin realm for components.", e ); + // Not going to happen } - catch ( ComponentRepositoryException e ) - { - throw new PluginContainerException( plugin, pluginRealm, "Error scanning plugin realm for components.", e ); - } - - // ---------------------------------------------------------------------------- - // The PluginCollector will now know about the plugin we are trying to load - // ---------------------------------------------------------------------------- - - logger.debug( "Checking for plugin descriptor for: " + projectPlugin.getKey() + " with version: " + projectPlugin.getVersion() + " in collector: " + pluginCollector ); - - PluginDescriptor pluginDescriptor = pluginCollector.getPluginDescriptor( projectPlugin ); - - if ( pluginDescriptor == null ) - { - if ( ( pluginRealm != null ) && logger.isDebugEnabled() ) - { - logger.debug( "Plugin Realm: " ); - pluginRealm.display(); - } - - logger.debug( "Removing invalid plugin realm." ); - - throw new PluginManagerException( projectPlugin, "The plugin descriptor for the plugin " + projectPlugin.getKey() + " was not found. Should have been in realm: " + pluginRealm - + " Please verify that the plugin JAR " + pluginArtifact.getFile() + " is intact.", project ); - } - - pluginDescriptor.setPluginArtifact( pluginArtifact ); - // Make sure it's just the plugin artifacts - pluginDescriptor.setArtifacts( new ArrayList( pluginArtifacts ) ); - pluginDescriptor.setClassRealm( pluginRealm ); - - pluginRealms.put( pluginKey( plugin ), pluginRealm ); } + + try + { + logger.debug( "Discovering components in realm: " + pluginRealm ); + + container.discoverComponents( pluginRealm ); + } + catch ( PlexusConfigurationException e ) + { + throw new PluginContainerException( plugin, pluginRealm, "Error scanning plugin realm for components.", e ); + } + catch ( ComponentRepositoryException e ) + { + throw new PluginContainerException( plugin, pluginRealm, "Error scanning plugin realm for components.", e ); + } + + PluginDescriptor pluginDescriptor = pluginCollector.getPluginDescriptor( plugin ); + pluginDescriptor.setPluginArtifact( pluginArtifact ); + pluginDescriptor.setArtifacts( new ArrayList( pluginArtifacts ) ); + pluginDescriptor.setClassRealm( pluginRealm ); } // plugin artifact @@ -563,12 +498,8 @@ public class DefaultPluginManager { mojo = getConfiguredMojo( session, dom, project, false, mojoExecution ); - //dispatcher.dispatchStart( event, goalExecId ); - pluginRealm = pluginDescriptor.getClassRealm(); - logger.debug( "Setting context classloader for plugin to: " + pluginRealm.getId() + " (instance is: " + pluginRealm + ")" ); - Thread.currentThread().setContextClassLoader( pluginRealm ); // NOTE: DuplicateArtifactAttachmentException is currently unchecked, so be careful removing this try/catch! @@ -627,7 +558,6 @@ public class DefaultPluginManager PluginDescriptor pluginDescriptor = mojoDescriptor.getPluginDescriptor(); ClassRealm pluginRealm = pluginDescriptor.getClassRealm(); - System.out.println( "XXX Looking for class realm " + pluginDescriptor.getArtifactId() + ":" + pluginDescriptor.getVersion() ); // We are forcing the use of the plugin realm for all lookups that might occur during // the lifecycle that is part of the lookup. Here we are specifically trying to keep @@ -652,15 +582,6 @@ public class DefaultPluginManager + pluginDescriptor.getPluginLookupKey() + "'", e ); } - if ( mojo != null ) - { - logger.debug( "Looked up - " + mojo + " - " + mojo.getClass().getClassLoader() ); - } - else - { - logger.warn( "No luck." ); - } - if ( mojo instanceof ContextEnabled ) { Map pluginContext = session.getPluginContext( pluginDescriptor, project ); @@ -775,7 +696,7 @@ public class DefaultPluginManager private PlexusConfiguration extractMojoConfiguration( PlexusConfiguration mergedConfiguration, MojoDescriptor mojoDescriptor ) { - Map parameterMap = mojoDescriptor.getParameterMap(); + Map parameterMap = mojoDescriptor.getParameterMap(); PlexusConfiguration[] mergedChildren = mergedConfiguration.getChildren(); @@ -1288,10 +1209,8 @@ public class DefaultPluginManager if ( project.getBuildPlugins() != null ) { - for ( Iterator it = project.getBuildPlugins().iterator(); it.hasNext() && ( version == null ); ) + for ( Plugin p : project.getBuildPlugins() ) { - Plugin p = (Plugin) it.next(); - if ( groupId.equals( p.getGroupId() ) && artifactId.equals( p.getArtifactId() ) ) { version = p.getVersion(); @@ -1538,6 +1457,10 @@ public class DefaultPluginManager public MojoDescriptor getMojoDescriptor( Plugin plugin, String goal, MavenSession session ) throws PluginLoaderException { - return loadPlugin( plugin, session.getCurrentProject(), session ).getMojo( goal ); + PluginDescriptor pluginDescriptor = loadPlugin( plugin, session.getCurrentProject(), session ); + + MojoDescriptor mojoDescriptor = pluginDescriptor.getMojo( goal ); + + return mojoDescriptor; } } diff --git a/maven-core/src/main/java/org/apache/maven/plugin/MavenPluginCollector.java b/maven-core/src/main/java/org/apache/maven/plugin/MavenPluginCollector.java index 025d998639..f130ee5866 100644 --- a/maven-core/src/main/java/org/apache/maven/plugin/MavenPluginCollector.java +++ b/maven-core/src/main/java/org/apache/maven/plugin/MavenPluginCollector.java @@ -54,11 +54,11 @@ public class MavenPluginCollector PluginDescriptor pluginDescriptor = (PluginDescriptor) componentSetDescriptor; String key = constructPluginKey( pluginDescriptor ); - + if ( !pluginsInProcess.contains( key ) ) { pluginsInProcess.add( key ); - + pluginDescriptors.put( key, pluginDescriptor ); } } diff --git a/maven-core/src/main/java/org/apache/maven/plugin/MojoExecution.java b/maven-core/src/main/java/org/apache/maven/plugin/MojoExecution.java index 92509207ca..0c94fccc51 100644 --- a/maven-core/src/main/java/org/apache/maven/plugin/MojoExecution.java +++ b/maven-core/src/main/java/org/apache/maven/plugin/MojoExecution.java @@ -39,10 +39,6 @@ public class MojoExecution private Xpp3Dom configuration; - private List forkedExecutions = new ArrayList(); - - private List reports; - public MojoExecution( MojoDescriptor mojoDescriptor ) { this.mojoDescriptor = mojoDescriptor; @@ -79,26 +75,6 @@ public class MojoExecution return configuration; } - public void addMojoExecution( MojoExecution execution ) - { - forkedExecutions.add( execution ); - } - - public void setReports( List reports ) - { - this.reports = reports; - } - - public List getReports() - { - return reports; - } - - public List getForkedExecutions() - { - return forkedExecutions; - } - public void setConfiguration( Xpp3Dom configuration ) { this.configuration = configuration; diff --git a/maven-core/src/test/java/org/apache/maven/AbstractCoreMavenComponentTest.java b/maven-core/src/test/java/org/apache/maven/AbstractCoreMavenComponentTest.java index 1097032a6c..993511f038 100644 --- a/maven-core/src/test/java/org/apache/maven/AbstractCoreMavenComponentTest.java +++ b/maven-core/src/test/java/org/apache/maven/AbstractCoreMavenComponentTest.java @@ -66,28 +66,37 @@ public abstract class AbstractCoreMavenComponentTest containerConfiguration.addComponentDiscoveryListener( new MavenPluginCollector() ); } - // - remove the event monitor, just default or get rid of it - // layer the creation of a project builder configuration with a request, but this will need to be - // a Maven subclass because we don't want to couple maven to the project builder which we need to - // separate. - protected MavenSession createMavenSession( File pom ) + protected MavenExecutionRequest createMavenExecutionRequest( File pom ) throws Exception { ArtifactRepository localRepository = repositorySystem.createDefaultLocalRepository(); ArtifactRepository remoteRepository = repositorySystem.createDefaultRemoteRepository(); MavenExecutionRequest request = new DefaultMavenExecutionRequest() + .setPom( pom ) .setProjectPresent( true ) .setPluginGroups( Arrays.asList( new String[] { "org.apache.maven.plugins" } ) ) .setLocalRepository( localRepository ) .setRemoteRepositories( Arrays.asList( remoteRepository ) ) .setGoals( Arrays.asList( new String[] { "package" } ) ) - .setProperties( new Properties() ); + .setProperties( new Properties() ); + + return request; + } + + // layer the creation of a project builder configuration with a request, but this will need to be + // a Maven subclass because we don't want to couple maven to the project builder which we need to + // separate. + protected MavenSession createMavenSession( File pom ) + throws Exception + { + MavenExecutionRequest request = createMavenExecutionRequest( pom ); ProjectBuilderConfiguration configuration = new DefaultProjectBuilderConfiguration() - .setLocalRepository( localRepository ) - .setRemoteRepositories( Arrays.asList( remoteRepository ) ); + .setLocalRepository( request.getLocalRepository() ) + .setRemoteRepositories( request.getRemoteRepositories() ); + // We just need to use the configuration, and get the POM from that. MavenProject project = projectBuilder.build( pom, configuration ); MavenSession session = new MavenSession( getContainer(), request, project ); diff --git a/maven-core/src/test/java/org/apache/maven/MavenTest.java b/maven-core/src/test/java/org/apache/maven/MavenTest.java new file mode 100644 index 0000000000..a33343ff2c --- /dev/null +++ b/maven-core/src/test/java/org/apache/maven/MavenTest.java @@ -0,0 +1,38 @@ +package org.apache.maven; + +import java.io.File; + +import org.apache.maven.execution.MavenExecutionRequest; +import org.apache.maven.execution.MavenExecutionResult; +import org.codehaus.plexus.component.annotations.Requirement; + +public class MavenTest + extends AbstractCoreMavenComponentTest +{ + @Requirement + private Maven maven; + + protected void setUp() + throws Exception + { + super.setUp(); + maven = lookup( Maven.class ); + } + + protected String getProjectsDirectory() + { + return "src/test/projects/lifecycle-executor"; + } + + // ----------------------------------------------------------------------------------------------- + // + // ----------------------------------------------------------------------------------------------- + + public void testMaven() + throws Exception + { + File pom = getProject( "project-with-additional-lifecycle-elements" ); + MavenExecutionRequest request = createMavenExecutionRequest( pom ); + MavenExecutionResult result = maven.execute( request ); + } +} diff --git a/maven-core/src/test/java/org/apache/maven/plugin/PluginManagerTest.java b/maven-core/src/test/java/org/apache/maven/plugin/PluginManagerTest.java index a502f92b3e..16e64cf643 100644 --- a/maven-core/src/test/java/org/apache/maven/plugin/PluginManagerTest.java +++ b/maven-core/src/test/java/org/apache/maven/plugin/PluginManagerTest.java @@ -25,6 +25,43 @@ public class PluginManagerTest return "src/test/projects/lifecycle-executor"; } + public void testPluginLoading() + throws Exception + { + MavenSession session = createMavenSession( getProject( "project-with-inheritance" ) ); + Plugin plugin = new Plugin(); + plugin.setGroupId( "org.codehaus.plexus" ); + plugin.setArtifactId( "plexus-component-metadata" ); + plugin.setVersion( "1.0-beta-3.0.6" ); + PluginDescriptor pluginDescriptor = pluginManager.loadPlugin( plugin, session.getCurrentProject(), session ); + assertNotNull( pluginDescriptor ); + assertNotNull( pluginDescriptor.getClassRealm() ); + } + + public void testMojoDescriptorRetrieval() + throws Exception + { + MavenSession session = createMavenSession( getProject( "project-with-inheritance" ) ); + String goal = "generate-metadata"; + Plugin plugin = new Plugin(); + plugin.setGroupId( "org.codehaus.plexus" ); + plugin.setArtifactId( "plexus-component-metadata" ); + plugin.setVersion( "1.0-beta-3.0.6" ); + + MojoDescriptor mojoDescriptor = pluginManager.getMojoDescriptor( plugin, goal, session ); + assertNotNull( mojoDescriptor ); + assertEquals( "generate-metadata", mojoDescriptor.getGoal() ); + assertNotNull( mojoDescriptor.getRealm() ); + mojoDescriptor.getRealm().display(); + + PluginDescriptor pluginDescriptor = mojoDescriptor.getPluginDescriptor(); + assertNotNull( pluginDescriptor ); + assertEquals( "org.codehaus.plexus", pluginDescriptor.getGroupId() ); + assertEquals( "plexus-component-metadata", pluginDescriptor.getArtifactId() ); + assertEquals( "1.0-beta-3.0.6", pluginDescriptor.getVersion() ); + assertNotNull( pluginDescriptor.getClassRealm() ); + } + // ----------------------------------------------------------------------------------------------- // Tests which exercise the lifecycle executor when it is dealing with individual goals. // ----------------------------------------------------------------------------------------------- diff --git a/maven-core/src/test/java/org/apache/maven/plugin/PluginParameterExpressionEvaluatorTest.java b/maven-core/src/test/java/org/apache/maven/plugin/PluginParameterExpressionEvaluatorTest.java index 343e623aad..e7d31751fc 100644 --- a/maven-core/src/test/java/org/apache/maven/plugin/PluginParameterExpressionEvaluatorTest.java +++ b/maven-core/src/test/java/org/apache/maven/plugin/PluginParameterExpressionEvaluatorTest.java @@ -23,7 +23,6 @@ package org.apache.maven.plugin; import java.io.File; import java.util.ArrayList; import java.util.Collections; -import java.util.Date; import java.util.List; import java.util.Map; import java.util.Properties; @@ -345,7 +344,6 @@ public class PluginParameterExpressionEvaluatorTest { MavenExecutionRequest request = new DefaultMavenExecutionRequest() .setProperties( new Properties() ) - .setStartTime( new Date() ) .setGoals( Collections.EMPTY_LIST ) .setBaseDirectory( new File( "" ) ) .setLocalRepository( repo ); diff --git a/maven-embedder/src/main/java/org/apache/maven/cli/CLIRequestUtils.java b/maven-embedder/src/main/java/org/apache/maven/cli/CLIRequestUtils.java index b75a85762a..a3fc6228fd 100644 --- a/maven-embedder/src/main/java/org/apache/maven/cli/CLIRequestUtils.java +++ b/maven-embedder/src/main/java/org/apache/maven/cli/CLIRequestUtils.java @@ -229,7 +229,6 @@ public final class CLIRequestUtils .setUserProperties( userProperties ) // optional .setReactorFailureBehavior( reactorFailureBehaviour ) // default: fail fast .setRecursive( recursive ) // default: true - .setUseReactor( useReactor ) // default: false .setShowErrors( showErrors ) // default: false .setInteractiveMode( interactive ) // default: true .setOffline( offline ) // default: false diff --git a/maven-embedder/src/main/java/org/apache/maven/embedder/MavenEmbedder.java b/maven-embedder/src/main/java/org/apache/maven/embedder/MavenEmbedder.java index e2147ca1ff..00264345a5 100644 --- a/maven-embedder/src/main/java/org/apache/maven/embedder/MavenEmbedder.java +++ b/maven-embedder/src/main/java/org/apache/maven/embedder/MavenEmbedder.java @@ -23,7 +23,6 @@ import java.io.File; import java.io.IOException; import java.io.Reader; import java.io.Writer; -import java.util.Arrays; import java.util.List; import org.apache.maven.Maven; @@ -34,7 +33,6 @@ import org.apache.maven.execution.DefaultMavenExecutionResult; import org.apache.maven.execution.MavenExecutionRequest; import org.apache.maven.execution.MavenExecutionResult; import org.apache.maven.execution.MavenSession; -import org.apache.maven.execution.ReactorManager; import org.apache.maven.model.Model; import org.apache.maven.model.Plugin; import org.apache.maven.model.io.xpp3.MavenXpp3Reader; @@ -64,7 +62,6 @@ import org.codehaus.plexus.MutablePlexusContainer; import org.codehaus.plexus.PlexusContainer; import org.codehaus.plexus.PlexusContainerException; import org.codehaus.plexus.classworlds.ClassWorld; -import org.codehaus.plexus.classworlds.realm.ClassRealm; import org.codehaus.plexus.component.repository.exception.ComponentLookupException; import org.codehaus.plexus.logging.LoggerManager; import org.codehaus.plexus.util.IOUtil; @@ -116,8 +113,6 @@ public class MavenEmbedder private ClassWorld classWorld; - private ClassRealm realm; - private MavenEmbedderLogger logger; private boolean activateSystemManager; @@ -329,12 +324,16 @@ public class MavenEmbedder return result.addException( e ); } + //TODO: need to check for circularity problems here even though this is purely downloading and for IDEs they will take care of circularity problems. + + /* ReactorManager reactorManager = maven.createReactorManager( request, result ); if ( result.hasExceptions() ) { return result; } + */ MavenProjectBuildingResult projectBuildingResult; @@ -347,6 +346,7 @@ public class MavenEmbedder return result.addException( e ); } + /* if ( reactorManager.hasMultipleProjects() ) { result.setProject( projectBuildingResult.getProject() ); @@ -359,6 +359,7 @@ public class MavenEmbedder result.setTopologicallySortedProjects( Arrays.asList( new MavenProject[]{ projectBuildingResult.getProject()} ) ); } + */ result.setArtifactResolutionResult( projectBuildingResult.getArtifactResolutionResult() ); @@ -605,7 +606,7 @@ public class MavenEmbedder return container; } - public List getLifecyclePhases() + public List getLifecyclePhases() { return maven.getLifecyclePhases(); } diff --git a/maven-embedder/src/main/java/org/apache/maven/embedder/execution/DefaultMavenExecutionRequestPopulator.java b/maven-embedder/src/main/java/org/apache/maven/embedder/execution/DefaultMavenExecutionRequestPopulator.java index 39230101f0..21e2bc13cd 100644 --- a/maven-embedder/src/main/java/org/apache/maven/embedder/execution/DefaultMavenExecutionRequestPopulator.java +++ b/maven-embedder/src/main/java/org/apache/maven/embedder/execution/DefaultMavenExecutionRequestPopulator.java @@ -80,8 +80,6 @@ public class DefaultMavenExecutionRequestPopulator { executionProperties( request, configuration ); - pom( request, configuration ); - settings( request, configuration ); localRepository( request, configuration ); @@ -252,38 +250,6 @@ public class DefaultMavenExecutionRequestPopulator request.setRemoteRepositories( repositorySystem.getMirrors( request.getRemoteRepositories() ) ); } - // ------------------------------------------------------------------------ - // POM - // ------------------------------------------------------------------------ - - private void pom( MavenExecutionRequest request, Configuration configuration ) - { - // ------------------------------------------------------------------------ - // POM - // - // If we are not given a specific POM file, but passed a base directory - // then we will use a release POM in the directory provide, or and then - // look for the standard POM. - // ------------------------------------------------------------------------ - - if ( ( request.getPom() != null ) && ( request.getPom().getParentFile() != null ) ) - { - request.setBaseDirectory( request.getPom().getParentFile() ); - } - else if ( ( request.getPom() == null ) && ( request.getBaseDirectory() != null ) ) - { - // Look for a release POM - File pom = new File( request.getBaseDirectory(), Maven.POMv4 ); - - request.setPom( pom ); - } - // TODO: Is this correct? - else if ( request.getBaseDirectory() == null ) - { - request.setBaseDirectory( new File( System.getProperty( "user.dir" ) ) ); - } - } - // ------------------------------------------------------------------------ // Settings // ------------------------------------------------------------------------ diff --git a/maven-plugin-api/src/main/java/org/apache/maven/plugin/descriptor/PluginDescriptor.java b/maven-plugin-api/src/main/java/org/apache/maven/plugin/descriptor/PluginDescriptor.java index ef36b0b515..1d23be47d3 100644 --- a/maven-plugin-api/src/main/java/org/apache/maven/plugin/descriptor/PluginDescriptor.java +++ b/maven-plugin-api/src/main/java/org/apache/maven/plugin/descriptor/PluginDescriptor.java @@ -19,27 +19,17 @@ package org.apache.maven.plugin.descriptor; * under the License. */ -import org.apache.maven.artifact.Artifact; -import org.apache.maven.artifact.ArtifactUtils; -import org.apache.maven.plugin.lifecycle.Lifecycle; -import org.apache.maven.plugin.lifecycle.LifecycleConfiguration; -import org.apache.maven.plugin.lifecycle.io.xpp3.LifecycleMappingsXpp3Reader; -import org.codehaus.plexus.classworlds.realm.ClassRealm; -import org.codehaus.plexus.component.repository.ComponentSetDescriptor; -import org.codehaus.plexus.util.IOUtil; -import org.codehaus.plexus.util.xml.pull.XmlPullParserException; - -import java.io.FileNotFoundException; -import java.io.IOException; -import java.io.InputStream; -import java.io.InputStreamReader; import java.util.Collections; -import java.util.HashMap; import java.util.Iterator; import java.util.List; import java.util.Map; import java.util.Set; +import org.apache.maven.artifact.Artifact; +import org.apache.maven.artifact.ArtifactUtils; +import org.codehaus.plexus.classworlds.realm.ClassRealm; +import org.codehaus.plexus.component.repository.ComponentSetDescriptor; + /** * @author Jason van Zyl */ @@ -60,8 +50,6 @@ public class PluginDescriptor private List artifacts; - private Map lifecycleMappings; - private ClassRealm classRealm; // calculated on-demand. @@ -266,9 +254,11 @@ public class PluginDescriptor // changes above not being propogated to the map MojoDescriptor mojoDescriptor = null; + for ( Iterator i = getMojos().iterator(); i.hasNext() && mojoDescriptor == null; ) { MojoDescriptor desc = (MojoDescriptor) i.next(); + if ( goal.equals( desc.getGoal() ) ) { mojoDescriptor = desc; @@ -277,43 +267,6 @@ public class PluginDescriptor return mojoDescriptor; } - public Lifecycle getLifecycleMapping( String lifecycle ) - throws IOException, XmlPullParserException - { - if ( lifecycleMappings == null ) - { - LifecycleMappingsXpp3Reader reader = new LifecycleMappingsXpp3Reader(); - InputStreamReader r = null; - LifecycleConfiguration config; - - try - { - InputStream resourceAsStream = classRealm.getResourceAsStream( "/META-INF/maven/lifecycle.xml" ); - if ( resourceAsStream == null ) - { - throw new FileNotFoundException( "Unable to find /META-INF/maven/lifecycle.xml in the plugin" ); - } - r = new InputStreamReader( resourceAsStream ); - config = reader.read( r, true ); - } - finally - { - IOUtil.close( r ); - } - - Map map = new HashMap(); - - for ( Iterator i = config.getLifecycles().iterator(); i.hasNext(); ) - { - Lifecycle l = (Lifecycle) i.next(); - map.put( l.getId(), l ); - } - - lifecycleMappings = map; - } - return (Lifecycle) lifecycleMappings.get( lifecycle ); - } - public void setClassRealm( ClassRealm classRealm ) { this.classRealm = classRealm;