mirror of https://github.com/apache/maven.git
[MNG-7350] Introduce a factory for ModelCache
This commit is contained in:
parent
1954d51ff2
commit
14ca723438
|
@ -56,12 +56,14 @@ import org.apache.maven.model.building.ModelBuilder;
|
||||||
import org.apache.maven.model.building.ModelBuildingException;
|
import org.apache.maven.model.building.ModelBuildingException;
|
||||||
import org.apache.maven.model.building.ModelBuildingRequest;
|
import org.apache.maven.model.building.ModelBuildingRequest;
|
||||||
import org.apache.maven.model.building.ModelBuildingResult;
|
import org.apache.maven.model.building.ModelBuildingResult;
|
||||||
|
import org.apache.maven.model.building.ModelCache;
|
||||||
import org.apache.maven.model.building.ModelProblem;
|
import org.apache.maven.model.building.ModelProblem;
|
||||||
import org.apache.maven.model.building.ModelProcessor;
|
import org.apache.maven.model.building.ModelProcessor;
|
||||||
import org.apache.maven.model.building.ModelSource;
|
import org.apache.maven.model.building.ModelSource;
|
||||||
import org.apache.maven.model.building.StringModelSource;
|
import org.apache.maven.model.building.StringModelSource;
|
||||||
import org.apache.maven.model.resolution.ModelResolver;
|
import org.apache.maven.model.resolution.ModelResolver;
|
||||||
import org.apache.maven.repository.internal.ArtifactDescriptorUtils;
|
import org.apache.maven.repository.internal.ArtifactDescriptorUtils;
|
||||||
|
import org.apache.maven.repository.internal.ModelCacheFactory;
|
||||||
import org.codehaus.plexus.component.annotations.Component;
|
import org.codehaus.plexus.component.annotations.Component;
|
||||||
import org.codehaus.plexus.component.annotations.Requirement;
|
import org.codehaus.plexus.component.annotations.Requirement;
|
||||||
import org.codehaus.plexus.logging.Logger;
|
import org.codehaus.plexus.logging.Logger;
|
||||||
|
@ -111,7 +113,8 @@ public class DefaultProjectBuilder
|
||||||
@Requirement
|
@Requirement
|
||||||
private ProjectDependenciesResolver dependencyResolver;
|
private ProjectDependenciesResolver dependencyResolver;
|
||||||
|
|
||||||
private final ReactorModelCache modelCache = new ReactorModelCache();
|
@Requirement
|
||||||
|
private ModelCacheFactory modelCacheFactory;
|
||||||
|
|
||||||
// ----------------------------------------------------------------------
|
// ----------------------------------------------------------------------
|
||||||
// MavenProjectBuilder Implementation
|
// MavenProjectBuilder Implementation
|
||||||
|
@ -122,7 +125,8 @@ public class DefaultProjectBuilder
|
||||||
throws ProjectBuildingException
|
throws ProjectBuildingException
|
||||||
{
|
{
|
||||||
return build( pomFile, new FileModelSource( pomFile ),
|
return build( pomFile, new FileModelSource( pomFile ),
|
||||||
new InternalConfig( request, null, useGlobalModelCache() ? getModelCache() : null ) );
|
new InternalConfig( request, null,
|
||||||
|
useGlobalModelCache() ? createModelCache( request.getRepositorySession() ) : null ) );
|
||||||
}
|
}
|
||||||
|
|
||||||
private boolean useGlobalModelCache()
|
private boolean useGlobalModelCache()
|
||||||
|
@ -135,7 +139,8 @@ public class DefaultProjectBuilder
|
||||||
throws ProjectBuildingException
|
throws ProjectBuildingException
|
||||||
{
|
{
|
||||||
return build( null, modelSource,
|
return build( null, modelSource,
|
||||||
new InternalConfig( request, null, useGlobalModelCache() ? getModelCache() : null ) );
|
new InternalConfig( request, null,
|
||||||
|
useGlobalModelCache() ? createModelCache( request.getRepositorySession() ) : null ) );
|
||||||
}
|
}
|
||||||
|
|
||||||
private ProjectBuildingResult build( File pomFile, ModelSource modelSource, InternalConfig config )
|
private ProjectBuildingResult build( File pomFile, ModelSource modelSource, InternalConfig config )
|
||||||
|
@ -306,7 +311,8 @@ public class DefaultProjectBuilder
|
||||||
org.eclipse.aether.artifact.Artifact pomArtifact = RepositoryUtils.toArtifact( artifact );
|
org.eclipse.aether.artifact.Artifact pomArtifact = RepositoryUtils.toArtifact( artifact );
|
||||||
pomArtifact = ArtifactDescriptorUtils.toPomArtifact( pomArtifact );
|
pomArtifact = ArtifactDescriptorUtils.toPomArtifact( pomArtifact );
|
||||||
|
|
||||||
InternalConfig config = new InternalConfig( request, null, useGlobalModelCache() ? getModelCache() : null );
|
InternalConfig config = new InternalConfig( request, null,
|
||||||
|
useGlobalModelCache() ? createModelCache( request.getRepositorySession() ) : null );
|
||||||
|
|
||||||
boolean localProject;
|
boolean localProject;
|
||||||
|
|
||||||
|
@ -369,7 +375,7 @@ public class DefaultProjectBuilder
|
||||||
ReactorModelPool modelPool = new ReactorModelPool();
|
ReactorModelPool modelPool = new ReactorModelPool();
|
||||||
|
|
||||||
InternalConfig config = new InternalConfig( request, modelPool,
|
InternalConfig config = new InternalConfig( request, modelPool,
|
||||||
useGlobalModelCache() ? getModelCache() : new ReactorModelCache() );
|
useGlobalModelCache() ? createModelCache( request.getRepositorySession() ) : new ReactorModelCache() );
|
||||||
|
|
||||||
Map<String, MavenProject> projectIndex = new HashMap<>( 256 );
|
Map<String, MavenProject> projectIndex = new HashMap<>( 256 );
|
||||||
|
|
||||||
|
@ -1058,9 +1064,9 @@ public class DefaultProjectBuilder
|
||||||
|
|
||||||
private final ReactorModelPool modelPool;
|
private final ReactorModelPool modelPool;
|
||||||
|
|
||||||
private final ReactorModelCache modelCache;
|
private final ModelCache modelCache;
|
||||||
|
|
||||||
InternalConfig( ProjectBuildingRequest request, ReactorModelPool modelPool, ReactorModelCache modelCache )
|
InternalConfig( ProjectBuildingRequest request, ReactorModelPool modelPool, ModelCache modelCache )
|
||||||
{
|
{
|
||||||
this.request = request;
|
this.request = request;
|
||||||
this.modelPool = modelPool;
|
this.modelPool = modelPool;
|
||||||
|
@ -1073,9 +1079,9 @@ public class DefaultProjectBuilder
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
private ReactorModelCache getModelCache()
|
private ModelCache createModelCache( RepositorySystemSession session )
|
||||||
{
|
{
|
||||||
return this.modelCache;
|
return modelCacheFactory.createCache( session );
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
|
@ -146,6 +146,8 @@ public abstract class AbstractCoreMavenComponentTestCase
|
||||||
.setSystemProperties( executionProperties )
|
.setSystemProperties( executionProperties )
|
||||||
.setUserProperties( new Properties() );
|
.setUserProperties( new Properties() );
|
||||||
|
|
||||||
|
initRepoSession( configuration );
|
||||||
|
|
||||||
List<MavenProject> projects = new ArrayList<>();
|
List<MavenProject> projects = new ArrayList<>();
|
||||||
|
|
||||||
if ( pom != null )
|
if ( pom != null )
|
||||||
|
@ -174,8 +176,6 @@ public abstract class AbstractCoreMavenComponentTestCase
|
||||||
projects.add( project );
|
projects.add( project );
|
||||||
}
|
}
|
||||||
|
|
||||||
initRepoSession( configuration );
|
|
||||||
|
|
||||||
MavenSession session =
|
MavenSession session =
|
||||||
new MavenSession( getContainer(), configuration.getRepositorySession(), request,
|
new MavenSession( getContainer(), configuration.getRepositorySession(), request,
|
||||||
new DefaultMavenExecutionResult() );
|
new DefaultMavenExecutionResult() );
|
||||||
|
|
|
@ -89,6 +89,8 @@ public class DefaultArtifactDescriptorReader
|
||||||
|
|
||||||
private ModelBuilder modelBuilder;
|
private ModelBuilder modelBuilder;
|
||||||
|
|
||||||
|
private ModelCacheFactory modelCacheFactory;
|
||||||
|
|
||||||
public DefaultArtifactDescriptorReader()
|
public DefaultArtifactDescriptorReader()
|
||||||
{
|
{
|
||||||
// enable no-arg constructor
|
// enable no-arg constructor
|
||||||
|
@ -97,7 +99,8 @@ public class DefaultArtifactDescriptorReader
|
||||||
@Inject
|
@Inject
|
||||||
DefaultArtifactDescriptorReader( RemoteRepositoryManager remoteRepositoryManager, VersionResolver versionResolver,
|
DefaultArtifactDescriptorReader( RemoteRepositoryManager remoteRepositoryManager, VersionResolver versionResolver,
|
||||||
VersionRangeResolver versionRangeResolver, ArtifactResolver artifactResolver,
|
VersionRangeResolver versionRangeResolver, ArtifactResolver artifactResolver,
|
||||||
ModelBuilder modelBuilder, RepositoryEventDispatcher repositoryEventDispatcher )
|
ModelBuilder modelBuilder, RepositoryEventDispatcher repositoryEventDispatcher,
|
||||||
|
ModelCacheFactory modelCacheFactory )
|
||||||
{
|
{
|
||||||
setRemoteRepositoryManager( remoteRepositoryManager );
|
setRemoteRepositoryManager( remoteRepositoryManager );
|
||||||
setVersionResolver( versionResolver );
|
setVersionResolver( versionResolver );
|
||||||
|
@ -105,6 +108,7 @@ public class DefaultArtifactDescriptorReader
|
||||||
setArtifactResolver( artifactResolver );
|
setArtifactResolver( artifactResolver );
|
||||||
setModelBuilder( modelBuilder );
|
setModelBuilder( modelBuilder );
|
||||||
setRepositoryEventDispatcher( repositoryEventDispatcher );
|
setRepositoryEventDispatcher( repositoryEventDispatcher );
|
||||||
|
setModelCacheFactory( modelCacheFactory );
|
||||||
}
|
}
|
||||||
|
|
||||||
public void initService( ServiceLocator locator )
|
public void initService( ServiceLocator locator )
|
||||||
|
@ -119,6 +123,7 @@ public class DefaultArtifactDescriptorReader
|
||||||
setModelBuilder( new DefaultModelBuilderFactory().newInstance() );
|
setModelBuilder( new DefaultModelBuilderFactory().newInstance() );
|
||||||
}
|
}
|
||||||
setRepositoryEventDispatcher( locator.getService( RepositoryEventDispatcher.class ) );
|
setRepositoryEventDispatcher( locator.getService( RepositoryEventDispatcher.class ) );
|
||||||
|
setModelCacheFactory( locator.getService( ModelCacheFactory.class ) );
|
||||||
}
|
}
|
||||||
|
|
||||||
public DefaultArtifactDescriptorReader setRemoteRepositoryManager( RemoteRepositoryManager remoteRepositoryManager )
|
public DefaultArtifactDescriptorReader setRemoteRepositoryManager( RemoteRepositoryManager remoteRepositoryManager )
|
||||||
|
@ -162,6 +167,13 @@ public class DefaultArtifactDescriptorReader
|
||||||
return this;
|
return this;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public DefaultArtifactDescriptorReader setModelCacheFactory( ModelCacheFactory modelCacheFactory )
|
||||||
|
{
|
||||||
|
this.modelCacheFactory = Objects.requireNonNull( modelCacheFactory,
|
||||||
|
"modelCacheFactory cannot be null" );
|
||||||
|
return this;
|
||||||
|
}
|
||||||
|
|
||||||
public ArtifactDescriptorResult readArtifactDescriptor( RepositorySystemSession session,
|
public ArtifactDescriptorResult readArtifactDescriptor( RepositorySystemSession session,
|
||||||
ArtifactDescriptorRequest request )
|
ArtifactDescriptorRequest request )
|
||||||
throws ArtifactDescriptorException
|
throws ArtifactDescriptorException
|
||||||
|
@ -276,7 +288,7 @@ public class DefaultArtifactDescriptorReader
|
||||||
modelRequest.setTwoPhaseBuilding( false );
|
modelRequest.setTwoPhaseBuilding( false );
|
||||||
modelRequest.setSystemProperties( toProperties( session.getSystemProperties() ) );
|
modelRequest.setSystemProperties( toProperties( session.getSystemProperties() ) );
|
||||||
modelRequest.setUserProperties( toProperties( session.getUserProperties() ) );
|
modelRequest.setUserProperties( toProperties( session.getUserProperties() ) );
|
||||||
modelRequest.setModelCache( DefaultModelCache.newInstance( session ) );
|
modelRequest.setModelCache( modelCacheFactory.createCache( session ) );
|
||||||
modelRequest.setModelResolver( new DefaultModelResolver( session, trace.newChild( modelRequest ),
|
modelRequest.setModelResolver( new DefaultModelResolver( session, trace.newChild( modelRequest ),
|
||||||
request.getRequestContext(), artifactResolver,
|
request.getRequestContext(), artifactResolver,
|
||||||
versionRangeResolver, remoteRepositoryManager,
|
versionRangeResolver, remoteRepositoryManager,
|
||||||
|
|
|
@ -0,0 +1,41 @@
|
||||||
|
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;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Default implementation of {@link ModelCacheFactory}.
|
||||||
|
*/
|
||||||
|
@Singleton
|
||||||
|
@Named
|
||||||
|
public class DefaultModelCacheFactory implements ModelCacheFactory
|
||||||
|
{
|
||||||
|
@Override
|
||||||
|
public ModelCache createCache( RepositorySystemSession session )
|
||||||
|
{
|
||||||
|
return DefaultModelCache.newInstance( session );
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
|
@ -79,6 +79,7 @@ public final class MavenRepositorySystemUtils
|
||||||
locator.addService( VersionRangeResolver.class, DefaultVersionRangeResolver.class );
|
locator.addService( VersionRangeResolver.class, DefaultVersionRangeResolver.class );
|
||||||
locator.addService( MetadataGeneratorFactory.class, SnapshotMetadataGeneratorFactory.class );
|
locator.addService( MetadataGeneratorFactory.class, SnapshotMetadataGeneratorFactory.class );
|
||||||
locator.addService( MetadataGeneratorFactory.class, VersionsMetadataGeneratorFactory.class );
|
locator.addService( MetadataGeneratorFactory.class, VersionsMetadataGeneratorFactory.class );
|
||||||
|
locator.addService( ModelCacheFactory.class, DefaultModelCacheFactory.class );
|
||||||
return locator;
|
return locator;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -56,6 +56,7 @@ public final class MavenResolverModule
|
||||||
.to( VersionsMetadataGeneratorFactory.class ).in( Singleton.class );
|
.to( VersionsMetadataGeneratorFactory.class ).in( Singleton.class );
|
||||||
|
|
||||||
bind( ModelBuilder.class ).toInstance( new DefaultModelBuilderFactory().newInstance() );
|
bind( ModelBuilder.class ).toInstance( new DefaultModelBuilderFactory().newInstance() );
|
||||||
|
bind( ModelCacheFactory.class ).to( DefaultModelCacheFactory.class ).in( Singleton.class );
|
||||||
}
|
}
|
||||||
|
|
||||||
@Provides
|
@Provides
|
||||||
|
|
|
@ -0,0 +1,33 @@
|
||||||
|
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;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Factory for {@link ModelCache} objects.
|
||||||
|
*/
|
||||||
|
public interface ModelCacheFactory
|
||||||
|
{
|
||||||
|
|
||||||
|
ModelCache createCache( RepositorySystemSession session );
|
||||||
|
|
||||||
|
}
|
Loading…
Reference in New Issue