You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Maven's current console output is excessively verbose and makes it hard to find relevant information. In large multi-module builds (100+ modules), users are overwhelmed with noise — plugin execution banners, download progress lines, and repetitive separators — while actual warnings and errors get buried.
This proposal redesigns Maven's default console output to be concise, informative, and modern, inspired by tools like maven-daemon (mvnd), Gradle, and Cargo.
ExecutionEventLogger captures all lifecycle events
ConsoleMavenTransferListener does \r-based progress
CIDetector classes detect CI environments
mvnd's TerminalOutput provides a proven reference implementation
The core change: a new SmartExecutionEventLogger using JLine's Display API to manage a fixed status region, while delegating full output to a file-based log writer.
Summary
Maven's current console output is excessively verbose and makes it hard to find relevant information. In large multi-module builds (100+ modules), users are overwhelmed with noise — plugin execution banners, download progress lines, and repetitive separators — while actual warnings and errors get buried.
This proposal redesigns Maven's default console output to be concise, informative, and modern, inspired by tools like maven-daemon (mvnd), Gradle, and Cargo.
Related Issues
CIenv variable #11088: CI env variable defaults — auto-detect CI and adjust outputProposal
Mode 1: Smart/Rich Terminal Output (default when interactive TTY)
Using JLine (already a dependency), Maven uses a fixed-bottom status area with scrolling log above:
Key principles:
target/build.logautomaticallyMode 2: CI/Batch Output (default when
CIenv var set or--batch-mode)Mode 3: Verbose (
-X/--verbose)Same as current Maven output — full scrolling output for debugging.
Design Choices
[INFO]-level plugin output goes to a log file. Console shows only progress + warnings + errorsmvn(concise) →mvn --verbose(full mojo output) →mvn -X(debug)Implementation Notes
Building blocks already exist in the codebase:
maven-jline)ExecutionEventLoggercaptures all lifecycle eventsConsoleMavenTransferListenerdoes\r-based progressCIDetectorclasses detect CI environmentsTerminalOutputprovides a proven reference implementationThe core change: a new
SmartExecutionEventLoggerusing JLine'sDisplayAPI to manage a fixed status region, while delegating full output to a file-based log writer.