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
+
+