From b532c160b9c098809bc93caf41d72fa9616d3955 Mon Sep 17 00:00:00 2001 From: Guillaume Nodet Date: Thu, 2 Dec 2021 14:45:17 +0100 Subject: [PATCH 1/2] [MNG-7350] Introduce a factory for ModelCache --- .../maven/project/TestProjectBuilder.java | 5 ++- .../maven/project/DefaultProjectBuilder.java | 9 +++-- .../DefaultArtifactDescriptorReader.java | 8 +++- .../internal/DefaultModelCacheFactory.java | 38 +++++++++++++++++++ .../internal/ModelCacheFactory.java | 30 +++++++++++++++ 5 files changed, 83 insertions(+), 7 deletions(-) create mode 100644 maven-resolver-provider/src/main/java/org/apache/maven/repository/internal/DefaultModelCacheFactory.java create mode 100644 maven-resolver-provider/src/main/java/org/apache/maven/repository/internal/ModelCacheFactory.java diff --git a/maven-compat/src/test/java/org/apache/maven/project/TestProjectBuilder.java b/maven-compat/src/test/java/org/apache/maven/project/TestProjectBuilder.java index d56d9de143e0..a92cd57681b6 100644 --- a/maven-compat/src/test/java/org/apache/maven/project/TestProjectBuilder.java +++ b/maven-compat/src/test/java/org/apache/maven/project/TestProjectBuilder.java @@ -22,6 +22,7 @@ import org.apache.maven.bridge.MavenRepositorySystem; import org.apache.maven.model.building.ModelBuilder; import org.apache.maven.model.building.ModelProcessor; +import org.apache.maven.repository.internal.ModelCacheFactory; import org.eclipse.aether.RepositorySystem; import org.eclipse.aether.impl.RemoteRepositoryManager; @@ -39,10 +40,10 @@ public TestProjectBuilder( ModelBuilder modelBuilder, ModelProcessor modelProcessor, ProjectBuildingHelper projectBuildingHelper, MavenRepositorySystem repositorySystem, RepositorySystem repoSystem, RemoteRepositoryManager repositoryManager, - ProjectDependenciesResolver dependencyResolver ) + ProjectDependenciesResolver dependencyResolver, ModelCacheFactory modelCacheFactory ) { super( modelBuilder, modelProcessor, projectBuildingHelper, repositorySystem, repoSystem, - repositoryManager, dependencyResolver ); + repositoryManager, dependencyResolver, modelCacheFactory ); } @Override 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 629b53a2351a..f364d4cb86f6 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 @@ -71,7 +71,7 @@ import org.apache.maven.model.building.TransformerContext; import org.apache.maven.model.resolution.ModelResolver; import org.apache.maven.repository.internal.ArtifactDescriptorUtils; -import org.apache.maven.repository.internal.DefaultModelCache; +import org.apache.maven.repository.internal.ModelCacheFactory; import org.codehaus.plexus.util.Os; import org.codehaus.plexus.util.StringUtils; import org.eclipse.aether.RepositorySystem; @@ -102,6 +102,7 @@ public class DefaultProjectBuilder private final org.eclipse.aether.RepositorySystem repoSystem; private final RemoteRepositoryManager repositoryManager; private final ProjectDependenciesResolver dependencyResolver; + private final ModelCacheFactory modelCacheFactory; @Inject public DefaultProjectBuilder( @@ -111,7 +112,8 @@ public DefaultProjectBuilder( MavenRepositorySystem repositorySystem, RepositorySystem repoSystem, RemoteRepositoryManager repositoryManager, - ProjectDependenciesResolver dependencyResolver ) + ProjectDependenciesResolver dependencyResolver, + ModelCacheFactory modelCacheFactory ) { this.modelBuilder = modelBuilder; this.modelProcessor = modelProcessor; @@ -120,6 +122,7 @@ public DefaultProjectBuilder( this.repoSystem = repoSystem; this.repositoryManager = repositoryManager; this.dependencyResolver = dependencyResolver; + this.modelCacheFactory = modelCacheFactory; } // ---------------------------------------------------------------------- // MavenProjectBuilder Implementation @@ -286,7 +289,7 @@ private ModelBuildingRequest getModelBuildingRequest( InternalConfig config ) // this is a hint that we want to build 1 file, so don't cache. See MNG-7063 if ( config.modelPool != null ) { - request.setModelCache( DefaultModelCache.newInstance( config.session ) ); + request.setModelCache( modelCacheFactory.createCache( config.session ) ); } request.setTransformerContextBuilder( config.transformerContextBuilder ); diff --git a/maven-resolver-provider/src/main/java/org/apache/maven/repository/internal/DefaultArtifactDescriptorReader.java b/maven-resolver-provider/src/main/java/org/apache/maven/repository/internal/DefaultArtifactDescriptorReader.java index 147f8b8a3fba..ba3896ca0086 100644 --- a/maven-resolver-provider/src/main/java/org/apache/maven/repository/internal/DefaultArtifactDescriptorReader.java +++ b/maven-resolver-provider/src/main/java/org/apache/maven/repository/internal/DefaultArtifactDescriptorReader.java @@ -83,6 +83,7 @@ public class DefaultArtifactDescriptorReader implements ArtifactDescriptorReader private final ArtifactResolver artifactResolver; private final RepositoryEventDispatcher repositoryEventDispatcher; private final ModelBuilder modelBuilder; + private final ModelCacheFactory modelCacheFactory; @Inject public DefaultArtifactDescriptorReader( @@ -91,7 +92,8 @@ public DefaultArtifactDescriptorReader( VersionRangeResolver versionRangeResolver, ArtifactResolver artifactResolver, ModelBuilder modelBuilder, - RepositoryEventDispatcher repositoryEventDispatcher ) + RepositoryEventDispatcher repositoryEventDispatcher, + ModelCacheFactory modelCacheFactory ) { this.remoteRepositoryManager = Objects.requireNonNull( remoteRepositoryManager, "remoteRepositoryManager cannot be null" ); @@ -102,6 +104,8 @@ public DefaultArtifactDescriptorReader( this.modelBuilder = Objects.requireNonNull( modelBuilder, "modelBuilder cannot be null" ); this.repositoryEventDispatcher = Objects.requireNonNull( repositoryEventDispatcher, "repositoryEventDispatcher cannot be null" ); + this.modelCacheFactory = Objects.requireNonNull( modelCacheFactory, + "modelCacheFactory cannot be null" ); } public ArtifactDescriptorResult readArtifactDescriptor( RepositorySystemSession session, @@ -218,7 +222,7 @@ private Model loadPom( RepositorySystemSession session, ArtifactDescriptorReques modelRequest.setTwoPhaseBuilding( false ); modelRequest.setSystemProperties( toProperties( session.getUserProperties(), session.getSystemProperties() ) ); - modelRequest.setModelCache( DefaultModelCache.newInstance( session ) ); + modelRequest.setModelCache( modelCacheFactory.createCache( session ) ); modelRequest.setModelResolver( new DefaultModelResolver( session, trace.newChild( modelRequest ), request.getRequestContext(), artifactResolver, versionRangeResolver, remoteRepositoryManager, diff --git a/maven-resolver-provider/src/main/java/org/apache/maven/repository/internal/DefaultModelCacheFactory.java b/maven-resolver-provider/src/main/java/org/apache/maven/repository/internal/DefaultModelCacheFactory.java new file mode 100644 index 000000000000..7b3f70887c1c --- /dev/null +++ b/maven-resolver-provider/src/main/java/org/apache/maven/repository/internal/DefaultModelCacheFactory.java @@ -0,0 +1,38 @@ +package org.apache.maven.repository.internal; + +/* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + */ + +import javax.inject.Named; +import javax.inject.Singleton; + +import org.apache.maven.model.building.ModelCache; +import org.eclipse.aether.RepositorySystemSession; + +@Singleton +@Named +public class DefaultModelCacheFactory implements ModelCacheFactory +{ + @Override + public ModelCache createCache( RepositorySystemSession session ) + { + return DefaultModelCache.newInstance( session ); + } + +} diff --git a/maven-resolver-provider/src/main/java/org/apache/maven/repository/internal/ModelCacheFactory.java b/maven-resolver-provider/src/main/java/org/apache/maven/repository/internal/ModelCacheFactory.java new file mode 100644 index 000000000000..5ce447c575f0 --- /dev/null +++ b/maven-resolver-provider/src/main/java/org/apache/maven/repository/internal/ModelCacheFactory.java @@ -0,0 +1,30 @@ +package org.apache.maven.repository.internal; + +/* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + */ + +import org.apache.maven.model.building.ModelCache; +import org.eclipse.aether.RepositorySystemSession; + +public interface ModelCacheFactory +{ + + ModelCache createCache( RepositorySystemSession session ); + +} From 75186661f850d73e2637b9fcd9e3c2c6accd6445 Mon Sep 17 00:00:00 2001 From: Guillaume Nodet Date: Thu, 2 Dec 2021 14:45:17 +0100 Subject: [PATCH 2/2] [MNG-7350] Introduce a factory for ModelCache Fix missing javadoc and binding --- .../maven/repository/internal/DefaultModelCacheFactory.java | 3 +++ .../apache/maven/repository/internal/MavenResolverModule.java | 3 +-- .../apache/maven/repository/internal/ModelCacheFactory.java | 3 +++ 3 files changed, 7 insertions(+), 2 deletions(-) diff --git a/maven-resolver-provider/src/main/java/org/apache/maven/repository/internal/DefaultModelCacheFactory.java b/maven-resolver-provider/src/main/java/org/apache/maven/repository/internal/DefaultModelCacheFactory.java index 7b3f70887c1c..785a4e023582 100644 --- a/maven-resolver-provider/src/main/java/org/apache/maven/repository/internal/DefaultModelCacheFactory.java +++ b/maven-resolver-provider/src/main/java/org/apache/maven/repository/internal/DefaultModelCacheFactory.java @@ -25,6 +25,9 @@ import org.apache.maven.model.building.ModelCache; import org.eclipse.aether.RepositorySystemSession; +/** + * Default implementation of {@link ModelCacheFactory}. + */ @Singleton @Named public class DefaultModelCacheFactory implements ModelCacheFactory diff --git a/maven-resolver-provider/src/main/java/org/apache/maven/repository/internal/MavenResolverModule.java b/maven-resolver-provider/src/main/java/org/apache/maven/repository/internal/MavenResolverModule.java index 9491b12e35fe..60dbf1626b2a 100644 --- a/maven-resolver-provider/src/main/java/org/apache/maven/repository/internal/MavenResolverModule.java +++ b/maven-resolver-provider/src/main/java/org/apache/maven/repository/internal/MavenResolverModule.java @@ -53,11 +53,10 @@ protected void configure() bind( VersionRangeResolver.class ).to( DefaultVersionRangeResolver.class ).in( Singleton.class ); bind( MetadataGeneratorFactory.class ).annotatedWith( Names.named( "snapshot" ) ) .to( SnapshotMetadataGeneratorFactory.class ).in( Singleton.class ); - bind( MetadataGeneratorFactory.class ).annotatedWith( Names.named( "versions" ) ) .to( VersionsMetadataGeneratorFactory.class ).in( Singleton.class ); - bind( ModelBuilder.class ).toInstance( new DefaultModelBuilderFactory().newInstance() ); + bind( ModelCacheFactory.class ).to( DefaultModelCacheFactory.class ).in( Singleton.class ); } @Provides diff --git a/maven-resolver-provider/src/main/java/org/apache/maven/repository/internal/ModelCacheFactory.java b/maven-resolver-provider/src/main/java/org/apache/maven/repository/internal/ModelCacheFactory.java index 5ce447c575f0..0e4299042ed2 100644 --- a/maven-resolver-provider/src/main/java/org/apache/maven/repository/internal/ModelCacheFactory.java +++ b/maven-resolver-provider/src/main/java/org/apache/maven/repository/internal/ModelCacheFactory.java @@ -22,6 +22,9 @@ import org.apache.maven.model.building.ModelCache; import org.eclipse.aether.RepositorySystemSession; +/** + * Factory for {@link ModelCache} objects. + */ public interface ModelCacheFactory {