From 1df04cfef41393bb0029a465ac0c5e059b7fa526 Mon Sep 17 00:00:00 2001 From: Tamas Cservenak Date: Wed, 27 Apr 2022 11:17:01 +0200 Subject: [PATCH 1/2] [MNG-7433] Warn if in parallel build aggregator Mojo found As aggregator Mojos, as they have access to whole reactor, are requiring unique access, hence, they block the parallel build, while themselves are executing. --- .../apache/maven/lifecycle/internal/MojoExecutor.java | 11 +++++++++++ 1 file changed, 11 insertions(+) diff --git a/maven-core/src/main/java/org/apache/maven/lifecycle/internal/MojoExecutor.java b/maven-core/src/main/java/org/apache/maven/lifecycle/internal/MojoExecutor.java index 6c089863cc61..4edcf6262963 100644 --- a/maven-core/src/main/java/org/apache/maven/lifecycle/internal/MojoExecutor.java +++ b/maven-core/src/main/java/org/apache/maven/lifecycle/internal/MojoExecutor.java @@ -59,6 +59,8 @@ import org.apache.maven.project.MavenProject; import org.codehaus.plexus.util.StringUtils; import org.eclipse.aether.SessionData; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; /** *

@@ -75,10 +77,14 @@ @Singleton public class MojoExecutor { + private static final Logger LOGGER = LoggerFactory.getLogger( MojoExecutor.class ); private final BuildPluginManager pluginManager; + private final MavenPluginManager mavenPluginManager; + private final LifecycleDependencyResolver lifeCycleDependencyResolver; + private final ExecutionEventCatapult eventCatapult; private final ReadWriteLock aggregatorLock = new ReentrantReadWriteLock(); @@ -223,6 +229,11 @@ private void execute( MavenSession session, MojoExecution mojoExecution, Project } } + if ( session.isParallel() && mojoDescriptor.isAggregator() ) + { + LOGGER.warn( "Now what?" ); + } + try ( ProjectLock lock = new ProjectLock( session, mojoDescriptor, aggregatorLock ) ) { doExecute( session, mojoExecution, projectIndex, dependencyContext ); From 1df15cb54e1ad43100661249f30a3255350fd950 Mon Sep 17 00:00:00 2001 From: Tamas Cservenak Date: Wed, 27 Apr 2022 11:26:07 +0200 Subject: [PATCH 2/2] Move log into locked region, add proper message. --- .../maven/lifecycle/internal/MojoExecutor.java | 15 ++++++++++----- 1 file changed, 10 insertions(+), 5 deletions(-) diff --git a/maven-core/src/main/java/org/apache/maven/lifecycle/internal/MojoExecutor.java b/maven-core/src/main/java/org/apache/maven/lifecycle/internal/MojoExecutor.java index 4edcf6262963..646a7515b60f 100644 --- a/maven-core/src/main/java/org/apache/maven/lifecycle/internal/MojoExecutor.java +++ b/maven-core/src/main/java/org/apache/maven/lifecycle/internal/MojoExecutor.java @@ -229,13 +229,18 @@ private void execute( MavenSession session, MojoExecution mojoExecution, Project } } - if ( session.isParallel() && mojoDescriptor.isAggregator() ) - { - LOGGER.warn( "Now what?" ); - } - try ( ProjectLock lock = new ProjectLock( session, mojoDescriptor, aggregatorLock ) ) { + if ( session.isParallel() && mojoDescriptor.isAggregator() ) + { + LOGGER.warn( "===" ); + LOGGER.warn( "Executing aggregator Mojo in parallel build:" ); + LOGGER.warn( "Aggregator Mojo requires exclusive access to reactor, " ); + LOGGER.warn( "to prevent race conditions, an aggregating execution will block" ); + LOGGER.warn( "all other executions until finished." ); + LOGGER.warn( "===" ); + } + doExecute( session, mojoExecution, projectIndex, dependencyContext ); } }