private int execute()

in daemon-m39/src/main/java/org/apache/maven/cli/DaemonMavenCli.java [687:789]


    private int execute(CliRequest cliRequest) throws MavenExecutionRequestPopulationException {
        commands(cliRequest);

        MavenExecutionRequest request = executionRequestPopulator.populateDefaults(cliRequest.request);

        eventSpyDispatcher.onEvent(request);

        slf4jLogger.info(buffer().a("Processing build on daemon ")
                .strong(Environment.MVND_ID.asString())
                .toString());

        MavenExecutionResult result = maven.execute(request);

        LoggingOutputStream.forceFlush(System.out);
        LoggingOutputStream.forceFlush(System.err);

        eventSpyDispatcher.onEvent(result);

        if (result.hasExceptions()) {
            ExceptionHandler handler = new DefaultExceptionHandler();

            Map<String, String> references = new LinkedHashMap<>();

            List<MavenProject> failedProjects = new ArrayList<>();

            for (Throwable exception : result.getExceptions()) {
                ExceptionSummary summary = handler.handleException(exception);

                logSummary(summary, references, "", cliRequest.showErrors);

                if (exception instanceof LifecycleExecutionException) {
                    MavenProject project = ((LifecycleExecutionException) exception).getProject();
                    if (project != null) {
                        failedProjects.add(project);
                    }
                }
            }

            slf4jLogger.error("");

            if (!cliRequest.showErrors) {
                slf4jLogger.error(
                        "To see the full stack trace of the errors, re-run Maven with the {} switch.",
                        buffer().strong("-e"));
            }
            if (!slf4jLogger.isDebugEnabled()) {
                slf4jLogger.error(
                        "Re-run Maven using the {} switch to enable full debug logging.", buffer().strong("-X"));
            }

            if (!references.isEmpty()) {
                slf4jLogger.error("");
                slf4jLogger.error("For more information about the errors and possible solutions"
                        + ", please read the following articles:");

                for (Entry<String, String> entry : references.entrySet()) {
                    slf4jLogger.error("{} {}", buffer().strong(entry.getValue()), entry.getKey());
                }
            }

            boolean canResume = new DefaultBuildResumptionAnalyzer()
                    .determineBuildResumptionData(result)
                    .map(resumption -> {
                        try {
                            Path directory =
                                    Paths.get(request.getBaseDirectory()).resolve("target");
                            new DefaultBuildResumptionDataRepository().persistResumptionData(directory, resumption);
                            return true;
                        } catch (BuildResumptionPersistenceException e) {
                            slf4jLogger.warn("Could not persist build resumption data", e);
                        }
                        return false;
                    })
                    .orElse(false);

            if (canResume) {
                logBuildResumeHint("mvn <args> -r");
            } else if (!failedProjects.isEmpty()) {
                List<MavenProject> sortedProjects = result.getTopologicallySortedProjects();

                // Sort the failedProjects list in the topologically sorted order.
                failedProjects.sort(comparing(sortedProjects::indexOf));

                MavenProject firstFailedProject = failedProjects.get(0);
                if (!firstFailedProject.equals(sortedProjects.get(0))) {
                    String resumeFromSelector = getResumeFromSelector(sortedProjects, firstFailedProject);
                    logBuildResumeHint("mvn <args> -rf " + resumeFromSelector);
                }
            }

            if (MavenExecutionRequest.REACTOR_FAIL_NEVER.equals(cliRequest.request.getReactorFailureBehavior())) {
                slf4jLogger.info("Build failures were ignored.");

                return 0;
            } else {
                return 1;
            }
        } else {
            Path directory = Paths.get(request.getBaseDirectory()).resolve("target");
            new DefaultBuildResumptionDataRepository().removeResumptionData(directory);
            return 0;
        }
    }