You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@maven.apache.org by rf...@apache.org on 2021/06/25 08:39:19 UTC
[maven] branch MNG-6843 created (now ddfa24c)
This is an automated email from the ASF dual-hosted git repository.
rfscholte pushed a change to branch MNG-6843
in repository https://gitbox.apache.org/repos/asf/maven.git.
at ddfa24c Thread-safe artifacts in MavenProject
This branch includes the following new commits:
new ddfa24c Thread-safe artifacts in MavenProject
The 1 revisions listed above as "new" are entirely new to this
repository and will be described in separate emails. The revisions
listed as "add" were already present in the repository and have only
been added to this reference.
[maven] 01/01: Thread-safe artifacts in MavenProject
Posted by rf...@apache.org.
This is an automated email from the ASF dual-hosted git repository.
rfscholte pushed a commit to branch MNG-6843
in repository https://gitbox.apache.org/repos/asf/maven.git
commit ddfa24ce7ffe6e176ca11d7d2cc46594a4ba01e5
Author: Falko Modler <fa...@users.noreply.github.com>
AuthorDate: Sun Dec 20 21:59:38 2020 +0100
Thread-safe artifacts in MavenProject
Avoids concurrency issues when aggregator plugins are involved.
---
.../org/apache/maven/project/MavenProject.java | 56 ++++++++++++----------
1 file changed, 31 insertions(+), 25 deletions(-)
diff --git a/maven-core/src/main/java/org/apache/maven/project/MavenProject.java b/maven-core/src/main/java/org/apache/maven/project/MavenProject.java
index 57069a5..0fce71a 100644
--- a/maven-core/src/main/java/org/apache/maven/project/MavenProject.java
+++ b/maven-core/src/main/java/org/apache/maven/project/MavenProject.java
@@ -111,10 +111,6 @@ public class MavenProject
private Set<Artifact> resolvedArtifacts;
- private ArtifactFilter artifactFilter;
-
- private Set<Artifact> artifacts;
-
private Artifact parentArtifact;
private Set<Artifact> pluginArtifacts;
@@ -151,8 +147,8 @@ public class MavenProject
private Artifact artifact;
- // calculated.
- private Map<String, Artifact> artifactMap;
+ private final ThreadLocal<ArtifactsHolder> threadLocalArtifactsHolder =
+ ThreadLocal.withInitial( ArtifactsHolder::new );
private Model originalModel;
@@ -695,10 +691,11 @@ public class MavenProject
public void setArtifacts( Set<Artifact> artifacts )
{
- this.artifacts = artifacts;
+ ArtifactsHolder artifactsHolder = threadLocalArtifactsHolder.get();
+ artifactsHolder.artifacts = artifacts;
// flush the calculated artifactMap
- artifactMap = null;
+ artifactsHolder.artifactMap = null;
}
/**
@@ -711,34 +708,36 @@ public class MavenProject
*/
public Set<Artifact> getArtifacts()
{
- if ( artifacts == null )
+ ArtifactsHolder artifactsHolder = threadLocalArtifactsHolder.get();
+ if ( artifactsHolder.artifacts == null )
{
- if ( artifactFilter == null || resolvedArtifacts == null )
+ if ( artifactsHolder.artifactFilter == null || resolvedArtifacts == null )
{
- artifacts = new LinkedHashSet<>();
+ artifactsHolder.artifacts = new LinkedHashSet<>();
}
else
{
- artifacts = new LinkedHashSet<>( resolvedArtifacts.size() * 2 );
+ artifactsHolder.artifacts = new LinkedHashSet<>( resolvedArtifacts.size() * 2 );
for ( Artifact artifact : resolvedArtifacts )
{
- if ( artifactFilter.include( artifact ) )
+ if ( artifactsHolder.artifactFilter.include( artifact ) )
{
- artifacts.add( artifact );
+ artifactsHolder.artifacts.add( artifact );
}
}
}
}
- return artifacts;
+ return artifactsHolder.artifacts;
}
public Map<String, Artifact> getArtifactMap()
{
- if ( artifactMap == null )
+ ArtifactsHolder artifactsHolder = threadLocalArtifactsHolder.get();
+ if ( artifactsHolder.artifactMap == null )
{
- artifactMap = ArtifactUtils.artifactMapByVersionlessId( getArtifacts() );
+ artifactsHolder.artifactMap = ArtifactUtils.artifactMapByVersionlessId( getArtifacts() );
}
- return artifactMap;
+ return artifactsHolder.artifactMap;
}
public void setPluginArtifacts( Set<Artifact> pluginArtifacts )
@@ -1428,8 +1427,9 @@ public class MavenProject
public void setResolvedArtifacts( Set<Artifact> artifacts )
{
this.resolvedArtifacts = ( artifacts != null ) ? artifacts : Collections.<Artifact>emptySet();
- this.artifacts = null;
- this.artifactMap = null;
+ ArtifactsHolder artifactsHolder = threadLocalArtifactsHolder.get();
+ artifactsHolder.artifacts = null;
+ artifactsHolder.artifactMap = null;
}
/**
@@ -1442,9 +1442,10 @@ public class MavenProject
*/
public void setArtifactFilter( ArtifactFilter artifactFilter )
{
- this.artifactFilter = artifactFilter;
- this.artifacts = null;
- this.artifactMap = null;
+ ArtifactsHolder artifactsHolder = threadLocalArtifactsHolder.get();
+ artifactsHolder.artifactFilter = artifactFilter;
+ artifactsHolder.artifacts = null;
+ artifactsHolder.artifactMap = null;
}
/**
@@ -1839,7 +1840,6 @@ public class MavenProject
{
reportArtifactMap = ArtifactUtils.artifactMapByVersionlessId( getReportArtifacts() );
}
-
return reportArtifactMap;
}
@@ -1864,7 +1864,6 @@ public class MavenProject
{
extensionArtifactMap = ArtifactUtils.artifactMapByVersionlessId( getExtensionArtifacts() );
}
-
return extensionArtifactMap;
}
@@ -1986,4 +1985,11 @@ public class MavenProject
{
this.projectBuilderConfiguration = projectBuildingRequest;
}
+
+ private static class ArtifactsHolder
+ {
+ private ArtifactFilter artifactFilter;
+ private Set<Artifact> artifacts;
+ private Map<String, Artifact> artifactMap;
+ }
}