From b26c0f530deaaaeb54cee65ce7feae65ad9c28a6 Mon Sep 17 00:00:00 2001 From: Stefan Oehme Date: Tue, 23 Jul 2019 12:25:34 +0200 Subject: [PATCH] [MNG-6720] - Wait for parallel projects when using --fail-fast Otherwise the sessionFinished event may be sent before some projects/goals finish, which violates the contracts of execution listeners and makes it hard to properly lifecycle components that are needed for goal execution. --- .../multithreaded/MultiThreadedBuilder.java | 20 ++++--------------- 1 file changed, 4 insertions(+), 16 deletions(-) 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 bfbfb0260a29..87cfa3fafeef 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 @@ -27,7 +27,7 @@ import java.util.concurrent.ExecutorCompletionService; import java.util.concurrent.ExecutorService; import java.util.concurrent.Executors; -import java.util.concurrent.Future; +import java.util.concurrent.TimeUnit; import org.apache.maven.execution.MavenSession; import org.apache.maven.lifecycle.internal.BuildThreadFactory; @@ -114,6 +114,9 @@ public void build( MavenSession session, ReactorContext reactorContext, ProjectB } } + + executor.shutdown(); + executor.awaitTermination( Long.MAX_VALUE, TimeUnit.MILLISECONDS ); } private void multiThreadedProjectTaskSegmentBuild( ConcurrencyDependencyGraph analyzer, @@ -172,21 +175,6 @@ private void multiThreadedProjectTaskSegmentBuild( ConcurrencyDependencyGraph an break; } } - - // cancel outstanding builds (if any) - this can happen if an exception is thrown in above block - - Future unprocessed; - while ( ( unprocessed = service.poll() ) != null ) - { - try - { - unprocessed.get(); - } - catch ( InterruptedException | ExecutionException e ) - { - throw new RuntimeException( e ); - } - } } private Callable createBuildCallable( final MavenSession rootSession,