in maven-project/src/main/java/org/apache/maven/project/DefaultMavenProjectBuilder.java [970:1102]
private MavenProject processProjectLogic( String pomLocation,
MavenProject project,
ProjectBuilderConfiguration config,
File projectDir,
List remoteRepositories,
boolean strict,
boolean isSuperPom )
throws ProjectBuildingException, ModelInterpolationException, InvalidRepositoryException
{
Model model = project.getModel();
List activeProfiles = project.getActiveProfiles();
if ( activeProfiles == null )
{
activeProfiles = new ArrayList();
}
ProfileManager profileMgr = config == null ? null : config.getGlobalProfileManager();
List injectedProfiles = injectActiveProfiles( profileMgr, model );
activeProfiles.addAll( injectedProfiles );
// --------------------------------------------------------------------------------
Build dynamicBuild = model.getBuild();
model.setBuild( ModelUtils.cloneBuild( dynamicBuild ) );
model = modelInterpolator.interpolate( model, projectDir, config, getLogger().isDebugEnabled() );
mergeDeterministicBuildElements( model.getBuild(), dynamicBuild );
model.setBuild( dynamicBuild );
// MNG-3482: Make sure depMgmt is interpolated before merging.
if ( !isSuperPom )
{
mergeManagedDependencies( model, config, remoteRepositories );
}
// interpolation is before injection, because interpolation is off-limits in the injected variables
modelDefaultsInjector.injectDefaults( model );
MavenProject parentProject = project.getParent();
Model originalModel = project.getOriginalModel();
// We will return a different project object using the new model (hence the need to return a project, not just modify the parameter)
project = new MavenProject( model, getLogger() );
project.setOriginalModel( originalModel );
project.setActiveProfiles( activeProfiles );
// TODO: maybe not strictly correct, while we should enfore that packaging has a type handler of the same id, we don't
Artifact projectArtifact = artifactFactory.create( project );
project.setArtifact( projectArtifact );
project.setProjectBuilderConfiguration( config );
project.setPluginArtifactRepositories( ProjectUtils.buildArtifactRepositories( model.getPluginRepositories(),
artifactRepositoryFactory,
container ) );
DistributionManagement dm = model.getDistributionManagement();
if ( dm != null )
{
ArtifactRepository repo = ProjectUtils.buildDeploymentArtifactRepository( dm.getRepository(),
artifactRepositoryFactory,
container );
project.setReleaseArtifactRepository( repo );
if ( dm.getSnapshotRepository() != null )
{
repo = ProjectUtils.buildDeploymentArtifactRepository( dm.getSnapshotRepository(),
artifactRepositoryFactory, container );
project.setSnapshotArtifactRepository( repo );
}
}
if ( parentProject != null )
{
String cacheKey = createCacheKey( parentProject.getGroupId(),
parentProject.getArtifactId(),
parentProject.getVersion() );
MavenProject processedParent = (MavenProject) processedProjectCache.get( cacheKey );
Artifact parentArtifact;
// yeah, this null check might be a bit paranoid, but better safe than sorry...
if ( processedParent != null )
{
project.setParent( processedParent );
parentArtifact = processedParent.getArtifact();
}
else
{
project.setParent( parentProject );
parentArtifact = artifactFactory.createParentArtifact( parentProject.getGroupId(),
parentProject.getArtifactId(),
parentProject.getVersion() );
}
project.setParentArtifact( parentArtifact );
}
// Must validate before artifact construction to make sure dependencies are good
ModelValidationResult validationResult = validator.validate( model );
String projectId = safeVersionlessKey( model.getGroupId(), model.getArtifactId() );
if ( validationResult.getMessageCount() > 0 )
{
throw new InvalidProjectModelException( projectId, pomLocation, "Failed to validate POM",
validationResult );
}
project.setRemoteArtifactRepositories(
ProjectUtils.buildArtifactRepositories( model.getRepositories(), artifactRepositoryFactory, container ) );
// TODO: these aren't taking active project artifacts into consideration in the reactor
project.setPluginArtifacts( createPluginArtifacts( projectId, project.getBuildPlugins() ) );
project.setReportArtifacts( createReportArtifacts( projectId, project.getReportPlugins() ) );
project.setExtensionArtifacts( createExtensionArtifacts( projectId, project.getBuildExtensions() ) );
return project;
}