This is an automated email from the ASF dual-hosted git repository.
slawekjaranowski pushed a commit to branch maven-3.10.x
in repository https://gitbox.apache.org/repos/asf/maven.git
The following commit(s) were added to refs/heads/maven-3.10.x by this push:
new c1aeb517e0 In failed build limit reactor summary to only failed
modules - improvements
c1aeb517e0 is described below
commit c1aeb517e0e4b1f3ae33c2256879c26cf39310bf
Author: Slawomir Jaranowski <[email protected]>
AuthorDate: Sat Jul 11 19:14:01 2026 +0200
In failed build limit reactor summary to only failed modules - improvements
What changed:
- Replace `isExecutionRoot` skip logic with `lastWasSkipped` flag in
`logReactorSummary`
- Print `...` before first visible entry and after last skipped group
- Add `testSessionEndedFailureMultimoduleWithSeparatedFailures` test
- Based on apache/maven#12330 / commit
794866cb40e793b0ef0db67b4a78149c5dfbd4da
---
.../maven/cli/event/ExecutionEventLogger.java | 11 +--
.../maven/cli/event/ExecutionEventLoggerTest.java | 82 +++++++++++++++++++---
2 files changed, 81 insertions(+), 12 deletions(-)
diff --git
a/maven-embedder/src/main/java/org/apache/maven/cli/event/ExecutionEventLogger.java
b/maven-embedder/src/main/java/org/apache/maven/cli/event/ExecutionEventLogger.java
index 8e935964b0..d081cc4b71 100644
---
a/maven-embedder/src/main/java/org/apache/maven/cli/event/ExecutionEventLogger.java
+++
b/maven-embedder/src/main/java/org/apache/maven/cli/event/ExecutionEventLogger.java
@@ -170,6 +170,7 @@ private void logReactorSummary(MavenSession session) {
String failureMessage = builder().failure("FAILURE").build();
String unknownMessage = builder().warning("UNKNOWN").build();
+ boolean lastWasSkipped = false;
for (MavenProject project : projects) {
BuildSummary buildSummary = result.getBuildSummary(project);
@@ -187,11 +188,13 @@ private void logReactorSummary(MavenSession session) {
}
if (shouldSkip) {
- if (project.isExecutionRoot()) {
- logger.info("...");
- }
+ lastWasSkipped = true;
continue;
}
+ if (lastWasSkipped) {
+ logger.info("...");
+ lastWasSkipped = false;
+ }
StringBuilder buffer = new StringBuilder(128);
@@ -218,7 +221,7 @@ private void logReactorSummary(MavenSession session) {
logger.info(buffer.toString());
}
- if (result.hasExceptions()) {
+ if (lastWasSkipped) {
logger.info("...");
}
}
diff --git
a/maven-embedder/src/test/java/org/apache/maven/cli/event/ExecutionEventLoggerTest.java
b/maven-embedder/src/test/java/org/apache/maven/cli/event/ExecutionEventLoggerTest.java
index 65744e7818..00ce1f79c3 100644
---
a/maven-embedder/src/test/java/org/apache/maven/cli/event/ExecutionEventLoggerTest.java
+++
b/maven-embedder/src/test/java/org/apache/maven/cli/event/ExecutionEventLoggerTest.java
@@ -35,19 +35,25 @@
import org.apache.maven.jline.MessageUtils;
import org.apache.maven.project.MavenProject;
import org.junit.jupiter.api.AfterAll;
+import org.junit.jupiter.api.AfterEach;
import org.junit.jupiter.api.BeforeAll;
import org.junit.jupiter.api.BeforeEach;
import org.junit.jupiter.api.Test;
import org.mockito.InOrder;
+import org.mockito.Mockito;
+import org.mockito.MockitoSession;
import org.slf4j.Logger;
import static org.mockito.ArgumentMatchers.anyString;
import static org.mockito.ArgumentMatchers.eq;
import static org.mockito.Mockito.inOrder;
+import static org.mockito.Mockito.lenient;
import static org.mockito.Mockito.mock;
import static org.mockito.Mockito.when;
public class ExecutionEventLoggerTest {
+ private MockitoSession mockitoSession;
+
private ExecutionEventLogger executionEventLogger;
private Logger logger;
@@ -64,11 +70,17 @@ public static void tearDownAfterAll() {
@BeforeEach
public void setup() {
+ mockitoSession = Mockito.mockitoSession().startMocking();
logger = mock(Logger.class);
when(logger.isInfoEnabled()).thenReturn(true);
executionEventLogger = new ExecutionEventLogger(logger);
}
+ @AfterEach
+ public void afterEach() {
+ mockitoSession.finishMocking();
+ }
+
@Test
public void testProjectStarted() {
// prepare
@@ -135,7 +147,6 @@ public void testProjectStartedOverflow() {
@Test
public void testProjectStartedNoPom() {
// prepare
- File basedir = new File("").getAbsoluteFile();
ExecutionEvent event = mock(ExecutionEvent.class);
MavenProject project = mock(MavenProject.class);
when(project.getGroupId()).thenReturn("org.apache.maven");
@@ -145,7 +156,6 @@ public void testProjectStartedNoPom() {
when(project.getVersion()).thenReturn("1");
when(event.getProject()).thenReturn(project);
when(project.getFile()).thenReturn(null);
- when(project.getBasedir()).thenReturn(basedir);
// execute
executionEventLogger.projectStarted(event);
@@ -237,8 +247,6 @@ public void testSessionEndedSuccessMultimodule() {
public void testSessionEndedFailureMultimodule() {
// prepare
MavenProject project1 = aProject("artifact1");
- when(project1.isExecutionRoot()).thenReturn(true);
-
MavenProject project2 = aProject("artifact2");
MavenProject project3 = aProject("artifact3");
@@ -282,12 +290,70 @@ public void testSessionEndedFailureMultimodule() {
inOrder.verify(logger).info("------------------------------------------------------------------------");
}
+ @Test
+ public void testSessionEndedFailureMultimoduleWithSeparatedFailures() {
+ // prepare
+ MavenProject project1 = aProject("artifact1");
+ MavenProject project2 = aProject("artifact2");
+ MavenProject project3 = aProject("artifact3");
+ MavenProject project4 = aProject("artifact4");
+ MavenProject project5 = aProject("artifact5");
+ MavenProject project6 = aProject("artifact6");
+
+ MavenExecutionResult executionResult = new
DefaultMavenExecutionResult();
+ executionResult.addBuildSummary(new BuildSuccess(project1, 1000));
+ executionResult.addBuildSummary(new BuildFailure(project2, 2000, new
Exception("Failure 1")));
+ executionResult.addBuildSummary(new BuildSuccess(project3, 3000));
+ executionResult.addBuildSummary(new BuildSuccess(project4, 4000));
+ executionResult.addBuildSummary(new BuildFailure(project5, 5000, new
Exception("Failure 2")));
+ executionResult.addException(new Exception("Failure 1"));
+ executionResult.addException(new Exception("Failure 2"));
+
+ MavenExecutionRequest executionRequest = new
DefaultMavenExecutionRequest();
+ executionRequest.setStartTime(new Date());
+
+ ProjectDependencyGraph projectDependencyGraph =
mock(ProjectDependencyGraph.class);
+ when(projectDependencyGraph.getSortedProjects())
+ .thenReturn(Arrays.asList(project1, project2, project3,
project4, project5, project6));
+
+ MavenSession mavenSession = mock(MavenSession.class);
+ when(mavenSession.getResult()).thenReturn(executionResult);
+ when(mavenSession.getRequest()).thenReturn(executionRequest);
+ when(mavenSession.getProjects())
+ .thenReturn(Arrays.asList(project1, project2, project3,
project4, project5, project6));
+ when(mavenSession.getTopLevelProject()).thenReturn(project1);
+
when(mavenSession.getProjectDependencyGraph()).thenReturn(projectDependencyGraph);
+
+ ExecutionEvent event = mock(ExecutionEvent.class);
+ when(event.getSession()).thenReturn(mavenSession);
+
+ // execute
+ executionEventLogger.sessionEnded(event);
+
+ // verify
+ InOrder inOrder = inOrder(logger);
+
inOrder.verify(logger).info("------------------------------------------------------------------------");
+ inOrder.verify(logger).info("Reactor Summary for Maven Project
artifact1 1.0.0-SNAPSHOT:");
+ inOrder.verify(logger).info("");
+ inOrder.verify(logger).info("...");
+ inOrder.verify(logger).info("Maven Project artifact2
............................ FAILURE [ 2.000 s]");
+ inOrder.verify(logger).info("...");
+ inOrder.verify(logger).info("Maven Project artifact5
............................ FAILURE [ 5.000 s]");
+ inOrder.verify(logger).info("...");
+
inOrder.verify(logger).info("------------------------------------------------------------------------");
+ inOrder.verify(logger).info("BUILD FAILURE");
+
inOrder.verify(logger).info("------------------------------------------------------------------------");
+ inOrder.verify(logger).info(eq("Total time: {}{}"), anyString(),
anyString());
+ inOrder.verify(logger).info(eq("Finished at: {}"), anyString());
+
inOrder.verify(logger).info("------------------------------------------------------------------------");
+ }
+
private MavenProject aProject(String artifactId) {
MavenProject project = mock(MavenProject.class);
- when(project.getGroupId()).thenReturn("org.apache.maven");
- when(project.getArtifactId()).thenReturn(artifactId);
- when(project.getName()).thenReturn("Maven Project " + artifactId);
- when(project.getVersion()).thenReturn("1.0.0-SNAPSHOT");
+ lenient().when(project.getGroupId()).thenReturn("org.apache.maven");
+ lenient().when(project.getArtifactId()).thenReturn(artifactId);
+ lenient().when(project.getName()).thenReturn("Maven Project " +
artifactId);
+ lenient().when(project.getVersion()).thenReturn("1.0.0-SNAPSHOT");
return project;
}