diff --git a/impl/maven-cli/src/main/java/org/apache/maven/cling/invoker/LookupInvoker.java b/impl/maven-cli/src/main/java/org/apache/maven/cling/invoker/LookupInvoker.java index 0d5e5caa6411..50448a8ade38 100644 --- a/impl/maven-cli/src/main/java/org/apache/maven/cling/invoker/LookupInvoker.java +++ b/impl/maven-cli/src/main/java/org/apache/maven/cling/invoker/LookupInvoker.java @@ -323,6 +323,13 @@ protected final void createTerminal(C context) { context.terminal = MessageUtils.getTerminal(); context.closeables.add(MessageUtils::systemUninstall); MessageUtils.registerShutdownHook(); // safety belt + + // when we use embedded executor AND --raw-streams, we must ENSURE streams are properly set up + if (context.invokerRequest.embedded() + && context.options().rawStreams().orElse(false)) { + // to trigger FastTerminal; with raw-streams we must do this ASAP (to have system in/out/err set up) + context.terminal.getName(); + } } else { doConfigureWithTerminal(context, context.terminal); } diff --git a/impl/maven-executor/src/main/java/org/apache/maven/cling/executor/internal/ToolboxTool.java b/impl/maven-executor/src/main/java/org/apache/maven/cling/executor/internal/ToolboxTool.java index ebdd3ac2a512..ad2569a84910 100644 --- a/impl/maven-executor/src/main/java/org/apache/maven/cling/executor/internal/ToolboxTool.java +++ b/impl/maven-executor/src/main/java/org/apache/maven/cling/executor/internal/ToolboxTool.java @@ -159,9 +159,11 @@ private String validateOutput(boolean shave, ByteArrayOutputStream stdout, ByteA result = result.replace("\n", "").replace("\r", ""); } // sanity checks: stderr has any OR result is empty string (no method should emit empty string) - if (stderr.size() > 0 || result.trim().isEmpty()) { - System.err.println( - "Unexpected stdout[" + stdout.size() + "]=" + stdout + "; stderr[" + stderr.size() + "]=" + stderr); + if (result.trim().isEmpty()) { + // see bug https://github.com/apache/maven/pull/11303 Fail in this case + // tl;dr We NEVER expect empty string as output from this tool; so fail here instead to chase ghosts + throw new IllegalStateException("Empty output from Toolbox; stdout[" + stdout.size() + "]=" + stdout + + "; stderr[" + stderr.size() + "]=" + stderr); } return result; }