Repository: maven Updated Branches: refs/heads/master c28348024 -> cd52e5b51
MNG-5766 consistently handle all throwables in LifecycleModuleBuilder Signed-off-by: Igor Fedorenko <[email protected]> Project: http://git-wip-us.apache.org/repos/asf/maven/repo Commit: http://git-wip-us.apache.org/repos/asf/maven/commit/cd52e5b5 Tree: http://git-wip-us.apache.org/repos/asf/maven/tree/cd52e5b5 Diff: http://git-wip-us.apache.org/repos/asf/maven/diff/cd52e5b5 Branch: refs/heads/master Commit: cd52e5b51e8e986b6daea8c0b56dd61968410695 Parents: c283480 Author: Igor Fedorenko <[email protected]> Authored: Wed Feb 18 10:47:52 2015 -0500 Committer: Igor Fedorenko <[email protected]> Committed: Wed Feb 18 10:47:52 2015 -0500 ---------------------------------------------------------------------- .../internal/LifecycleModuleBuilder.java | 16 +++++++-- .../internal/builder/BuilderCommon.java | 34 +++++++++++--------- .../multithreaded/MultiThreadedBuilder.java | 1 + 3 files changed, 33 insertions(+), 18 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/maven/blob/cd52e5b5/maven-core/src/main/java/org/apache/maven/lifecycle/internal/LifecycleModuleBuilder.java ---------------------------------------------------------------------- diff --git a/maven-core/src/main/java/org/apache/maven/lifecycle/internal/LifecycleModuleBuilder.java b/maven-core/src/main/java/org/apache/maven/lifecycle/internal/LifecycleModuleBuilder.java index df7f674..d987a30 100644 --- a/maven-core/src/main/java/org/apache/maven/lifecycle/internal/LifecycleModuleBuilder.java +++ b/maven-core/src/main/java/org/apache/maven/lifecycle/internal/LifecycleModuleBuilder.java @@ -124,12 +124,22 @@ public class LifecycleModuleBuilder eventCatapult.fire( ExecutionEvent.Type.ProjectSucceeded, session, null ); } - catch ( Exception e ) + catch ( Throwable t ) { - builderCommon.handleBuildError( reactorContext, rootSession, session, currentProject, e, buildStartTime ); + builderCommon.handleBuildError( reactorContext, rootSession, session, currentProject, t, buildStartTime ); projectExecutionListener.afterProjectExecutionFailure( new ProjectExecutionEvent( session, currentProject, - e ) ); + t ) ); + + // rethrow original errors and runtime exceptions + if ( t instanceof RuntimeException ) + { + throw (RuntimeException) t; + } + if ( t instanceof Error ) + { + throw (Error) t; + } } finally { http://git-wip-us.apache.org/repos/asf/maven/blob/cd52e5b5/maven-core/src/main/java/org/apache/maven/lifecycle/internal/builder/BuilderCommon.java ---------------------------------------------------------------------- diff --git a/maven-core/src/main/java/org/apache/maven/lifecycle/internal/builder/BuilderCommon.java b/maven-core/src/main/java/org/apache/maven/lifecycle/internal/builder/BuilderCommon.java index 8110902..691c981 100644 --- a/maven-core/src/main/java/org/apache/maven/lifecycle/internal/builder/BuilderCommon.java +++ b/maven-core/src/main/java/org/apache/maven/lifecycle/internal/builder/BuilderCommon.java @@ -19,7 +19,6 @@ package org.apache.maven.lifecycle.internal.builder; * under the License. */ -import org.apache.maven.InternalErrorException; import org.apache.maven.artifact.Artifact; import org.apache.maven.execution.BuildFailure; import org.apache.maven.execution.ExecutionEvent; @@ -139,23 +138,28 @@ public class BuilderCommon } public void handleBuildError( final ReactorContext buildContext, final MavenSession rootSession, - final MavenSession currentSession, final MavenProject mavenProject, Exception e, + final MavenSession currentSession, final MavenProject mavenProject, Throwable t, final long buildStartTime ) { - if ( e instanceof RuntimeException ) - { - e = new InternalErrorException( "Internal error: " + e, e ); - } - - buildContext.getResult().addException( e ); - + // record the error and mark the project as failed long buildEndTime = System.currentTimeMillis(); + buildContext.getResult().addException( t ); + buildContext.getResult().addBuildSummary( new BuildFailure( mavenProject, buildEndTime - buildStartTime, t ) ); - buildContext.getResult().addBuildSummary( new BuildFailure( mavenProject, buildEndTime - buildStartTime, e ) ); - - eventCatapult.fire( ExecutionEvent.Type.ProjectFailed, currentSession, null, e ); + // notify listeners about "soft" project build failures only + if ( t instanceof Exception && !( t instanceof RuntimeException ) ) + { + eventCatapult.fire( ExecutionEvent.Type.ProjectFailed, currentSession, null, (Exception) t ); + } - if ( MavenExecutionRequest.REACTOR_FAIL_NEVER.equals( rootSession.getReactorFailureBehavior() ) ) + // reactor failure modes + if ( t instanceof RuntimeException || !( t instanceof Exception ) ) + { + // fail fast on RuntimeExceptions, Errors and "other" Throwables + // assume these are system errors and further build is meaningless + buildContext.getReactorBuildStatus().halt(); + } + else if ( MavenExecutionRequest.REACTOR_FAIL_NEVER.equals( rootSession.getReactorFailureBehavior() ) ) { // continue the build } @@ -170,8 +174,8 @@ public class BuilderCommon } else { - throw new IllegalArgumentException( - "invalid reactor failure behavior " + rootSession.getReactorFailureBehavior() ); + logger.error( "invalid reactor failure behavior " + rootSession.getReactorFailureBehavior() ); + buildContext.getReactorBuildStatus().halt(); } } http://git-wip-us.apache.org/repos/asf/maven/blob/cd52e5b5/maven-core/src/main/java/org/apache/maven/lifecycle/internal/builder/multithreaded/MultiThreadedBuilder.java ---------------------------------------------------------------------- diff --git a/maven-core/src/main/java/org/apache/maven/lifecycle/internal/builder/multithreaded/MultiThreadedBuilder.java b/maven-core/src/main/java/org/apache/maven/lifecycle/internal/builder/multithreaded/MultiThreadedBuilder.java index 88fa81b..906e5e7 100644 --- a/maven-core/src/main/java/org/apache/maven/lifecycle/internal/builder/multithreaded/MultiThreadedBuilder.java +++ b/maven-core/src/main/java/org/apache/maven/lifecycle/internal/builder/multithreaded/MultiThreadedBuilder.java @@ -150,6 +150,7 @@ public class MultiThreadedBuilder } catch ( ExecutionException e ) { + // TODO MNG-5766 changes likely made this redundant rootSession.getResult().addException( e ); break; }
