This is an automated email from the ASF dual-hosted git repository. slachiewicz pushed a commit to branch MNG-6311 in repository https://gitbox.apache.org/repos/asf/maven.git
commit 411e89268ec11d603b697db7661ca576f11ebf13 Author: Sylwester Lachiewicz <slachiew...@gmail.com> AuthorDate: Fri Nov 24 00:56:00 2017 +0100 [MNG-6311] Implement class-level ModelCache in DefaultProjectBuilder to solve slow pom resolutions Fix by: David Churcher --- .../apache/maven/project/DefaultProjectBuilder.java | 21 +++++++++++++-------- .../org/apache/maven/project/ReactorModelCache.java | 8 ++++---- 2 files changed, 17 insertions(+), 12 deletions(-) diff --git a/maven-core/src/main/java/org/apache/maven/project/DefaultProjectBuilder.java b/maven-core/src/main/java/org/apache/maven/project/DefaultProjectBuilder.java index 279399a..1091a08 100644 --- a/maven-core/src/main/java/org/apache/maven/project/DefaultProjectBuilder.java +++ b/maven-core/src/main/java/org/apache/maven/project/DefaultProjectBuilder.java @@ -105,6 +105,8 @@ public class DefaultProjectBuilder @Requirement private ProjectDependenciesResolver dependencyResolver; + private final ReactorModelCache modelCache = new ReactorModelCache(); + // ---------------------------------------------------------------------- // MavenProjectBuilder Implementation // ---------------------------------------------------------------------- @@ -113,14 +115,14 @@ public class DefaultProjectBuilder public ProjectBuildingResult build( File pomFile, ProjectBuildingRequest request ) throws ProjectBuildingException { - return build( pomFile, new FileModelSource( pomFile ), new InternalConfig( request, null, null ) ); + return build( pomFile, new FileModelSource( pomFile ), new InternalConfig( request, null ) ); } @Override public ProjectBuildingResult build( ModelSource modelSource, ProjectBuildingRequest request ) throws ProjectBuildingException { - return build( null, modelSource, new InternalConfig( request, null, null ) ); + return build( null, modelSource, new InternalConfig( request, null ) ); } private ProjectBuildingResult build( File pomFile, ModelSource modelSource, InternalConfig config ) @@ -291,7 +293,7 @@ public class DefaultProjectBuilder org.eclipse.aether.artifact.Artifact pomArtifact = RepositoryUtils.toArtifact( artifact ); pomArtifact = ArtifactDescriptorUtils.toPomArtifact( pomArtifact ); - InternalConfig config = new InternalConfig( request, null, null ); + InternalConfig config = new InternalConfig( request, null ); boolean localProject; @@ -353,9 +355,7 @@ public class DefaultProjectBuilder ReactorModelPool modelPool = new ReactorModelPool(); - ReactorModelCache modelCache = new ReactorModelCache(); - - InternalConfig config = new InternalConfig( request, modelPool, modelCache ); + InternalConfig config = new InternalConfig( request, modelPool ); Map<String, MavenProject> projectIndex = new HashMap<>( 256 ); @@ -943,11 +943,11 @@ public class DefaultProjectBuilder private final ReactorModelCache modelCache; - InternalConfig( ProjectBuildingRequest request, ReactorModelPool modelPool, ReactorModelCache modelCache ) + InternalConfig( ProjectBuildingRequest request, ReactorModelPool modelPool ) { this.request = request; this.modelPool = modelPool; - this.modelCache = modelCache; + this.modelCache = getModelCache(); session = LegacyLocalRepositoryManager.overlay( request.getLocalRepository(), request.getRepositorySession(), repoSystem ); @@ -956,4 +956,9 @@ public class DefaultProjectBuilder } + private ReactorModelCache getModelCache() + { + return this.modelCache; + } + } diff --git a/maven-core/src/main/java/org/apache/maven/project/ReactorModelCache.java b/maven-core/src/main/java/org/apache/maven/project/ReactorModelCache.java index 6331157..343967d 100644 --- a/maven-core/src/main/java/org/apache/maven/project/ReactorModelCache.java +++ b/maven-core/src/main/java/org/apache/maven/project/ReactorModelCache.java @@ -19,11 +19,11 @@ package org.apache.maven.project; * under the License. */ -import java.util.HashMap; -import java.util.Map; - import org.apache.maven.model.building.ModelCache; +import java.util.Map; +import java.util.concurrent.ConcurrentHashMap; + /** * A simple model cache used to accelerate model building during a reactor build. * @@ -33,7 +33,7 @@ class ReactorModelCache implements ModelCache { - private final Map<CacheKey, Object> models = new HashMap<>( 256 ); + private final Map<CacheKey, Object> models = new ConcurrentHashMap<>( 256 ); public Object get( String groupId, String artifactId, String version, String tag ) {