ProjectBuildingResult build()

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);
            }
        }