in impl/maven-core/src/main/java/org/apache/maven/project/DefaultProjectBuilder.java [343:428]
ProjectBuildingResult build(boolean parent, Path pomFile, ModelSource modelSource)
throws ProjectBuildingException {
ClassLoader oldContextClassLoader = Thread.currentThread().getContextClassLoader();
try {
MavenProject project = request.getProject();
ProblemCollector<ModelProblem> problemCollector = null;
Throwable error = null;
if (project == null) {
project = new MavenProject();
project.setFile(pomFile != null ? pomFile.toFile() : null);
boolean reactorMember = pomFile != null
&& session.getProjects() != null // this is for UTs
&& session.getProjects().stream()
.anyMatch(
p -> p.getPomPath().toAbsolutePath().equals(pomFile.toAbsolutePath()));
boolean isStandalone = pomFile == null
&& modelSource != null
&& modelSource.getLocation().startsWith("jar:")
&& modelSource.getLocation().endsWith("/org/apache/maven/project/standalone.xml");
ModelBuilderRequest.ModelBuilderRequestBuilder builder = getModelBuildingRequest();
ModelBuilderRequest.RequestType type = reactorMember
|| isStandalone
|| (pomFile != null
&& this.request.isProcessPlugins()
&& this.request.getValidationLevel()
== ModelBuildingRequest.VALIDATION_LEVEL_STRICT)
? ModelBuilderRequest.RequestType.BUILD_EFFECTIVE
: (parent
? ModelBuilderRequest.RequestType.CONSUMER_PARENT
: ModelBuilderRequest.RequestType.CONSUMER_DEPENDENCY);
MavenProject theProject = project;
ModelBuilderRequest request = builder.source(modelSource)
.requestType(type)
.locationTracking(true)
.lifecycleBindingsInjector(
(m, r, p) -> injectLifecycleBindings(m, r, p, theProject, this.request))
.build();
if (pomFile != null) {
project.setRootDirectory(rootLocator.findRoot(pomFile.getParent()));
}
ModelBuilderResult result;
try {
result = modelBuilderSession.build(request);
} catch (ModelBuilderException e) {
result = e.getResult();
if (result == null || result.getEffectiveModel() == null) {
throw new ProjectBuildingException(
e.getModelId(), e.getMessage(), pomFile != null ? pomFile.toFile() : null, e);
}
// validation error, continue project building and delay failing to help IDEs
error = e;
}
problemCollector = result.getProblemCollector();
initProject(project, result);
}
DependencyResolutionResult resolutionResult = null;
if (request.isResolveDependencies()) {
projectBuildingHelper.selectProjectRealm(project);
resolutionResult = resolveDependencies(project);
}
ProjectBuildingResult result =
new DefaultProjectBuildingResult(project, convert(problemCollector), resolutionResult);
if (error != null) {
ProjectBuildingException e = new ProjectBuildingException(List.of(result));
e.initCause(error);
throw e;
}
return result;
} finally {
Thread.currentThread().setContextClassLoader(oldContextClassLoader);
}
}