diff --git a/client/pom.xml b/client/pom.xml index 91fb4777..df0fc1f1 100644 --- a/client/pom.xml +++ b/client/pom.xml @@ -98,6 +98,7 @@ ${maven.compiler.release} + org.jline:jline-terminal-ffm org.graalvm.nativeimage:svm diff --git a/client/src/main/java-mvnd/org/mvndaemon/mvnd/client/DefaultClient.java b/client/src/main/java-mvnd/org/mvndaemon/mvnd/client/DefaultClient.java index ee5f9ae0..28bd6f5d 100644 --- a/client/src/main/java-mvnd/org/mvndaemon/mvnd/client/DefaultClient.java +++ b/client/src/main/java-mvnd/org/mvndaemon/mvnd/client/DefaultClient.java @@ -41,9 +41,10 @@ import java.util.concurrent.atomic.AtomicReference; import java.util.stream.Collectors; import java.util.stream.Stream; -import org.fusesource.jansi.Ansi; -import org.fusesource.jansi.internal.CLibrary; +import org.jline.terminal.spi.SystemStream; +import org.jline.terminal.spi.TerminalExt; import org.jline.utils.AttributedString; +import org.jline.utils.AttributedStringBuilder; import org.jline.utils.AttributedStyle; import org.mvndaemon.mvnd.common.DaemonException; import org.mvndaemon.mvnd.common.DaemonInfo; @@ -61,7 +62,6 @@ import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.slf4j.bridge.SLF4JBridgeHandler; import org.slf4j.impl.MvndLoggerFactory; -import org.slf4j.impl.StaticLoggerBinder; import static org.mvndaemon.mvnd.client.DaemonParameters.LOG_EXTENSION; @@ -94,19 +94,6 @@ public class DefaultClient implements Client { final boolean batchMode = Environment.MAVEN_BATCH_MODE.hasCommandLineOption(args) || Environment.COMPLETION.hasCommandLineOption(args); - // Color - Color styleColor = - Color.of(Environment.MAVEN_COLOR.removeCommandLineOption(args)).orElse(Color.auto); - if (styleColor == Color.auto) { - /* Translate from auto to either always or never */ - /* stdout is not a terminal e.g. when stdout is redirected to a file */ - final boolean stdoutIsTerminal = CLibrary.isatty(1) != 0; - styleColor = (batchMode || logFile != null || !stdoutIsTerminal) ? Color.never : Color.always; - } - /* We cannot use Environment.addCommandLineOption() because that one would pass --color to the daemon - * and --color is not supported there yet. */ - args.add("-D" + Environment.MAVEN_COLOR.getProperty() + "=" + styleColor.name()); - String userJdkJavaOpts = System.getenv(Environment.JDK_JAVA_OPTIONS.getEnvironmentVariable()); if (userJdkJavaOpts != null) { Environment.JDK_JAVA_OPTIONS.addCommandLineOption(args, userJdkJavaOpts); @@ -115,8 +102,8 @@ public class DefaultClient implements Client { // System properties setSystemPropertiesFromCommandLine(args); - if (StaticLoggerBinder.getSingleton().getLoggerFactory() instanceof MvndLoggerFactory) { - ((MvndLoggerFactory) StaticLoggerBinder.getSingleton().getLoggerFactory()).reconfigure(); + if (LoggerFactory.getILoggerFactory() instanceof MvndLoggerFactory) { + ((MvndLoggerFactory) LoggerFactory.getILoggerFactory()).reconfigure(); } DaemonParameters parameters = new DaemonParameters(); @@ -158,6 +145,21 @@ public class DefaultClient implements Client { boolean noBuffering = batchMode || parameters.noBuffering(); try (TerminalOutput output = new TerminalOutput(noBuffering, parameters.rollingWindowSize(), logFile)) { try { + // Color + // We need to defer this part until the terminal is created + Color styleColor = Color.of(Environment.MAVEN_COLOR.removeCommandLineOption(args)) + .orElse(Color.auto); + if (styleColor == Color.auto) { + /* Translate from auto to either always or never */ + /* stdout is not a terminal e.g. when stdout is redirected to a file */ + final boolean stdoutIsTerminal = + ((TerminalExt) output.getTerminal()).getProvider().isSystemStream(SystemStream.Output); + styleColor = (batchMode || logFile != null || !stdoutIsTerminal) ? Color.never : Color.always; + } + /* We cannot use Environment.addCommandLineOption() because that one would pass --color to the daemon + * and --color is not supported there yet. */ + args.add("-D" + Environment.MAVEN_COLOR.getProperty() + "=" + styleColor.name()); + final ExecutionResult result = new DefaultClient(parameters).execute(output, args); exitCode = result.getExitCode(); } catch (DaemonException.InterruptedException e) { @@ -251,8 +253,12 @@ public class DefaultClient implements Client { + " (" + buildProperties.getRevision() + ")"; boolean isColored = !"never".equals(Environment.MAVEN_COLOR.getCommandLineOption(args)); - final String v = - isColored ? Ansi.ansi().bold().a(mvndVersionString).reset().toString() : mvndVersionString; + final String v = isColored + ? new AttributedStringBuilder() + .style(AttributedStyle.BOLD) + .append(mvndVersionString) + .toAnsi() + : mvndVersionString; output.accept(Message.log(v)); // Print terminal information output.describeTerminal(); diff --git a/common/pom.xml b/common/pom.xml index 2193e430..edf98db8 100644 --- a/common/pom.xml +++ b/common/pom.xml @@ -43,7 +43,11 @@ org.jline - jline-terminal-jansi + jline-terminal-jni + + + org.jline + jline-terminal-ffm diff --git a/common/src/main/java/org/mvndaemon/mvnd/common/logging/TerminalOutput.java b/common/src/main/java/org/mvndaemon/mvnd/common/logging/TerminalOutput.java index 72fa82e4..dbf475d2 100644 --- a/common/src/main/java/org/mvndaemon/mvnd/common/logging/TerminalOutput.java +++ b/common/src/main/java/org/mvndaemon/mvnd/common/logging/TerminalOutput.java @@ -498,6 +498,10 @@ public class TerminalOutput implements ClientOutput { return terminal.getWidth(); } + public Terminal getTerminal() { + return terminal; + } + void readInputLoop() { try { while (!closing) { diff --git a/dist/src/main/provisio/maven-distro.xml b/dist/src/main/provisio/maven-distro.xml index 58554bde..0b094410 100644 --- a/dist/src/main/provisio/maven-distro.xml +++ b/dist/src/main/provisio/maven-distro.xml @@ -61,7 +61,10 @@ - + + + + diff --git a/pom.xml b/pom.xml index 6650533a..d0806de7 100644 --- a/pom.xml +++ b/pom.xml @@ -82,7 +82,6 @@ 0.10.2 4.0.21 1.0 - 2.4.1 3.26.1 3.9.8 @@ -288,13 +287,13 @@ org.jline - jline-terminal-jansi + jline-terminal-jni ${jline.version} - org.fusesource.jansi - jansi - ${jansi.version} + org.jline + jline-terminal-ffm + ${jline.version} @@ -527,6 +526,23 @@ true + + enforce-bytecode-version + + enforce + + + + + ${maven.compiler.target} + + org.jline:jline-terminal-ffm + + + + true + +