@@ -85,6 +85,8 @@ public class MojoExecutor
8585
8686 private final ReadWriteLock aggregatorLock = new ReentrantReadWriteLock ();
8787
88+ private final Map <Thread , MojoDescriptor > mojos = new ConcurrentHashMap <>();
89+
8890 public MojoExecutor ()
8991 {
9092 }
@@ -206,10 +208,7 @@ private void execute( MavenSession session, MojoExecution mojoExecution, Project
206208 }
207209 }
208210
209- try ( ProjectLock lock = new ProjectLock ( session , mojoDescriptor , aggregatorLock ) )
210- {
211- doExecute ( session , mojoExecution , projectIndex , dependencyContext );
212- }
211+ doExecute ( session , mojoExecution , projectIndex , dependencyContext );
213212 }
214213
215214 /**
@@ -220,13 +219,14 @@ private void execute( MavenSession session, MojoExecution mojoExecution, Project
220219 * TODO: ideally, the builder should take care of the ordering in a smarter way
221220 * TODO: and concurrency issues fixed with MNG-7157
222221 */
223- private static class ProjectLock implements AutoCloseable
222+ private class ProjectLock implements AutoCloseable
224223 {
225224 final Lock acquiredAggregatorLock ;
226225 final Lock acquiredProjectLock ;
227226
228- ProjectLock ( MavenSession session , MojoDescriptor mojoDescriptor , ReadWriteLock aggregatorLock )
227+ ProjectLock ( MavenSession session , MojoDescriptor mojoDescriptor )
229228 {
229+ mojos .put ( Thread .currentThread (), mojoDescriptor );
230230 if ( session .getRequest ().getDegreeOfConcurrency () > 1 )
231231 {
232232 boolean aggregator = mojoDescriptor .isAggregator ();
@@ -254,6 +254,7 @@ public void close()
254254 {
255255 acquiredAggregatorLock .unlock ();
256256 }
257+ mojos .remove ( Thread .currentThread () );
257258 }
258259
259260 @ SuppressWarnings ( { "unchecked" , "rawtypes" } )
@@ -292,8 +293,23 @@ private void doExecute( MavenSession session, MojoExecution mojoExecution, Proje
292293
293294 ensureDependenciesAreResolved ( mojoDescriptor , session , dependencyContext );
294295
295- eventCatapult .fire ( ExecutionEvent .Type .MojoStarted , session , mojoExecution );
296+ try ( ProjectLock lock = new ProjectLock ( session , mojoDescriptor ) )
297+ {
298+ doExecute2 ( session , mojoExecution );
299+ }
300+ finally
301+ {
302+ for ( MavenProject forkedProject : forkedProjects )
303+ {
304+ forkedProject .setExecutionProject ( null );
305+ }
306+ }
307+ }
296308
309+ private void doExecute2 ( MavenSession session , MojoExecution mojoExecution )
310+ throws LifecycleExecutionException
311+ {
312+ eventCatapult .fire ( ExecutionEvent .Type .MojoStarted , session , mojoExecution );
297313 try
298314 {
299315 try
@@ -314,13 +330,6 @@ private void doExecute( MavenSession session, MojoExecution mojoExecution, Proje
314330
315331 throw e ;
316332 }
317- finally
318- {
319- for ( MavenProject forkedProject : forkedProjects )
320- {
321- forkedProject .setExecutionProject ( null );
322- }
323- }
324333 }
325334
326335 public void ensureDependenciesAreResolved ( MojoDescriptor mojoDescriptor , MavenSession session ,
0 commit comments