diff --git a/maven-core/src/main/java/org/apache/maven/BuildFailureException.java b/maven-core/src/main/java/org/apache/maven/BuildFailureException.java
index fd772a8bd0..5aef0f2360 100644
--- a/maven-core/src/main/java/org/apache/maven/BuildFailureException.java
+++ b/maven-core/src/main/java/org/apache/maven/BuildFailureException.java
@@ -25,8 +25,27 @@ package org.apache.maven;
public class BuildFailureException
extends Exception
{
+ private String longMessage;
+
public BuildFailureException( String message )
{
super( message );
}
+
+ public BuildFailureException( String message, String longMessage )
+ {
+ super( message );
+ this.longMessage = longMessage;
+ }
+
+ public BuildFailureException( String message, String longMessage, Throwable cause )
+ {
+ super( message, cause );
+ this.longMessage = longMessage;
+ }
+
+ public String getLongMessage()
+ {
+ return longMessage;
+ }
}
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 52d275e310..04f87e0f20 100644
--- a/maven-core/src/main/java/org/apache/maven/DefaultMaven.java
+++ b/maven-core/src/main/java/org/apache/maven/DefaultMaven.java
@@ -18,11 +18,10 @@ package org.apache.maven;
import org.apache.maven.artifact.manager.WagonManager;
import org.apache.maven.artifact.repository.ArtifactRepository;
-import org.apache.maven.artifact.resolver.ArtifactNotFoundException;
import org.apache.maven.artifact.resolver.ArtifactResolutionException;
import org.apache.maven.artifact.versioning.DefaultArtifactVersion;
+import org.apache.maven.execution.BuildFailure;
import org.apache.maven.execution.MavenExecutionRequest;
-import org.apache.maven.execution.MavenExecutionResponse;
import org.apache.maven.execution.MavenSession;
import org.apache.maven.execution.ReactorManager;
import org.apache.maven.execution.RuntimeInformation;
@@ -31,8 +30,6 @@ import org.apache.maven.lifecycle.LifecycleExecutor;
import org.apache.maven.model.Profile;
import org.apache.maven.monitor.event.EventDispatcher;
import org.apache.maven.monitor.event.MavenEvents;
-import org.apache.maven.plugin.MojoExecutionException;
-import org.apache.maven.plugin.MojoFailureException;
import org.apache.maven.profiles.ProfileManager;
import org.apache.maven.profiles.activation.ProfileActivationException;
import org.apache.maven.project.MavenProject;
@@ -71,14 +68,11 @@ import java.util.TimeZone;
/**
* @author Jason van Zyl
* @version $Id$
- * @todo unify error reporting. We should return one response, always - and let the CLI decide how to render it. The reactor response should contain individual project responses
*/
public class DefaultMaven
extends AbstractLogEnabled
implements Maven, Contextualizable
{
- public static File userDir = new File( System.getProperty( "user.dir" ) );
-
// ----------------------------------------------------------------------
// Components
// ----------------------------------------------------------------------
@@ -103,8 +97,103 @@ public class DefaultMaven
// Project execution
// ----------------------------------------------------------------------
- public MavenExecutionResponse execute( MavenExecutionRequest request )
- throws SettingsConfigurationException, MavenExecutionException
+ public void execute( MavenExecutionRequest request )
+ throws MavenExecutionException
+ {
+ EventDispatcher dispatcher = request.getEventDispatcher();
+
+ String event = MavenEvents.REACTOR_EXECUTION;
+
+ dispatcher.dispatchStart( event, request.getBaseDirectory() );
+
+ try
+ {
+ ReactorManager rm = doExecute( request, dispatcher );
+
+ // TODO: shoul all the logging be left to the CLI?
+ logReactorSummary( rm );
+
+ if ( rm.hasBuildFailures() )
+ {
+ logErrors( rm, request.isShowErrors() );
+ }
+ else
+ {
+ logSuccess( rm );
+ }
+
+ stats( request.getStartTime() );
+
+ line();
+
+ dispatcher.dispatchEnd( event, request.getBaseDirectory() );
+ }
+ catch ( LifecycleExecutionException e )
+ {
+ dispatcher.dispatchError( event, request.getBaseDirectory(), e );
+
+ logError( e, request.isShowErrors() );
+
+ stats( request.getStartTime() );
+
+ line();
+
+ throw new MavenExecutionException( e.getMessage(), e );
+ }
+ catch ( BuildFailureException e )
+ {
+ dispatcher.dispatchError( event, request.getBaseDirectory(), e );
+
+ logFailure( e, request.isShowErrors() );
+
+ stats( request.getStartTime() );
+
+ line();
+
+ throw new MavenExecutionException( e.getMessage(), e );
+ }
+ catch ( Throwable t )
+ {
+ dispatcher.dispatchError( event, request.getBaseDirectory(), t );
+
+ logFatal( t );
+
+ stats( request.getStartTime() );
+
+ line();
+
+ throw new MavenExecutionException( "Error executing project within the reactor", t );
+ }
+ }
+
+ private void logErrors( ReactorManager rm, boolean showErrors )
+ {
+ for ( Iterator it = rm.getSortedProjects().iterator(); it.hasNext(); )
+ {
+ MavenProject project = (MavenProject) it.next();
+
+ if ( rm.hasBuildFailure( project ) )
+ {
+ BuildFailure buildFailure = rm.getBuildFailure( project );
+
+ line();
+
+ getLogger().info(
+ "Error for project: " + project.getName() + " (during " + buildFailure.getTask() + ")" );
+
+ line();
+
+ logDiagnostics( buildFailure.getCause() );
+
+ logTrace( buildFailure.getCause(), showErrors );
+
+ line();
+ }
+ }
+ }
+
+ private ReactorManager doExecute( MavenExecutionRequest request, EventDispatcher dispatcher )
+ throws MavenExecutionException, BuildFailureException, LifecycleExecutionException
{
if ( request.getSettings().isOffline() )
{
@@ -147,12 +236,10 @@ public class DefaultMaven
{
throw new MavenExecutionException( "Unable to configure Maven for execution", e );
}
-
- EventDispatcher dispatcher = request.getEventDispatcher();
-
- String event = MavenEvents.REACTOR_EXECUTION;
-
- dispatcher.dispatchStart( event, request.getBaseDirectory() );
+ catch ( SettingsConfigurationException e )
+ {
+ throw new MavenExecutionException( "Unable to configure Maven for execution", e );
+ }
ProfileManager globalProfileManager = request.getGlobalProfileManager();
@@ -161,44 +248,11 @@ public class DefaultMaven
getLogger().info( "Scanning for projects..." );
boolean foundProjects = true;
- List projects;
- try
+ List projects = getProjects( request, globalProfileManager );
+ if ( projects.isEmpty() )
{
- List files = getProjectFiles( request );
-
- projects = collectProjects( files, request.getLocalRepository(), request.isRecursive(),
- request.getSettings(), globalProfileManager, !request.isReactorActive() );
-
- // the reasoning here is that the list is still unsorted according to dependency, so the first project
- // SHOULD BE the top-level, or the one we want to start with if we're doing an aggregated build.
-
- if ( projects.isEmpty() )
- {
- MavenProject superProject = projectBuilder.buildStandaloneSuperProject( request.getLocalRepository() );
- projects.add( superProject );
-
- foundProjects = false;
- }
- }
- catch ( IOException e )
- {
- throw new MavenExecutionException( "Error processing projects for the reactor: ", e );
- }
- catch ( ArtifactResolutionException e )
- {
- return dispatchErrorResponse( dispatcher, event, request.getBaseDirectory(), e );
- }
- catch ( ProjectBuildingException e )
- {
- return dispatchErrorResponse( dispatcher, event, request.getBaseDirectory(), e );
- }
- catch ( ProfileActivationException e )
- {
- return dispatchErrorResponse( dispatcher, event, request.getBaseDirectory(), e );
- }
- catch ( BuildFailureException e )
- {
- return dispatchErrorResponse( dispatcher, event, request.getBaseDirectory(), e );
+ projects.add( getSuperProject( request ) );
+ foundProjects = false;
}
ReactorManager rm;
@@ -215,7 +269,8 @@ public class DefaultMaven
}
catch ( CycleDetectedException e )
{
- return dispatchErrorResponse( dispatcher, event, request.getBaseDirectory(), e );
+ throw new MavenExecutionException(
+ "The projects in the reactor contain a cyclic reference: " + e.getMessage(), e );
}
if ( rm.hasMultipleProjects() )
@@ -233,113 +288,56 @@ public class DefaultMaven
session.setUsingPOMsFromFilesystem( foundProjects );
- try
- {
- MavenExecutionResponse response = lifecycleExecutor.execute( session, rm, dispatcher );
+ lifecycleExecutor.execute( session, rm, dispatcher );
- // TODO: is this perhaps more appropriate in the CLI?
- if ( response.isExecutionFailure() )
- {
- dispatcher.dispatchError( event, request.getBaseDirectory(), response.getException() );
-
- // TODO: yuck! Revisit when cleaning up the exception handling from the top down
- Throwable exception = response.getException();
-
- // TODO: replace all handling by buildfailureexception/mavenexecutionexception or lifecycleexecutionexception
- if ( exception instanceof BuildFailureException )
- {
- logFailure( response, rm, exception, null );
- }
- else if ( exception instanceof MojoFailureException )
- {
- MojoFailureException e = (MojoFailureException) exception;
-
- logFailure( response, rm, e, e.getLongMessage() );
- }
- else if ( exception instanceof MojoExecutionException )
- {
- // TODO: replace by above
- if ( exception.getCause() == null )
- {
- MojoExecutionException e = (MojoExecutionException) exception;
-
- logFailure( response, rm, e, e.getLongMessage() );
- }
- else
- {
- // TODO: throw exceptions like this, so "failures" are just that
- logError( response );
- }
- }
- else if ( exception instanceof ArtifactNotFoundException )
- {
- logFailure( response, rm, exception, null );
- }
- else
- {
- // TODO: this should be a "FATAL" exception, reported to the
- // developers - however currently a LOT of
- // "user" errors fall through the cracks (like invalid POMs, as
- // one example)
- logError( response );
- }
- }
- else
- {
- logSuccess( response, rm );
- }
-
- dispatcher.dispatchEnd( event, request.getBaseDirectory() );
-
- return response;
- }
- catch ( LifecycleExecutionException e )
- {
- logFatal( e );
-
- dispatcher.dispatchError( event, request.getBaseDirectory(), e );
-
- throw new MavenExecutionException( "Error executing project within the reactor", e );
- }
+ return rm;
}
- private void writeReactorSummary( ReactorManager rm )
+ private MavenProject getSuperProject( MavenExecutionRequest request )
+ throws MavenExecutionException
{
- // -------------------------
- // Reactor Summary:
- // -------------------------
- // o project-name...........FAILED
- // o project2-name..........SKIPPED (dependency build failed or was skipped)
- // o project-3-name.........SUCCESS
-
- line();
- getLogger().info( "Reactor Summary:" );
- line();
-
- for ( Iterator it = rm.getSortedProjects().iterator(); it.hasNext(); )
+ MavenProject superProject;
+ try
{
- MavenProject project = (MavenProject) it.next();
+ superProject = projectBuilder.buildStandaloneSuperProject( request.getLocalRepository() );
- if ( rm.hasBuildFailure( project ) )
- {
- logReactorSummaryLine( project.getName(), "FAILED", rm.getBuildFailure( project ).getTime() );
- }
- else if ( rm.isBlackListed( project ) )
- {
- logReactorSummaryLine( project.getName(), "SKIPPED (dependency build failed or was skipped)" );
- }
- else if ( rm.hasBuildSuccess( project ) )
- {
- logReactorSummaryLine( project.getName(), "SUCCESS", rm.getBuildSuccess( project ).getTime() );
- }
- else
- {
- logReactorSummaryLine( project.getName(), "NOT BUILT" );
- }
}
+ catch ( ProjectBuildingException e )
+ {
+ throw new MavenExecutionException( e.getMessage(), e );
+ }
+ return superProject;
+ }
- getLogger().info( "" );
- getLogger().info( "" );
+ private List getProjects( MavenExecutionRequest request, ProfileManager globalProfileManager )
+ throws MavenExecutionException, BuildFailureException
+ {
+ List projects;
+ try
+ {
+ List files = getProjectFiles( request );
+
+ projects = collectProjects( files, request.getLocalRepository(), request.isRecursive(),
+ request.getSettings(), globalProfileManager, !request.isReactorActive() );
+
+ }
+ catch ( IOException e )
+ {
+ throw new MavenExecutionException( "Error processing projects for the reactor: " + e.getMessage(), e );
+ }
+ catch ( ArtifactResolutionException e )
+ {
+ throw new MavenExecutionException( e.getMessage(), e );
+ }
+ catch ( ProjectBuildingException e )
+ {
+ throw new MavenExecutionException( e.getMessage(), e );
+ }
+ catch ( ProfileActivationException e )
+ {
+ throw new MavenExecutionException( e.getMessage(), e );
+ }
+ return projects;
}
private void logReactorSummaryLine( String name, String status )
@@ -396,20 +394,6 @@ public class DefaultMaven
return fmt.format( new Date( time ) );
}
- private MavenExecutionResponse dispatchErrorResponse( EventDispatcher dispatcher, String event,
- String baseDirectory, Exception e )
- {
- dispatcher.dispatchError( event, baseDirectory, e );
-
- MavenExecutionResponse response = new MavenExecutionResponse();
- response.setStart( new Date() );
- response.setFinish( new Date() );
- response.setException( e );
- logError( response );
-
- return response;
- }
-
private List collectProjects( List files, ArtifactRepository localRepository, boolean recursive, Settings settings,
ProfileManager globalProfileManager, boolean isRoot )
throws ArtifactResolutionException, ProjectBuildingException, ProfileActivationException,
@@ -606,134 +590,141 @@ public class DefaultMaven
{
line();
- getLogger().error( "FATAL ERROR" );
+ getLogger().info( "FATAL ERROR" );
line();
- diagnoseError( error );
+ logDiagnostics( error );
- line();
-
- getLogger().error( "FATAL ERROR" );
-
- line();
+ logTrace( error, true );
}
- protected void logError( MavenExecutionResponse r )
+ protected void logError( Exception e, boolean showErrors )
{
line();
- getLogger().error( "BUILD ERROR" );
+ getLogger().info( "BUILD ERROR" );
line();
- diagnoseError( r.getException() );
+ logDiagnostics( e );
- line();
-
- getLogger().error( "BUILD ERROR" );
-
- line();
-
- stats( r.getStart(), r.getFinish() );
-
- line();
+ logTrace( e, showErrors );
}
- private void diagnoseError( Throwable error )
+ protected void logFailure( BuildFailureException e, boolean showErrors )
{
- String message = null;
- if ( errorDiagnostics != null )
- {
- message = errorDiagnostics.diagnose( error );
- }
-
- if ( message == null )
- {
- message = error.getMessage();
- }
-
- getLogger().info( "Diagnosis: " + message );
-
- line();
-
- // TODO: needs to honour -e
- if ( getLogger().isDebugEnabled() )
- {
- getLogger().debug( "Trace:\n", error );
-
- line();
- }
-
- }
-
- protected void logFailure( MavenExecutionResponse r, ReactorManager rm, Throwable error, String longMessage )
- {
- if ( rm.hasMultipleProjects() && r.executedMultipleProjects() )
- {
- writeReactorSummary( rm );
- }
line();
getLogger().info( "BUILD FAILURE" );
line();
+ logDiagnostics( e );
+
+ if ( e.getLongMessage() != null )
+ {
+ getLogger().info( e.getLongMessage() );
+
+ line();
+ }
+
+ logTrace( e, showErrors );
+ }
+
+ private void logTrace( Throwable t, boolean showErrors )
+ {
+ if ( getLogger().isDebugEnabled() )
+ {
+ getLogger().debug( "Trace", t );
+
+ line();
+ }
+ else if ( showErrors )
+ {
+ getLogger().error( "Trace", t );
+
+ line();
+ }
+ else
+ {
+ getLogger().info( "For more information, run Maven with the -e switch" );
+ }
+ }
+
+ private void logDiagnostics( Throwable t )
+ {
String message = null;
if ( errorDiagnostics != null )
{
- message = errorDiagnostics.diagnose( error );
+ message = errorDiagnostics.diagnose( t );
}
if ( message == null )
{
- message = "Reason: " + error.getMessage();
+ message = t.getMessage();
}
- getLogger().info( message );
-
- line();
-
- if ( longMessage != null )
- {
- getLogger().info( longMessage );
-
- line();
- }
-
- // TODO: needs to honour -e
- if ( getLogger().isDebugEnabled() )
- {
- getLogger().debug( "Trace", error );
-
- line();
- }
-
- stats( r.getStart(), r.getFinish() );
+ getLogger().error( message );
line();
}
- protected void logSuccess( MavenExecutionResponse r, ReactorManager rm )
+ protected void logSuccess( ReactorManager rm )
{
- if ( rm.hasMultipleProjects() && r.executedMultipleProjects() )
- {
- writeReactorSummary( rm );
- }
-
line();
getLogger().info( "BUILD SUCCESSFUL" );
line();
-
- stats( r.getStart(), r.getFinish() );
-
- line();
}
- protected void stats( Date start, Date finish )
+ private void logReactorSummary( ReactorManager rm )
{
+ if ( rm.hasMultipleProjects() && rm.executedMultipleProjects() )
+ {
+ // -------------------------
+ // Reactor Summary:
+ // -------------------------
+ // o project-name...........FAILED
+ // o project2-name..........SKIPPED (dependency build failed or was skipped)
+ // o project-3-name.........SUCCESS
+
+ line();
+ getLogger().info( "Reactor Summary:" );
+ line();
+
+ for ( Iterator it = rm.getSortedProjects().iterator(); it.hasNext(); )
+ {
+ MavenProject project = (MavenProject) it.next();
+
+ if ( rm.hasBuildFailure( project ) )
+ {
+ logReactorSummaryLine( project.getName(), "FAILED", rm.getBuildFailure( project ).getTime() );
+ }
+ else if ( rm.isBlackListed( project ) )
+ {
+ logReactorSummaryLine( project.getName(), "SKIPPED (dependency build failed or was skipped)" );
+ }
+ else if ( rm.hasBuildSuccess( project ) )
+ {
+ logReactorSummaryLine( project.getName(), "SUCCESS", rm.getBuildSuccess( project ).getTime() );
+ }
+ else
+ {
+ logReactorSummaryLine( project.getName(), "NOT BUILT" );
+ }
+ }
+
+ getLogger().info( "" );
+ getLogger().info( "" );
+ }
+ }
+
+ protected void stats( Date start )
+ {
+ Date finish = new Date();
+
long time = finish.getTime() - start.getTime();
getLogger().info( "Total time: " + formatTime( time ) );
@@ -793,6 +784,7 @@ public class DefaultMaven
{
List files = Collections.EMPTY_LIST;
+ File userDir = new File( System.getProperty( "user.dir" ) );
if ( request.isReactorActive() )
{
// TODO: should we now include the pom.xml in the current directory?
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 7429c728e0..7cd3317051 100644
--- a/maven-core/src/main/java/org/apache/maven/Maven.java
+++ b/maven-core/src/main/java/org/apache/maven/Maven.java
@@ -17,7 +17,6 @@ package org.apache.maven;
*/
import org.apache.maven.execution.MavenExecutionRequest;
-import org.apache.maven.execution.MavenExecutionResponse;
import org.apache.maven.reactor.MavenExecutionException;
/**
@@ -32,6 +31,6 @@ public interface Maven
String RELEASE_POMv4 = "release-pom.xml";
- MavenExecutionResponse execute( MavenExecutionRequest request )
- throws MavenExecutionException, SettingsConfigurationException;
+ void execute( MavenExecutionRequest request )
+ throws MavenExecutionException;
}
\ No newline at end of file
diff --git a/maven-core/src/main/java/org/apache/maven/cli/MavenCli.java b/maven-core/src/main/java/org/apache/maven/cli/MavenCli.java
index 8758a42266..2e46edab82 100644
--- a/maven-core/src/main/java/org/apache/maven/cli/MavenCli.java
+++ b/maven-core/src/main/java/org/apache/maven/cli/MavenCli.java
@@ -33,7 +33,6 @@ import org.apache.maven.artifact.repository.DefaultArtifactRepository;
import org.apache.maven.artifact.repository.layout.ArtifactRepositoryLayout;
import org.apache.maven.execution.DefaultMavenExecutionRequest;
import org.apache.maven.execution.MavenExecutionRequest;
-import org.apache.maven.execution.MavenExecutionResponse;
import org.apache.maven.execution.ReactorManager;
import org.apache.maven.monitor.event.DefaultEventDispatcher;
import org.apache.maven.monitor.event.DefaultEventMonitor;
@@ -218,7 +217,7 @@ public class MavenCli
}
request = createRequest( commandLine, settings, eventDispatcher, loggerManager, profileManager,
- executionProperties );
+ executionProperties, showErrors );
setProjectFileOptions( commandLine, request );
@@ -245,30 +244,16 @@ public class MavenCli
}
}
- MavenExecutionResponse response;
try
{
- response = maven.execute( request );
+ maven.execute( request );
}
catch ( MavenExecutionException e )
{
- showFatalError( "Error executing Maven for a project", e, showErrors );
- return 1;
- }
- catch ( SettingsConfigurationException e )
- {
- showError( e.getMessage(), e, showErrors );
return 1;
}
- if ( response != null && response.isExecutionFailure() )
- {
- return 1;
- }
- else
- {
- return 0;
- }
+ return 0;
}
private static Settings buildSettings( CommandLine commandLine )
@@ -382,7 +367,8 @@ public class MavenCli
private static MavenExecutionRequest createRequest( CommandLine commandLine, Settings settings,
EventDispatcher eventDispatcher, LoggerManager loggerManager,
- ProfileManager profileManager, Properties executionProperties )
+ ProfileManager profileManager, Properties executionProperties,
+ boolean showErrors )
throws ComponentLookupException
{
MavenExecutionRequest request;
@@ -393,7 +379,7 @@ public class MavenCli
request = new DefaultMavenExecutionRequest( localRepository, settings, eventDispatcher,
commandLine.getArgList(), userDir.getPath(), profileManager,
- executionProperties );
+ executionProperties, showErrors );
// TODO [BP]: do we set one per mojo? where to do it?
Logger logger = loggerManager.getLoggerForComponent( Mojo.ROLE );
diff --git a/maven-core/src/main/java/org/apache/maven/execution/BuildFailure.java b/maven-core/src/main/java/org/apache/maven/execution/BuildFailure.java
index 9f464cd689..7d8adecbcb 100644
--- a/maven-core/src/main/java/org/apache/maven/execution/BuildFailure.java
+++ b/maven-core/src/main/java/org/apache/maven/execution/BuildFailure.java
@@ -37,12 +37,12 @@ public class BuildFailure
this.time = time;
}
- String getTask()
+ public String getTask()
{
return task;
}
- Exception getCause()
+ public Exception getCause()
{
return cause;
}
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 884baf9e28..87751e2acb 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
@@ -62,9 +62,12 @@ public class DefaultMavenExecutionRequest
private final Date startTime;
+ private final boolean showErrors;
+
public DefaultMavenExecutionRequest( ArtifactRepository localRepository, Settings settings,
EventDispatcher eventDispatcher, List goals, String baseDirectory,
- ProfileManager globalProfileManager, Properties executionProperties )
+ ProfileManager globalProfileManager, Properties executionProperties,
+ boolean showErrors )
{
this.localRepository = localRepository;
@@ -81,6 +84,8 @@ public class DefaultMavenExecutionRequest
this.executionProperties = executionProperties;
this.startTime = new Date();
+
+ this.showErrors = showErrors;
}
public Settings getSettings()
@@ -181,4 +186,9 @@ public class DefaultMavenExecutionRequest
{
return startTime;
}
+
+ public boolean isShowErrors()
+ {
+ return showErrors;
+ }
}
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 53f39bdf07..2fcbf8d8e4 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
@@ -69,4 +69,6 @@ public interface MavenExecutionRequest
Properties getExecutionProperties();
Date getStartTime();
+
+ boolean isShowErrors();
}
diff --git a/maven-core/src/main/java/org/apache/maven/execution/MavenExecutionResponse.java b/maven-core/src/main/java/org/apache/maven/execution/MavenExecutionResponse.java
deleted file mode 100644
index c1ee1acbe0..0000000000
--- a/maven-core/src/main/java/org/apache/maven/execution/MavenExecutionResponse.java
+++ /dev/null
@@ -1,91 +0,0 @@
-package org.apache.maven.execution;
-
-/*
- * Copyright 2001-2005 The Apache Software Foundation.
- *
- * Licensed 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.util.Date;
-
-/**
- * @author Jason van Zyl
- * @version $Id$
- */
-public class MavenExecutionResponse
-{
- private Throwable exception;
-
- private Date start;
-
- private Date finish;
-
- private boolean executedMultipleProjects;
-
- // ----------------------------------------------------------------------
- // Execution failure
- // ----------------------------------------------------------------------
-
- public boolean isExecutionFailure()
- {
- return exception != null;
- }
-
- // ----------------------------------------------------------------------
- // Error
- // ----------------------------------------------------------------------
-
- public Throwable getException()
- {
- return exception;
- }
-
- public void setException( Throwable exception )
- {
- this.exception = exception;
- }
-
- // ----------------------------------------------------------------------
- // Timing
- // ----------------------------------------------------------------------
-
- public Date getStart()
- {
- return start;
- }
-
- public void setStart( Date start )
- {
- this.start = start;
- }
-
- public Date getFinish()
- {
- return finish;
- }
-
- public void setFinish( Date finish )
- {
- this.finish = finish;
- }
-
- public boolean executedMultipleProjects()
- {
- return executedMultipleProjects;
- }
-
- public void setExecutedMultipleProjects( boolean executedMultipleProjects )
- {
- this.executedMultipleProjects = executedMultipleProjects;
- }
-}
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 4c4c6c6c3a..0f722c389f 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
@@ -50,7 +50,7 @@ public class MavenSession
private final String executionRootDir;
- private boolean usingPOMsFromFilesystem;
+ private boolean usingPOMsFromFilesystem = true;
private final Properties executionProperties;
diff --git a/maven-core/src/main/java/org/apache/maven/execution/ReactorManager.java b/maven-core/src/main/java/org/apache/maven/execution/ReactorManager.java
index 2d5021b24b..ea2b8f9cb3 100644
--- a/maven-core/src/main/java/org/apache/maven/execution/ReactorManager.java
+++ b/maven-core/src/main/java/org/apache/maven/execution/ReactorManager.java
@@ -183,4 +183,8 @@ public class ReactorManager
return (BuildSuccess) buildSuccessesByProject.get( getProjectKey( project ) );
}
+ public boolean executedMultipleProjects()
+ {
+ return buildFailuresByProject.size() + buildSuccessesByProject.size() > 1;
+ }
}
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 99ceae542b..432e4e0017 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
@@ -23,7 +23,6 @@ import org.apache.maven.artifact.repository.ArtifactRepository;
import org.apache.maven.artifact.resolver.ArtifactNotFoundException;
import org.apache.maven.artifact.resolver.ArtifactResolutionException;
import org.apache.maven.artifact.versioning.InvalidVersionSpecificationException;
-import org.apache.maven.execution.MavenExecutionResponse;
import org.apache.maven.execution.MavenSession;
import org.apache.maven.execution.ReactorManager;
import org.apache.maven.extension.ExtensionManager;
@@ -47,6 +46,7 @@ import org.apache.maven.plugin.descriptor.MojoDescriptor;
import org.apache.maven.plugin.descriptor.PluginDescriptor;
import org.apache.maven.plugin.lifecycle.Execution;
import org.apache.maven.plugin.lifecycle.Phase;
+import org.apache.maven.plugin.version.PluginVersionNotFoundException;
import org.apache.maven.plugin.version.PluginVersionResolutionException;
import org.apache.maven.project.MavenProject;
import org.apache.maven.project.artifact.InvalidDependencyVersionException;
@@ -61,7 +61,6 @@ import org.codehaus.plexus.util.xml.pull.XmlPullParserException;
import java.io.IOException;
import java.util.ArrayList;
import java.util.Collections;
-import java.util.Date;
import java.util.HashMap;
import java.util.Iterator;
import java.util.List;
@@ -107,8 +106,8 @@ public class DefaultLifecycleExecutor
* @param rm
* @param dispatcher
*/
- public MavenExecutionResponse execute( MavenSession session, ReactorManager rm, EventDispatcher dispatcher )
- throws LifecycleExecutionException
+ public void execute( MavenSession session, ReactorManager rm, EventDispatcher dispatcher )
+ throws BuildFailureException, LifecycleExecutionException
{
// TODO: This is dangerous, particularly when it's just a collection of loose-leaf projects being built
// within the same reactor (using an inclusion pattern to gather them up)...
@@ -125,65 +124,21 @@ public class DefaultLifecycleExecutor
}
}
- MavenExecutionResponse response = new MavenExecutionResponse();
-
- response.setStart( session.getStartTime() );
-
- try
+ if ( goals.isEmpty() )
{
- if ( goals.isEmpty() )
- {
- // TODO: delete
- throw new NoGoalsSpecifiedException( "You must specify at least one goal. Try 'install'" );
- }
-
- List taskSegments = segmentTaskListByAggregationNeeds( goals, session, rootProject );
-
- // TODO: probably don't want to do all this up front
- findExtensions( session );
-
- executeTaskSegments( taskSegments, rm, session, rootProject, dispatcher, response );
-
- if ( ReactorManager.FAIL_AT_END.equals( rm.getFailureBehavior() ) && rm.hasBuildFailures() )
- {
- response.setException( new BuildFailureException( "One or more projects failed to build." ) );
- }
- }
- catch ( MojoExecutionException e )
- {
- response.setException( e );
- }
- catch ( ArtifactNotFoundException e )
- {
- response.setException( e );
- }
- catch ( ArtifactResolutionException e )
- {
- response.setException( e );
- }
- catch ( NoGoalsSpecifiedException e )
- {
- response.setException( e );
- }
- catch ( MojoFailureException e )
- {
- response.setException( e );
- }
- catch ( PluginNotFoundException e )
- {
- response.setException( e );
- }
- finally
- {
- response.setFinish( new Date() );
+ throw new BuildFailureException( "You must specify at least one goal. Try 'install'" );
}
- return response;
+ List taskSegments = segmentTaskListByAggregationNeeds( goals, session, rootProject );
+
+ // TODO: probably don't want to do all this up front
+ findExtensions( session );
+
+ executeTaskSegments( taskSegments, rm, session, rootProject, dispatcher );
}
private void findExtensions( MavenSession session )
- throws ArtifactNotFoundException, ArtifactResolutionException, LifecycleExecutionException,
- PluginNotFoundException
+ throws LifecycleExecutionException
{
for ( Iterator i = session.getSortedProjects().iterator(); i.hasNext(); )
{
@@ -200,18 +155,31 @@ public class DefaultLifecycleExecutor
{
throw new LifecycleExecutionException( "Unable to initialise extensions", e );
}
+ catch ( ArtifactResolutionException e )
+ {
+ throw new LifecycleExecutionException( e.getMessage(), e );
+ }
+ catch ( ArtifactNotFoundException e )
+ {
+ throw new LifecycleExecutionException( e.getMessage(), e );
+ }
}
- Map handlers = findArtifactTypeHandlers( project, session.getSettings(), session.getLocalRepository() );
- artifactHandlerManager.addHandlers( handlers );
+ try
+ {
+ Map handlers = findArtifactTypeHandlers( project, session.getSettings(), session.getLocalRepository() );
+ artifactHandlerManager.addHandlers( handlers );
+ }
+ catch ( PluginNotFoundException e )
+ {
+ throw new LifecycleExecutionException( e.getMessage(), e );
+ }
}
}
private void executeTaskSegments( List taskSegments, ReactorManager rm, MavenSession session,
- MavenProject rootProject, EventDispatcher dispatcher,
- MavenExecutionResponse response )
- throws ArtifactNotFoundException, MojoExecutionException, LifecycleExecutionException, MojoFailureException,
- ArtifactResolutionException, PluginNotFoundException
+ MavenProject rootProject, EventDispatcher dispatcher )
+ throws LifecycleExecutionException, BuildFailureException
{
for ( Iterator it = taskSegments.iterator(); it.hasNext(); )
{
@@ -238,27 +206,18 @@ public class DefaultLifecycleExecutor
String target = rootProject.getId() + " ( " + segment + " )";
dispatcher.dispatchStart( event, target );
- try
+ // only call once, with the top-level project (assumed to be provided as a parameter)...
+ for ( Iterator goalIterator = segment.getTasks().iterator(); goalIterator.hasNext(); )
{
- // only call once, with the top-level project (assumed to be provided as a parameter)...
- for ( Iterator goalIterator = segment.getTasks().iterator(); goalIterator.hasNext(); )
- {
- String task = (String) goalIterator.next();
+ String task = (String) goalIterator.next();
- executeGoalAndHandleFailures( task, session, rootProject, response, dispatcher, event, rm,
- buildStartTime, target );
- }
-
- rm.registerBuildSuccess( rootProject, System.currentTimeMillis() - buildStartTime );
-
- dispatcher.dispatchEnd( event, target );
+ executeGoalAndHandleFailures( task, session, rootProject, dispatcher, event, rm, buildStartTime,
+ target );
}
- catch ( LifecycleExecutionException e )
- {
- dispatcher.dispatchError( event, target, e );
- throw e;
- }
+ rm.registerBuildSuccess( rootProject, System.currentTimeMillis() - buildStartTime );
+
+ dispatcher.dispatchEnd( event, target );
}
else
{
@@ -278,8 +237,6 @@ public class DefaultLifecycleExecutor
{
List sortedProjects = session.getSortedProjects();
- response.setExecutedMultipleProjects( true );
-
// iterate over projects, and execute on each...
for ( Iterator projectIterator = sortedProjects.iterator(); projectIterator.hasNext(); )
{
@@ -304,26 +261,17 @@ public class DefaultLifecycleExecutor
String target = currentProject.getId() + " ( " + segment + " )";
dispatcher.dispatchStart( event, target );
- try
+ for ( Iterator goalIterator = segment.getTasks().iterator(); goalIterator.hasNext(); )
{
- for ( Iterator goalIterator = segment.getTasks().iterator(); goalIterator.hasNext(); )
- {
- String task = (String) goalIterator.next();
+ String task = (String) goalIterator.next();
- executeGoalAndHandleFailures( task, session, currentProject, response, dispatcher,
- event, rm, buildStartTime, target );
- }
-
- rm.registerBuildSuccess( currentProject, System.currentTimeMillis() - buildStartTime );
-
- dispatcher.dispatchEnd( event, target );
+ executeGoalAndHandleFailures( task, session, currentProject, dispatcher, event, rm,
+ buildStartTime, target );
}
- catch ( LifecycleExecutionException e )
- {
- dispatcher.dispatchError( event, target, e );
- throw e;
- }
+ rm.registerBuildSuccess( currentProject, System.currentTimeMillis() - buildStartTime );
+
+ dispatcher.dispatchEnd( event, target );
}
else
{
@@ -344,93 +292,52 @@ public class DefaultLifecycleExecutor
}
private void executeGoalAndHandleFailures( String task, MavenSession session, MavenProject project,
- MavenExecutionResponse response, EventDispatcher dispatcher,
- String event, ReactorManager rm, long buildStartTime, String target )
- throws LifecycleExecutionException, MojoExecutionException, MojoFailureException, ArtifactNotFoundException,
- ArtifactResolutionException, PluginNotFoundException
+ EventDispatcher dispatcher, String event, ReactorManager rm,
+ long buildStartTime, String target )
+ throws BuildFailureException, LifecycleExecutionException
{
try
{
- executeGoal( task, session, project, response );
+ executeGoal( task, session, project );
}
- catch ( MojoExecutionException e )
+ catch ( LifecycleExecutionException e )
{
dispatcher.dispatchError( event, target, e );
- handleExecutionFailure( rm, project, e, task, buildStartTime );
+ if ( handleExecutionFailure( rm, project, e, task, buildStartTime ) )
+ {
+ throw e;
+ }
}
- catch ( ArtifactResolutionException e )
+ catch ( BuildFailureException e )
{
dispatcher.dispatchError( event, target, e );
- handleExecutionFailure( rm, project, e, task, buildStartTime );
- }
- catch ( MojoFailureException e )
- {
- // TODO: should be dispatchFailure?
- dispatcher.dispatchError( event, target, e );
-
- handleExecutionFailure( rm, project, e, task, buildStartTime );
- }
- catch ( ArtifactNotFoundException e )
- {
- // TODO: should be dispatchFailure?
- dispatcher.dispatchError( event, target, e );
-
- handleExecutionFailure( rm, project, e, task, buildStartTime );
- }
- catch ( InvalidDependencyVersionException e )
- {
- // TODO: should be dispatchFailure?
- dispatcher.dispatchError( event, target, e );
-
- handleExecutionFailure( rm, project, e, task, buildStartTime );
+ if ( handleExecutionFailure( rm, project, e, task, buildStartTime ) )
+ {
+ throw e;
+ }
}
}
- private void handleExecutionFailure( ReactorManager rm, MavenProject project, Exception e, String task,
- long buildStartTime )
- throws MojoExecutionException, MojoFailureException, ArtifactNotFoundException, ArtifactResolutionException
+ private boolean handleExecutionFailure( ReactorManager rm, MavenProject project, Exception e, String task,
+ long buildStartTime )
{
+ rm.registerBuildFailure( project, e, task, System.currentTimeMillis() - buildStartTime );
+
if ( ReactorManager.FAIL_FAST.equals( rm.getFailureBehavior() ) )
{
- rm.registerBuildFailure( project, e, task, System.currentTimeMillis() - buildStartTime );
-
- if ( e instanceof MojoExecutionException )
- {
- throw (MojoExecutionException) e;
- }
- if ( e instanceof MojoFailureException )
- {
- throw (MojoFailureException) e;
- }
- else if ( e instanceof ArtifactNotFoundException )
- {
- throw (ArtifactNotFoundException) e;
- }
- else if ( e instanceof ArtifactResolutionException )
- {
- throw (ArtifactResolutionException) e;
- }
- else
- {
- getLogger().error( "Attempt to register inappropriate build-failure Exception.", e );
-
- throw new IllegalArgumentException( "Inappropriate build-failure Exception: " + e );
- }
+ return true;
}
else if ( ReactorManager.FAIL_AT_END.equals( rm.getFailureBehavior() ) )
{
- rm.registerBuildFailure( project, e, task, System.currentTimeMillis() - buildStartTime );
-
rm.blackList( project );
}
- // FIXME: how about the other cases?
+ return false;
}
private List segmentTaskListByAggregationNeeds( List tasks, MavenSession session, MavenProject project )
- throws LifecycleExecutionException, ArtifactNotFoundException, PluginNotFoundException,
- ArtifactResolutionException
+ throws LifecycleExecutionException, BuildFailureException
{
List segments = new ArrayList();
@@ -526,34 +433,39 @@ public class DefaultLifecycleExecutor
return segments;
}
- private void executeGoal( String task, MavenSession session, MavenProject project, MavenExecutionResponse response )
- throws LifecycleExecutionException, ArtifactNotFoundException, MojoExecutionException,
- ArtifactResolutionException, MojoFailureException, InvalidDependencyVersionException, PluginNotFoundException
+ private void executeGoal( String task, MavenSession session, MavenProject project )
+ throws LifecycleExecutionException, BuildFailureException
{
- if ( getPhaseToLifecycleMap().containsKey( task ) )
+ try
{
- Lifecycle lifecycle = getLifecycleForPhase( task );
+ if ( getPhaseToLifecycleMap().containsKey( task ) )
+ {
+ Lifecycle lifecycle = getLifecycleForPhase( task );
- // we have a lifecycle phase, so lets bind all the necessary goals
- Map lifecycleMappings = constructLifecycleMappings( session, task, project, lifecycle );
- executeGoalWithLifecycle( task, session, lifecycleMappings, project, response, lifecycle );
+ // we have a lifecycle phase, so lets bind all the necessary goals
+ Map lifecycleMappings = constructLifecycleMappings( session, task, project, lifecycle );
+ executeGoalWithLifecycle( task, session, lifecycleMappings, project, lifecycle );
+ }
+ else
+ {
+ executeStandaloneGoal( task, session, project );
+ }
}
- else
+ catch ( PluginNotFoundException e )
{
- executeStandaloneGoal( task, session, project, response );
+ throw new BuildFailureException( "A required plugin was not found", e.getMessage(), e );
}
}
private void executeGoalWithLifecycle( String task, MavenSession session, Map lifecycleMappings,
- MavenProject project, MavenExecutionResponse response, Lifecycle lifecycle )
- throws ArtifactResolutionException, LifecycleExecutionException, MojoExecutionException, MojoFailureException,
- ArtifactNotFoundException, InvalidDependencyVersionException, PluginNotFoundException
+ MavenProject project, Lifecycle lifecycle )
+ throws LifecycleExecutionException, BuildFailureException, PluginNotFoundException
{
List goals = processGoalChain( task, lifecycleMappings, lifecycle );
if ( !goals.isEmpty() )
{
- executeGoals( goals, session, project, response );
+ executeGoals( goals, session, project );
}
else
{
@@ -561,19 +473,16 @@ public class DefaultLifecycleExecutor
}
}
- private void executeStandaloneGoal( String task, MavenSession session, MavenProject project,
- MavenExecutionResponse response )
- throws ArtifactResolutionException, LifecycleExecutionException, MojoExecutionException, MojoFailureException,
- ArtifactNotFoundException, InvalidDependencyVersionException, PluginNotFoundException
+ private void executeStandaloneGoal( String task, MavenSession session, MavenProject project )
+ throws LifecycleExecutionException, BuildFailureException, PluginNotFoundException
{
// guaranteed to come from the CLI and not be part of a phase
MojoDescriptor mojoDescriptor = getMojoDescriptor( task, session, project, task, true );
- executeGoals( Collections.singletonList( new MojoExecution( mojoDescriptor ) ), session, project, response );
+ executeGoals( Collections.singletonList( new MojoExecution( mojoDescriptor ) ), session, project );
}
- private void executeGoals( List goals, MavenSession session, MavenProject project, MavenExecutionResponse response )
- throws LifecycleExecutionException, MojoExecutionException, ArtifactResolutionException, MojoFailureException,
- ArtifactNotFoundException, InvalidDependencyVersionException, PluginNotFoundException
+ private void executeGoals( List goals, MavenSession session, MavenProject project )
+ throws LifecycleExecutionException, BuildFailureException, PluginNotFoundException
{
for ( Iterator i = goals.iterator(); i.hasNext(); )
{
@@ -583,7 +492,7 @@ public class DefaultLifecycleExecutor
if ( mojoDescriptor.getExecutePhase() != null || mojoDescriptor.getExecuteGoal() != null )
{
- forkLifecycle( mojoDescriptor, session, project, response );
+ forkLifecycle( mojoDescriptor, session, project );
}
if ( mojoDescriptor.isRequiresReports() )
@@ -599,7 +508,7 @@ public class DefaultLifecycleExecutor
if ( descriptor.getExecutePhase() != null )
{
- forkLifecycle( descriptor, session, project, response );
+ forkLifecycle( descriptor, session, project );
}
}
}
@@ -613,12 +522,35 @@ public class DefaultLifecycleExecutor
throw new LifecycleExecutionException( "Internal error in the plugin manager executing goal '" +
mojoDescriptor.getId() + "': " + e.getMessage(), e );
}
+ catch ( ArtifactNotFoundException e )
+ {
+ throw new LifecycleExecutionException( e.getMessage(), e );
+ }
+ catch ( InvalidDependencyVersionException e )
+ {
+ throw new LifecycleExecutionException( e.getMessage(), e );
+ }
+ catch ( ArtifactResolutionException e )
+ {
+ throw new LifecycleExecutionException( e.getMessage(), e );
+ }
+ catch ( MojoFailureException e )
+ {
+ throw new BuildFailureException( e.getMessage(), e.getLongMessage(), e );
+ }
+ catch ( MojoExecutionException e )
+ {
+ throw new LifecycleExecutionException( e.getMessage(), e );
+ }
+ catch ( PluginConfigurationException e )
+ {
+ throw new LifecycleExecutionException( e.getMessage(), e );
+ }
}
}
private List getReports( MavenProject project, MojoExecution mojoExecution, MavenSession session )
- throws ArtifactResolutionException, LifecycleExecutionException, ArtifactNotFoundException,
- PluginNotFoundException
+ throws LifecycleExecutionException, PluginNotFoundException
{
List reportPlugins = project.getReportPlugins();
@@ -704,8 +636,7 @@ public class DefaultLifecycleExecutor
private List getReports( ReportPlugin reportPlugin, ReportSet reportSet, MavenProject project, MavenSession session,
MojoExecution mojoExecution )
- throws ArtifactResolutionException, ArtifactNotFoundException, LifecycleExecutionException,
- PluginNotFoundException
+ throws LifecycleExecutionException, PluginNotFoundException
{
PluginDescriptor pluginDescriptor = verifyReportPlugin( reportPlugin, project, session );
@@ -747,23 +678,27 @@ public class DefaultLifecycleExecutor
throw new LifecycleExecutionException(
"Error getting reports from the plugin '" + reportPlugin.getKey() + "'", e );
}
+ catch ( ArtifactNotFoundException e )
+ {
+ throw new LifecycleExecutionException( e.getMessage(), e );
+ }
+ catch ( ArtifactResolutionException e )
+ {
+ throw new LifecycleExecutionException( e.getMessage(), e );
+ }
}
}
return reports;
}
- private void forkLifecycle( MojoDescriptor mojoDescriptor, MavenSession session, MavenProject project,
- MavenExecutionResponse response )
- throws LifecycleExecutionException, MojoExecutionException, ArtifactResolutionException, MojoFailureException,
- ArtifactNotFoundException, InvalidDependencyVersionException, PluginNotFoundException
+ private void forkLifecycle( MojoDescriptor mojoDescriptor, MavenSession session, MavenProject project )
+ throws LifecycleExecutionException, BuildFailureException, PluginNotFoundException
{
PluginDescriptor pluginDescriptor = mojoDescriptor.getPluginDescriptor();
getLogger().info( "Preparing " + pluginDescriptor.getGoalPrefix() + ":" + mojoDescriptor.getGoal() );
if ( mojoDescriptor.isAggregator() )
{
- response.setExecutedMultipleProjects( true );
-
for ( Iterator i = session.getSortedProjects().iterator(); i.hasNext(); )
{
MavenProject reactorProject = (MavenProject) i.next();
@@ -774,19 +709,17 @@ public class DefaultLifecycleExecutor
line();
- forkProjectLifecycle( mojoDescriptor, session, reactorProject, response );
+ forkProjectLifecycle( mojoDescriptor, session, reactorProject );
}
}
else
{
- forkProjectLifecycle( mojoDescriptor, session, project, response );
+ forkProjectLifecycle( mojoDescriptor, session, project );
}
}
- private void forkProjectLifecycle( MojoDescriptor mojoDescriptor, MavenSession session, MavenProject project,
- MavenExecutionResponse response )
- throws ArtifactResolutionException, LifecycleExecutionException, MojoExecutionException, MojoFailureException,
- ArtifactNotFoundException, InvalidDependencyVersionException, PluginNotFoundException
+ private void forkProjectLifecycle( MojoDescriptor mojoDescriptor, MavenSession session, MavenProject project )
+ throws LifecycleExecutionException, BuildFailureException, PluginNotFoundException
{
PluginDescriptor pluginDescriptor = mojoDescriptor.getPluginDescriptor();
@@ -852,25 +785,25 @@ public class DefaultLifecycleExecutor
{
Lifecycle lifecycle = getLifecycleForPhase( targetPhase );
- executeGoalWithLifecycle( targetPhase, session, lifecycleMappings, executionProject, response, lifecycle );
+ executeGoalWithLifecycle( targetPhase, session, lifecycleMappings, executionProject, lifecycle );
}
else
{
String goal = mojoDescriptor.getExecuteGoal();
MojoDescriptor desc = getMojoDescriptor( pluginDescriptor, goal );
- executeGoals( Collections.singletonList( new MojoExecution( desc ) ), session, executionProject, response );
+ executeGoals( Collections.singletonList( new MojoExecution( desc ) ), session, executionProject );
}
project.setExecutionProject( executionProject );
}
private Lifecycle getLifecycleForPhase( String phase )
- throws LifecycleExecutionException
+ throws BuildFailureException, LifecycleExecutionException
{
Lifecycle lifecycle = (Lifecycle) getPhaseToLifecycleMap().get( phase );
if ( lifecycle == null )
{
- throw new LifecycleExecutionException( "Unable to find lifecycle for phase '" + phase + "'" );
+ throw new BuildFailureException( "Unable to find lifecycle for phase '" + phase + "'" );
}
return lifecycle;
}
@@ -922,8 +855,7 @@ public class DefaultLifecycleExecutor
private Map constructLifecycleMappings( MavenSession session, String selectedPhase, MavenProject project,
Lifecycle lifecycle )
- throws ArtifactResolutionException, LifecycleExecutionException, ArtifactNotFoundException,
- PluginNotFoundException
+ throws LifecycleExecutionException, BuildFailureException, PluginNotFoundException
{
// first, bind those associated with the packaging
Map lifecycleMappings = bindLifecycleForPackaging( session, selectedPhase, project, lifecycle );
@@ -941,8 +873,7 @@ public class DefaultLifecycleExecutor
private Map bindLifecycleForPackaging( MavenSession session, String selectedPhase, MavenProject project,
Lifecycle lifecycle )
- throws ArtifactResolutionException, LifecycleExecutionException, ArtifactNotFoundException,
- PluginNotFoundException
+ throws LifecycleExecutionException, BuildFailureException, PluginNotFoundException
{
Map mappings = findMappingsForLifecycle( session, project, lifecycle );
@@ -985,8 +916,7 @@ public class DefaultLifecycleExecutor
}
private Map findMappingsForLifecycle( MavenSession session, MavenProject project, Lifecycle lifecycle )
- throws ArtifactResolutionException, LifecycleExecutionException, ArtifactNotFoundException,
- PluginNotFoundException
+ throws LifecycleExecutionException, PluginNotFoundException
{
String packaging = project.getPackaging();
Map mappings = null;
@@ -1035,8 +965,7 @@ public class DefaultLifecycleExecutor
private Object findExtension( MavenProject project, String role, String roleHint, Settings settings,
ArtifactRepository localRepository )
- throws ArtifactResolutionException, ArtifactNotFoundException, LifecycleExecutionException,
- PluginNotFoundException
+ throws LifecycleExecutionException, PluginNotFoundException
{
Object pluginComponent = null;
@@ -1072,8 +1001,7 @@ public class DefaultLifecycleExecutor
* lookup directly, or have them passed in
*/
private Map findArtifactTypeHandlers( MavenProject project, Settings settings, ArtifactRepository localRepository )
- throws ArtifactResolutionException, ArtifactNotFoundException, LifecycleExecutionException,
- PluginNotFoundException
+ throws LifecycleExecutionException, PluginNotFoundException
{
Map map = new HashMap();
for ( Iterator i = project.getBuildPlugins().iterator(); i.hasNext(); )
@@ -1123,8 +1051,7 @@ public class DefaultLifecycleExecutor
* @param session
*/
private void bindPluginToLifecycle( Plugin plugin, MavenSession session, Map phaseMap, MavenProject project )
- throws LifecycleExecutionException, ArtifactResolutionException, ArtifactNotFoundException,
- PluginNotFoundException
+ throws LifecycleExecutionException, PluginNotFoundException
{
PluginDescriptor pluginDescriptor;
Settings settings = session.getSettings();
@@ -1159,8 +1086,7 @@ public class DefaultLifecycleExecutor
private PluginDescriptor verifyPlugin( Plugin plugin, MavenProject project, Settings settings,
ArtifactRepository localRepository )
- throws ArtifactResolutionException, LifecycleExecutionException, ArtifactNotFoundException,
- PluginNotFoundException
+ throws LifecycleExecutionException, PluginNotFoundException
{
PluginDescriptor pluginDescriptor;
try
@@ -1174,22 +1100,33 @@ public class DefaultLifecycleExecutor
}
catch ( PluginVersionResolutionException e )
{
- throw new LifecycleExecutionException( "Error resolving plugin version", e );
+ throw new LifecycleExecutionException( "Error resolving plugin version: " + e.getMessage(), e );
}
catch ( InvalidVersionSpecificationException e )
{
- throw new LifecycleExecutionException( "Error resolving plugin version", e );
+ throw new LifecycleExecutionException( e.getMessage(), e );
}
catch ( InvalidPluginException e )
{
- throw new LifecycleExecutionException( "Error resolving plugin version", e );
+ throw new LifecycleExecutionException( e.getMessage(), e );
+ }
+ catch ( ArtifactNotFoundException e )
+ {
+ throw new LifecycleExecutionException( e.getMessage(), e );
+ }
+ catch ( ArtifactResolutionException e )
+ {
+ throw new LifecycleExecutionException( e.getMessage(), e );
+ }
+ catch ( PluginVersionNotFoundException e )
+ {
+ throw new LifecycleExecutionException( e.getMessage(), e );
}
return pluginDescriptor;
}
private PluginDescriptor verifyReportPlugin( ReportPlugin plugin, MavenProject project, MavenSession session )
- throws ArtifactResolutionException, LifecycleExecutionException, ArtifactNotFoundException,
- PluginNotFoundException
+ throws LifecycleExecutionException, PluginNotFoundException
{
PluginDescriptor pluginDescriptor;
try
@@ -1203,15 +1140,27 @@ public class DefaultLifecycleExecutor
}
catch ( PluginVersionResolutionException e )
{
- throw new LifecycleExecutionException( "Error resolving plugin version", e );
+ throw new LifecycleExecutionException( "Error resolving plugin version: " + e.getMessage(), e );
}
catch ( InvalidVersionSpecificationException e )
{
- throw new LifecycleExecutionException( "Error resolving plugin version", e );
+ throw new LifecycleExecutionException( e.getMessage(), e );
}
catch ( InvalidPluginException e )
{
- throw new LifecycleExecutionException( "Error resolving plugin version", e );
+ throw new LifecycleExecutionException( e.getMessage(), e );
+ }
+ catch ( ArtifactNotFoundException e )
+ {
+ throw new LifecycleExecutionException( e.getMessage(), e );
+ }
+ catch ( ArtifactResolutionException e )
+ {
+ throw new LifecycleExecutionException( e.getMessage(), e );
+ }
+ catch ( PluginVersionNotFoundException e )
+ {
+ throw new LifecycleExecutionException( e.getMessage(), e );
}
return pluginDescriptor;
}
@@ -1227,7 +1176,8 @@ public class DefaultLifecycleExecutor
MojoDescriptor mojoDescriptor = pluginDescriptor.getMojo( goal );
if ( mojoDescriptor == null )
{
- throw new LifecycleExecutionException( "Goal from the POM '" + goal + "' was not found in the plugin" );
+ throw new LifecycleExecutionException(
+ "'" + goal + "' was specified in an execution, but not found in the plugin" );
}
// We have to check to see that the inheritance rules have been applied before binding this mojo.
@@ -1303,8 +1253,7 @@ public class DefaultLifecycleExecutor
private MojoDescriptor getMojoDescriptor( String task, MavenSession session, MavenProject project,
String invokedVia, boolean canUsePrefix )
- throws LifecycleExecutionException, ArtifactNotFoundException, PluginNotFoundException,
- ArtifactResolutionException
+ throws BuildFailureException, LifecycleExecutionException, PluginNotFoundException
{
String goal;
Plugin plugin;
@@ -1398,7 +1347,7 @@ public class DefaultLifecycleExecutor
{
String message = "Invalid task '" + task + "': you must specify a valid lifecycle phase, or" +
" a goal in the format plugin:goal or pluginGroupId:pluginArtifactId:pluginVersion:goal";
- throw new LifecycleExecutionException( message );
+ throw new BuildFailureException( message );
}
if ( pluginDescriptor == null )
@@ -1413,7 +1362,7 @@ public class DefaultLifecycleExecutor
MojoDescriptor mojoDescriptor = pluginDescriptor.getMojo( goal );
if ( mojoDescriptor == null )
{
- throw new LifecycleExecutionException( "Required goal not found: " + task );
+ throw new BuildFailureException( "Required goal not found: " + task );
}
return mojoDescriptor;
diff --git a/maven-core/src/main/java/org/apache/maven/lifecycle/LifecycleExecutor.java b/maven-core/src/main/java/org/apache/maven/lifecycle/LifecycleExecutor.java
index 99ae054442..fdbfed48bb 100644
--- a/maven-core/src/main/java/org/apache/maven/lifecycle/LifecycleExecutor.java
+++ b/maven-core/src/main/java/org/apache/maven/lifecycle/LifecycleExecutor.java
@@ -16,7 +16,7 @@ package org.apache.maven.lifecycle;
* limitations under the License.
*/
-import org.apache.maven.execution.MavenExecutionResponse;
+import org.apache.maven.BuildFailureException;
import org.apache.maven.execution.MavenSession;
import org.apache.maven.execution.ReactorManager;
import org.apache.maven.monitor.event.EventDispatcher;
@@ -29,7 +29,7 @@ public interface LifecycleExecutor
{
String ROLE = LifecycleExecutor.class.getName();
- MavenExecutionResponse execute( MavenSession session, ReactorManager rpm, EventDispatcher dispatcher )
- throws LifecycleExecutionException;
+ void execute( MavenSession session, ReactorManager rpm, EventDispatcher dispatcher )
+ throws LifecycleExecutionException, BuildFailureException;
}
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 e67ab98a73..8e3ef51a1f 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
@@ -45,6 +45,7 @@ import org.apache.maven.plugin.descriptor.PluginDescriptor;
import org.apache.maven.plugin.descriptor.PluginDescriptorBuilder;
import org.apache.maven.plugin.logging.Log;
import org.apache.maven.plugin.version.PluginVersionManager;
+import org.apache.maven.plugin.version.PluginVersionNotFoundException;
import org.apache.maven.plugin.version.PluginVersionResolutionException;
import org.apache.maven.project.MavenProject;
import org.apache.maven.project.MavenProjectBuilder;
@@ -147,7 +148,8 @@ public class DefaultPluginManager
public PluginDescriptor verifyPlugin( Plugin plugin, MavenProject project, Settings settings,
ArtifactRepository localRepository )
throws ArtifactResolutionException, PluginVersionResolutionException, ArtifactNotFoundException,
- InvalidVersionSpecificationException, InvalidPluginException, PluginManagerException, PluginNotFoundException
+ InvalidVersionSpecificationException, InvalidPluginException, PluginManagerException, PluginNotFoundException,
+ PluginVersionNotFoundException
{
// TODO: this should be possibly outside
// All version-resolution logic has been moved to DefaultPluginVersionManager.
@@ -238,7 +240,7 @@ public class DefaultPluginManager
* manager which executes before the plugin is instantiated
*/
private void checkRequiredMavenVersion( Plugin plugin, ArtifactRepository localRepository, List remoteRepositories )
- throws PluginVersionResolutionException
+ throws PluginVersionResolutionException, InvalidPluginException
{
try
{
@@ -260,8 +262,8 @@ public class DefaultPluginManager
}
catch ( ProjectBuildingException e )
{
- throw new PluginVersionResolutionException( plugin.getGroupId(), plugin.getArtifactId(),
- "Unable to build project for plugin", e );
+ throw new InvalidPluginException(
+ "Unable to build project for plugin '" + plugin.getKey() + "': " + e.getMessage(), e );
}
}
@@ -313,7 +315,7 @@ public class DefaultPluginManager
public void executeMojo( MavenProject project, MojoExecution mojoExecution, MavenSession session )
throws ArtifactResolutionException, MojoExecutionException, MojoFailureException, ArtifactNotFoundException,
- InvalidDependencyVersionException, PluginManagerException
+ InvalidDependencyVersionException, PluginManagerException, PluginConfigurationException
{
MojoDescriptor mojoDescriptor = mojoExecution.getMojoDescriptor();
@@ -359,28 +361,20 @@ public class DefaultPluginManager
Mojo plugin;
- try
+ PluginDescriptor pluginDescriptor = mojoDescriptor.getPluginDescriptor();
+ String goalId = mojoDescriptor.getGoal();
+ String groupId = pluginDescriptor.getGroupId();
+ String artifactId = pluginDescriptor.getArtifactId();
+ String executionId = mojoExecution.getExecutionId();
+ Xpp3Dom dom = project.getGoalConfiguration( groupId, artifactId, executionId, goalId );
+ Xpp3Dom reportDom = project.getReportConfiguration( groupId, artifactId, executionId );
+ dom = Xpp3Dom.mergeXpp3Dom( dom, reportDom );
+ if ( mojoExecution.getConfiguration() != null )
{
- PluginDescriptor pluginDescriptor = mojoDescriptor.getPluginDescriptor();
- String goalId = mojoDescriptor.getGoal();
- String groupId = pluginDescriptor.getGroupId();
- String artifactId = pluginDescriptor.getArtifactId();
- String executionId = mojoExecution.getExecutionId();
- Xpp3Dom dom = project.getGoalConfiguration( groupId, artifactId, executionId, goalId );
- Xpp3Dom reportDom = project.getReportConfiguration( groupId, artifactId, executionId );
- dom = Xpp3Dom.mergeXpp3Dom( dom, reportDom );
- if ( mojoExecution.getConfiguration() != null )
- {
- dom = Xpp3Dom.mergeXpp3Dom( dom, mojoExecution.getConfiguration() );
- }
+ dom = Xpp3Dom.mergeXpp3Dom( dom, mojoExecution.getConfiguration() );
+ }
- plugin = getConfiguredMojo( session, dom, project, false, mojoExecution );
- }
- catch ( PluginConfigurationException e )
- {
- String msg = "Error configuring plugin for execution of '" + goalName + "'.";
- throw new MojoExecutionException( msg, e );
- }
+ plugin = getConfiguredMojo( session, dom, project, false, mojoExecution );
// Event monitoring.
String event = MavenEvents.MOJO_EXECUTION;
@@ -457,7 +451,8 @@ public class DefaultPluginManager
public PluginDescriptor verifyReportPlugin( ReportPlugin reportPlugin, MavenProject project, MavenSession session )
throws PluginVersionResolutionException, ArtifactResolutionException, ArtifactNotFoundException,
- InvalidVersionSpecificationException, InvalidPluginException, PluginManagerException, PluginNotFoundException
+ InvalidVersionSpecificationException, InvalidPluginException, PluginManagerException, PluginNotFoundException,
+ PluginVersionNotFoundException
{
String version = reportPlugin.getVersion();
diff --git a/maven-core/src/main/java/org/apache/maven/plugin/PluginManager.java b/maven-core/src/main/java/org/apache/maven/plugin/PluginManager.java
index 53d925fc4f..676d3fa536 100644
--- a/maven-core/src/main/java/org/apache/maven/plugin/PluginManager.java
+++ b/maven-core/src/main/java/org/apache/maven/plugin/PluginManager.java
@@ -24,6 +24,7 @@ import org.apache.maven.execution.MavenSession;
import org.apache.maven.model.Plugin;
import org.apache.maven.model.ReportPlugin;
import org.apache.maven.plugin.descriptor.PluginDescriptor;
+import org.apache.maven.plugin.version.PluginVersionNotFoundException;
import org.apache.maven.plugin.version.PluginVersionResolutionException;
import org.apache.maven.project.MavenProject;
import org.apache.maven.project.artifact.InvalidDependencyVersionException;
@@ -43,7 +44,7 @@ public interface PluginManager
void executeMojo( MavenProject project, MojoExecution execution, MavenSession session )
throws MojoExecutionException, ArtifactResolutionException, MojoFailureException, ArtifactNotFoundException,
- InvalidDependencyVersionException, PluginManagerException;
+ InvalidDependencyVersionException, PluginManagerException, PluginConfigurationException;
MavenReport getReport( MavenProject project, MojoExecution mojoExecution, MavenSession session )
throws ArtifactNotFoundException, PluginConfigurationException, PluginManagerException,
@@ -56,11 +57,13 @@ public interface PluginManager
PluginDescriptor verifyPlugin( Plugin plugin, MavenProject project, Settings settings,
ArtifactRepository localRepository )
throws ArtifactResolutionException, PluginVersionResolutionException, ArtifactNotFoundException,
- InvalidVersionSpecificationException, InvalidPluginException, PluginManagerException, PluginNotFoundException;
+ InvalidVersionSpecificationException, InvalidPluginException, PluginManagerException, PluginNotFoundException,
+ PluginVersionNotFoundException;
PluginDescriptor verifyReportPlugin( ReportPlugin reportPlugin, MavenProject project, MavenSession session )
throws PluginVersionResolutionException, ArtifactResolutionException, ArtifactNotFoundException,
- InvalidVersionSpecificationException, InvalidPluginException, PluginManagerException, PluginNotFoundException;
+ InvalidVersionSpecificationException, InvalidPluginException, PluginManagerException, PluginNotFoundException,
+ PluginVersionNotFoundException;
Object getPluginComponent( Plugin plugin, String role, String roleHint )
throws PluginManagerException, ComponentLookupException;
diff --git a/maven-core/src/main/java/org/apache/maven/plugin/version/DefaultPluginVersionManager.java b/maven-core/src/main/java/org/apache/maven/plugin/version/DefaultPluginVersionManager.java
index 0ac91d2c75..4779140552 100644
--- a/maven-core/src/main/java/org/apache/maven/plugin/version/DefaultPluginVersionManager.java
+++ b/maven-core/src/main/java/org/apache/maven/plugin/version/DefaultPluginVersionManager.java
@@ -27,6 +27,7 @@ import org.apache.maven.artifact.versioning.DefaultArtifactVersion;
import org.apache.maven.execution.RuntimeInformation;
import org.apache.maven.model.Plugin;
import org.apache.maven.model.ReportPlugin;
+import org.apache.maven.plugin.InvalidPluginException;
import org.apache.maven.plugin.registry.MavenPluginRegistryBuilder;
import org.apache.maven.plugin.registry.PluginRegistry;
import org.apache.maven.plugin.registry.PluginRegistryUtils;
@@ -74,21 +75,21 @@ public class DefaultPluginVersionManager
public String resolvePluginVersion( String groupId, String artifactId, MavenProject project, Settings settings,
ArtifactRepository localRepository )
- throws PluginVersionResolutionException
+ throws PluginVersionResolutionException, InvalidPluginException, PluginVersionNotFoundException
{
return resolvePluginVersion( groupId, artifactId, project, settings, localRepository, false );
}
public String resolveReportPluginVersion( String groupId, String artifactId, MavenProject project,
Settings settings, ArtifactRepository localRepository )
- throws PluginVersionResolutionException
+ throws PluginVersionResolutionException, InvalidPluginException, PluginVersionNotFoundException
{
return resolvePluginVersion( groupId, artifactId, project, settings, localRepository, true );
}
private String resolvePluginVersion( String groupId, String artifactId, MavenProject project, Settings settings,
ArtifactRepository localRepository, boolean resolveAsReportPlugin )
- throws PluginVersionResolutionException
+ throws PluginVersionResolutionException, InvalidPluginException, PluginVersionNotFoundException
{
// first pass...if the plugin is specified in the pom, try to retrieve the version from there.
String version = getVersionFromPluginConfig( groupId, artifactId, project, resolveAsReportPlugin );
@@ -214,8 +215,8 @@ public class DefaultPluginVersionManager
// if we still haven't found a version, then fail early before we get into the update goop.
if ( StringUtils.isEmpty( version ) )
{
- throw new PluginVersionResolutionException( groupId, artifactId,
- "Failed to resolve a valid version for this plugin" );
+ throw new PluginVersionNotFoundException( groupId, artifactId,
+ "Failed to resolve a valid version for this plugin" );
}
// if the plugin registry is inactive, then the rest of this goop is useless...
@@ -625,7 +626,7 @@ public class DefaultPluginVersionManager
catch ( IOException e )
{
throw new PluginVersionResolutionException( groupId, artifactId,
- "Error readin plugin registry: " + e.getMessage(), e );
+ "Error reading plugin registry: " + e.getMessage(), e );
}
catch ( XmlPullParserException e )
{
@@ -644,7 +645,7 @@ public class DefaultPluginVersionManager
private String resolveMetaVersion( String groupId, String artifactId, MavenProject project,
ArtifactRepository localRepository, String metaVersionId )
- throws PluginVersionResolutionException
+ throws PluginVersionResolutionException, InvalidPluginException
{
Artifact artifact = artifactFactory.createProjectArtifact( groupId, artifactId, metaVersionId );
@@ -677,8 +678,8 @@ public class DefaultPluginVersionManager
}
catch ( ProjectBuildingException e )
{
- throw new PluginVersionResolutionException( groupId, artifactId,
- "Unable to build resolve plugin project information", e );
+ throw new InvalidPluginException( "Unable to build project information for plugin '" +
+ ArtifactUtils.versionlessKey( groupId, artifactId ) + "': " + e.getMessage(), e );
}
boolean pluginValid = true;
diff --git a/maven-core/src/main/java/org/apache/maven/plugin/version/PluginVersionManager.java b/maven-core/src/main/java/org/apache/maven/plugin/version/PluginVersionManager.java
index a2a05802be..815f53314e 100644
--- a/maven-core/src/main/java/org/apache/maven/plugin/version/PluginVersionManager.java
+++ b/maven-core/src/main/java/org/apache/maven/plugin/version/PluginVersionManager.java
@@ -17,6 +17,7 @@ package org.apache.maven.plugin.version;
*/
import org.apache.maven.artifact.repository.ArtifactRepository;
+import org.apache.maven.plugin.InvalidPluginException;
import org.apache.maven.project.MavenProject;
import org.apache.maven.settings.Settings;
@@ -26,10 +27,10 @@ public interface PluginVersionManager
String resolvePluginVersion( String groupId, String artifactId, MavenProject project, Settings settings,
ArtifactRepository localRepository )
- throws PluginVersionResolutionException;
+ throws PluginVersionResolutionException, InvalidPluginException, PluginVersionNotFoundException;
String resolveReportPluginVersion( String groupId, String artifactId, MavenProject project, Settings settings,
ArtifactRepository localRepository )
- throws PluginVersionResolutionException;
+ throws PluginVersionResolutionException, InvalidPluginException, PluginVersionNotFoundException;
}
diff --git a/maven-core/src/main/java/org/apache/maven/lifecycle/NoGoalsSpecifiedException.java b/maven-core/src/main/java/org/apache/maven/plugin/version/PluginVersionNotFoundException.java
similarity index 53%
rename from maven-core/src/main/java/org/apache/maven/lifecycle/NoGoalsSpecifiedException.java
rename to maven-core/src/main/java/org/apache/maven/plugin/version/PluginVersionNotFoundException.java
index 1e70ed5201..a40863d432 100644
--- a/maven-core/src/main/java/org/apache/maven/lifecycle/NoGoalsSpecifiedException.java
+++ b/maven-core/src/main/java/org/apache/maven/plugin/version/PluginVersionNotFoundException.java
@@ -1,4 +1,4 @@
-package org.apache.maven.lifecycle;
+package org.apache.maven.plugin.version;
/*
* Copyright 2001-2005 The Apache Software Foundation.
@@ -16,17 +16,29 @@ package org.apache.maven.lifecycle;
* limitations under the License.
*/
-/**
- * Exception indicating there were no goals given.
- *
- * @author Brett Porter
- * @version $Id$
- */
-public class NoGoalsSpecifiedException
+public class PluginVersionNotFoundException
extends Exception
{
- public NoGoalsSpecifiedException( String message )
+ private final String groupId;
+
+ private final String artifactId;
+
+ public PluginVersionNotFoundException( String groupId, String artifactId, String baseMessage )
{
- super( message );
+ super( "Error resolving version for \'" + groupId + ":" + artifactId + "\': " + baseMessage );
+
+ this.groupId = groupId;
+ this.artifactId = artifactId;
}
+
+ public String getGroupId()
+ {
+ return groupId;
+ }
+
+ public String getArtifactId()
+ {
+ return artifactId;
+ }
+
}
diff --git a/maven-plugins/maven-projecthelp-plugin/src/main/java/org/apache/maven/plugins/projecthelp/DescribeMojo.java b/maven-plugins/maven-projecthelp-plugin/src/main/java/org/apache/maven/plugins/projecthelp/DescribeMojo.java
index 6375a38f65..482d418061 100644
--- a/maven-plugins/maven-projecthelp-plugin/src/main/java/org/apache/maven/plugins/projecthelp/DescribeMojo.java
+++ b/maven-plugins/maven-projecthelp-plugin/src/main/java/org/apache/maven/plugins/projecthelp/DescribeMojo.java
@@ -32,6 +32,7 @@ import org.apache.maven.plugin.PluginNotFoundException;
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.version.PluginVersionNotFoundException;
import org.apache.maven.plugin.version.PluginVersionResolutionException;
import org.apache.maven.project.MavenProject;
import org.apache.maven.project.MavenProjectBuilder;
@@ -336,7 +337,13 @@ public class DescribeMojo
}
catch ( PluginNotFoundException e )
{
- throw new MojoExecutionException( "Plugin does not exist: " + e.getMessage(), e );
+ getLog().debug( "Unable to find plugin", e );
+ throw new MojoFailureException( "Plugin does not exist: " + e.getMessage() );
+ }
+ catch ( PluginVersionNotFoundException e )
+ {
+ getLog().debug( "Unable to find plugin version", e );
+ throw new MojoFailureException( e.getMessage() );
}
}
diff --git a/maven-plugins/maven-release-plugin/src/main/java/org/apache/maven/plugins/release/PrepareReleaseMojo.java b/maven-plugins/maven-release-plugin/src/main/java/org/apache/maven/plugins/release/PrepareReleaseMojo.java
index 670abe72d1..c842f06345 100644
--- a/maven-plugins/maven-release-plugin/src/main/java/org/apache/maven/plugins/release/PrepareReleaseMojo.java
+++ b/maven-plugins/maven-release-plugin/src/main/java/org/apache/maven/plugins/release/PrepareReleaseMojo.java
@@ -32,9 +32,11 @@ import org.apache.maven.model.PluginManagement;
import org.apache.maven.model.ReportPlugin;
import org.apache.maven.model.Reporting;
import org.apache.maven.model.io.xpp3.MavenXpp3Writer;
+import org.apache.maven.plugin.InvalidPluginException;
import org.apache.maven.plugin.MojoExecutionException;
import org.apache.maven.plugin.MojoFailureException;
import org.apache.maven.plugin.version.PluginVersionManager;
+import org.apache.maven.plugin.version.PluginVersionNotFoundException;
import org.apache.maven.plugin.version.PluginVersionResolutionException;
import org.apache.maven.plugins.release.helpers.ProjectScmRewriter;
import org.apache.maven.plugins.release.helpers.ProjectVersionResolver;
@@ -940,9 +942,17 @@ public class PrepareReleaseMojo
}
catch ( PluginVersionResolutionException e )
{
- getLog().debug( "Error resolving plugin version", e );
- throw new MojoFailureException(
- "Cannot resolve version for plugin '" + plugin.getKey() + "': " + e.getMessage() );
+ throw new MojoExecutionException(
+ "Cannot resolve version for plugin '" + plugin.getKey() + "': " + e.getMessage(), e );
+ }
+ catch ( InvalidPluginException e )
+ {
+ throw new MojoExecutionException(
+ "Cannot resolve version for plugin '" + plugin.getKey() + "': " + e.getMessage(), e );
+ }
+ catch ( PluginVersionNotFoundException e )
+ {
+ throw new MojoFailureException( e.getMessage() );
}
if ( ArtifactUtils.isSnapshot( version ) )
@@ -977,9 +987,17 @@ public class PrepareReleaseMojo
}
catch ( PluginVersionResolutionException e )
{
- getLog().debug( "Error resolving report version", e );
- throw new MojoFailureException(
- "Cannot resolve version for report '" + plugin.getKey() + "': " + e.getMessage() );
+ throw new MojoExecutionException(
+ "Cannot resolve version for report '" + plugin.getKey() + "': " + e.getMessage(), e );
+ }
+ catch ( InvalidPluginException e )
+ {
+ throw new MojoExecutionException(
+ "Cannot resolve version for plugin '" + plugin.getKey() + "': " + e.getMessage(), e );
+ }
+ catch ( PluginVersionNotFoundException e )
+ {
+ throw new MojoFailureException( e.getMessage() );
}
if ( ArtifactUtils.isSnapshot( version ) )