in daemon-m40/src/main/java/org/apache/maven/cli/DaemonMavenCli.java [763:850]
private int execute(CliRequest cliRequest) throws MavenExecutionRequestPopulationException {
commands(cliRequest);
MavenExecutionRequest request = executionRequestPopulator.populateDefaults(cliRequest.request);
eventSpyDispatcher.onEvent(request);
slf4jLogger.info(MessageUtils.builder()
.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.",
MessageUtils.builder().strong("-e"));
}
if (!slf4jLogger.isDebugEnabled()) {
slf4jLogger.error(
"Re-run Maven using the {} switch to enable full debug logging.",
MessageUtils.builder().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("{} {}", MessageUtils.builder().strong(entry.getValue()), entry.getKey());
}
}
if (result.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 {
return 0;
}
}