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..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,9 +52,9 @@ public class MavenSession private RepositorySystemSession repositorySession; - private Properties executionProperties; + private volatile 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() @@ -396,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; 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