From 9d1575e849283922b216c82b461ba65a5410dcb5 Mon Sep 17 00:00:00 2001 From: Guillaume Nodet Date: Tue, 12 Apr 2022 14:04:33 +0200 Subject: [PATCH 1/2] Attempt to use a single session --- .../org/apache/maven/execution/MavenSession.java | 13 +++++++------ .../lifecycle/internal/BuildListCalculator.java | 4 +--- .../lifecycle/internal/LifecycleModuleBuilder.java | 14 +++----------- 3 files changed, 11 insertions(+), 20 deletions(-) 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 5b56df36d003..aa2ae50a6537 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 @@ -54,7 +54,7 @@ public class MavenSession private Properties executionProperties; - private MavenProject currentProject; + private InheritableThreadLocal currentProject = new InheritableThreadLocal<>(); /** * These projects have already been topologically sorted in the {@link org.apache.maven.Maven} component before @@ -83,8 +83,9 @@ public void setProjects( List projects ) { if ( !projects.isEmpty() ) { - this.currentProject = projects.get( 0 ); - this.topLevelProject = currentProject; + MavenProject prj = projects.get( 0 ); + this.currentProject.set( prj ); + this.topLevelProject = prj; for ( MavenProject project : projects ) { if ( project.isExecutionRoot() ) @@ -96,7 +97,7 @@ public void setProjects( List projects ) } else { - this.currentProject = null; + this.currentProject.set( null ); this.topLevelProject = null; } this.projects = projects; @@ -157,12 +158,12 @@ public MavenExecutionRequest getRequest() public void setCurrentProject( MavenProject currentProject ) { - this.currentProject = currentProject; + this.currentProject.set( currentProject ); } public MavenProject getCurrentProject() { - return currentProject; + return currentProject.get(); } public ProjectBuildingRequest getProjectBuildingRequest() diff --git a/maven-core/src/main/java/org/apache/maven/lifecycle/internal/BuildListCalculator.java b/maven-core/src/main/java/org/apache/maven/lifecycle/internal/BuildListCalculator.java index 4fef69b4a9c7..0e0262779c0f 100644 --- a/maven-core/src/main/java/org/apache/maven/lifecycle/internal/BuildListCalculator.java +++ b/maven-core/src/main/java/org/apache/maven/lifecycle/internal/BuildListCalculator.java @@ -61,9 +61,7 @@ public ProjectBuildList calculateProjectBuilds( MavenSession session, List Date: Tue, 12 Apr 2022 15:38:49 +0200 Subject: [PATCH 2/2] Make MavenSession#getExecutionProperties() thread safe --- .../org/apache/maven/execution/MavenSession.java | 14 ++++++++++---- 1 file changed, 10 insertions(+), 4 deletions(-) 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 aa2ae50a6537..2f4322b89b19 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 @@ -52,7 +52,7 @@ public class MavenSession private RepositorySystemSession repositorySession; - private Properties executionProperties; + private volatile Properties executionProperties; private InheritableThreadLocal currentProject = new InheritableThreadLocal<>(); @@ -397,9 +397,15 @@ public Properties getExecutionProperties() { if ( executionProperties == null ) { - executionProperties = new Properties(); - executionProperties.putAll( request.getSystemProperties() ); - executionProperties.putAll( request.getUserProperties() ); + synchronized ( this ) + { + if ( executionProperties == null ) + { + executionProperties = new Properties(); + executionProperties.putAll( request.getSystemProperties() ); + executionProperties.putAll( request.getUserProperties() ); + } + } } return executionProperties;