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..cc361ec79505 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 @@ -21,6 +21,8 @@ import java.io.File; import java.util.Arrays; +import java.util.ArrayList; +import java.util.Collections; import java.util.Date; import java.util.List; import java.util.Map; @@ -79,7 +81,7 @@ public class MavenSession new ConcurrentHashMap<>(); - public void setProjects( List projects ) + public synchronized void setProjects( List projects ) { if ( !projects.isEmpty() ) { @@ -239,7 +241,10 @@ public MavenSession clone() { try { - return (MavenSession) super.clone(); + MavenSession thisClone = (MavenSession) super.clone(); + thisClone.setProjects( getProjectsClone() ); + + return thisClone; } catch ( CloneNotSupportedException e ) { @@ -247,6 +252,30 @@ public MavenSession clone() } } + private synchronized List getProjectsClone() + { + if ( projects == null ) + { + return null; + } + else + { + if ( projects.isEmpty() ) + { + return Collections.emptyList(); + } + else + { + List clonedProjects = new ArrayList<>( projects.size() ); + for ( MavenProject project : projects ) + { + clonedProjects.add( project.clone() ); + } + return clonedProjects; + } + } + } + public Date getStartTime() { return request.getStartTime(); @@ -302,7 +331,7 @@ public Map getProjectMap() { return projectMap; } - + @Deprecated public MavenSession( PlexusContainer container, RepositorySystemSession repositorySession, MavenExecutionRequest request, MavenExecutionResult result )