project cache repairs - must not cache models that are already interpolated, translated, etc.

git-svn-id: https://svn.apache.org/repos/asf/maven/components/trunk@163581 13f79535-47bb-0310-9956-ffa450edef68
This commit is contained in:
Brett Leslie Porter 2005-03-16 06:56:03 +00:00
parent d880a9520a
commit fea9f2ac53
3 changed files with 40 additions and 25 deletions

View File

@ -75,12 +75,11 @@ public Set retrieve( Artifact artifact, ArtifactRepository localRepository, List
if ( mavenProjectBuilder != null )
{
MavenProject project = mavenProjectBuilder.getCachedProject( artifact.getGroupId(),
artifact.getArtifactId(),
artifact.getVersion() );
if ( project != null )
Model model = mavenProjectBuilder.getCachedModel( artifact.getGroupId(), artifact.getArtifactId(),
artifact.getVersion() );
if ( model != null )
{
dependencies = project.getDependencies();
dependencies = model.getDependencies();
}
}

View File

@ -83,7 +83,7 @@ public class DefaultMavenProjectBuilder
private ArtifactRepositoryFactory artifactRepositoryFactory;
private final Map projectCache = new HashMap();
private final Map modelCache = new HashMap();
public void initialize()
{
@ -151,7 +151,15 @@ private MavenProject processProjectLogic( MavenProject project, ArtifactReposito
boolean resolveDependencies, boolean sourceProject )
throws ProjectBuildingException, ModelInterpolationException, ArtifactResolutionException
{
Model model = modelInterpolator.interpolate( project.getModel() );
Model model = project.getModel();
String key = createCacheKey( model.getGroupId(), model.getArtifactId(), model.getVersion() );
Model cachedModel = (Model) modelCache.get( key );
if ( cachedModel == null || sourceProject )
{
modelCache.put( key, model );
}
model = modelInterpolator.interpolate( model );
// interpolation is before injection, because interpolation is off-limits in the injected variables
modelDefaultsInjector.injectDefaults( model );
@ -169,13 +177,6 @@ private MavenProject processProjectLogic( MavenProject project, ArtifactReposito
project.setParent( parentProject );
project.setArtifacts( artifactFactory.createArtifacts( project.getDependencies(), localRepository, null ) );
String key = createCacheKey( project.getGroupId(), project.getArtifactId(), project.getVersion() );
MavenProject cachedProject = (MavenProject) projectCache.get( key );
if ( cachedProject == null || sourceProject )
{
projectCache.put( key, project );
}
// ----------------------------------------------------------------------
// Typically when the project builder is being used from maven proper
// the transitive dependencies will not be resolved here because this
@ -200,7 +201,7 @@ private MavenProject processProjectLogic( MavenProject project, ArtifactReposito
project.getArtifacts().addAll( result.getArtifacts().values() );
}
ModelValidationResult validationResult = validator.validate( project.getModel() );
ModelValidationResult validationResult = validator.validate( model );
if ( validationResult.getMessageCount() > 0 )
{
@ -219,14 +220,22 @@ private MavenProject assembleLineage( File projectDescriptor, ArtifactRepository
throws ProjectBuildingException
{
Model model = readModel( projectDescriptor );
MavenProject project = assembleLineage( model, localRepository, lineage, aggregatedRemoteWagonRepositories );
project.setFile( projectDescriptor );
return project;
}
private MavenProject assembleLineage( Model model, ArtifactRepository localRepository, LinkedList lineage,
List aggregatedRemoteWagonRepositories )
throws ProjectBuildingException
{
MavenProject project = new MavenProject( model );
lineage.addFirst( project );
project.setFile( projectDescriptor );
Parent parentModel = model.getParent();
Parent parentModel = project.getModel().getParent();
if ( parentModel != null )
{
@ -252,16 +261,22 @@ else if ( StringUtils.isEmpty( parentModel.getVersion() ) )
// as we go in order to do this.
// ----------------------------------------------------------------------
aggregatedRemoteWagonRepositories.addAll( buildArtifactRepositories( model.getRepositories() ) );
aggregatedRemoteWagonRepositories.addAll(
buildArtifactRepositories( project.getModel().getRepositories() ) );
MavenProject parent = getCachedProject( parentModel.getGroupId(), parentModel.getArtifactId(),
parentModel.getVersion() );
if ( parent == null )
MavenProject parent;
Model cachedModel = getCachedModel( parentModel.getGroupId(), parentModel.getArtifactId(),
parentModel.getVersion() );
if ( cachedModel == null )
{
File parentPom = findParentModel( parentModel, aggregatedRemoteWagonRepositories, localRepository );
parent = assembleLineage( parentPom, localRepository, lineage, aggregatedRemoteWagonRepositories );
}
else
{
parent = assembleLineage( cachedModel, localRepository, lineage, aggregatedRemoteWagonRepositories );
}
project.setParent( parent );
}
@ -352,9 +367,9 @@ private File findParentModel( Parent parent, List remoteArtifactRepositories, Ar
return artifact.getFile();
}
public MavenProject getCachedProject( String groupId, String artifactId, String version )
public Model getCachedModel( String groupId, String artifactId, String version )
{
return (MavenProject) projectCache.get( createCacheKey( groupId, artifactId, version ) );
return (Model) modelCache.get( createCacheKey( groupId, artifactId, version ) );
}
private static String createCacheKey( String groupId, String artifactId, String version )

View File

@ -19,6 +19,7 @@
import org.apache.maven.artifact.Artifact;
import org.apache.maven.artifact.repository.ArtifactRepository;
import org.apache.maven.model.Model;
import java.io.File;
@ -38,5 +39,5 @@ MavenProject buildFromRepository( Artifact artifact, ArtifactRepository localRep
MavenProject buildSuperProject( ArtifactRepository localRepository )
throws ProjectBuildingException;
MavenProject getCachedProject( String groupId, String artifactId, String version );
Model getCachedModel( String groupId, String artifactId, String version );
}