This is an automated email from the ASF dual-hosted git repository. gnodet pushed a commit to branch master in repository https://gitbox.apache.org/repos/asf/maven.git
The following commit(s) were added to refs/heads/master by this push: new a9934f91fd Extract JLine support into its own module (#1426) a9934f91fd is described below commit a9934f91fd0808e55f1b08ada91b0d2fcdf59f4a Author: Guillaume Nodet <gno...@gmail.com> AuthorDate: Thu Feb 29 00:31:59 2024 +0100 Extract JLine support into its own module (#1426) --- maven-embedder/pom.xml | 4 ++ .../main/java/org/apache/maven/cli/CLIManager.java | 2 +- .../org/apache/maven/cli/CLIReportingUtils.java | 2 +- .../main/java/org/apache/maven/cli/MavenCli.java | 4 +- .../src/main/java/org/fusesource/jansi/Ansi.java | 2 +- .../java/org/apache/maven/cli/MavenCliTest.java | 2 +- .../maven/cli/event/ExecutionEventLoggerTest.java | 4 +- .../transfer/ConsoleMavenTransferListenerTest.java | 2 +- maven-jline/pom.xml | 61 ++++++++++++++++++++++ .../maven}/jline/JLineMessageBuilderFactory.java | 6 +-- .../java/org/apache/maven}/jline/MessageUtils.java | 2 +- maven-slf4j-provider/pom.xml | 2 +- .../org/apache/maven/slf4j/MavenSimpleLogger.java | 23 ++++++-- .../java/org/slf4j/simple/ExtSimpleLogger.java | 39 ++++++++++++++ .../apache/maven/slf4j/MavenSimpleLoggerTest.java | 2 +- pom.xml | 6 +++ 16 files changed, 144 insertions(+), 19 deletions(-) diff --git a/maven-embedder/pom.xml b/maven-embedder/pom.xml index dd12ca3f03..02259f128a 100644 --- a/maven-embedder/pom.xml +++ b/maven-embedder/pom.xml @@ -48,6 +48,10 @@ under the License. <groupId>org.apache.maven</groupId> <artifactId>maven-core</artifactId> </dependency> + <dependency> + <groupId>org.apache.maven</groupId> + <artifactId>maven-jline</artifactId> + </dependency> <dependency> <groupId>org.apache.maven</groupId> <artifactId>maven-plugin-api</artifactId> diff --git a/maven-embedder/src/main/java/org/apache/maven/cli/CLIManager.java b/maven-embedder/src/main/java/org/apache/maven/cli/CLIManager.java index cc356cca3c..e1fc54ba5f 100644 --- a/maven-embedder/src/main/java/org/apache/maven/cli/CLIManager.java +++ b/maven-embedder/src/main/java/org/apache/maven/cli/CLIManager.java @@ -28,7 +28,7 @@ import org.apache.commons.cli.HelpFormatter; import org.apache.commons.cli.Option; import org.apache.commons.cli.Options; import org.apache.commons.cli.ParseException; -import org.apache.maven.cli.jline.MessageUtils; +import org.apache.maven.jline.MessageUtils; /** */ diff --git a/maven-embedder/src/main/java/org/apache/maven/cli/CLIReportingUtils.java b/maven-embedder/src/main/java/org/apache/maven/cli/CLIReportingUtils.java index a5538ca93c..8d45dd7515 100644 --- a/maven-embedder/src/main/java/org/apache/maven/cli/CLIReportingUtils.java +++ b/maven-embedder/src/main/java/org/apache/maven/cli/CLIReportingUtils.java @@ -25,7 +25,7 @@ import java.util.Date; import java.util.Locale; import java.util.Properties; -import org.apache.maven.cli.jline.MessageUtils; +import org.apache.maven.jline.MessageUtils; import org.apache.maven.utils.Os; import org.slf4j.Logger; diff --git a/maven-embedder/src/main/java/org/apache/maven/cli/MavenCli.java b/maven-embedder/src/main/java/org/apache/maven/cli/MavenCli.java index 4581253417..b4219e66f0 100644 --- a/maven-embedder/src/main/java/org/apache/maven/cli/MavenCli.java +++ b/maven-embedder/src/main/java/org/apache/maven/cli/MavenCli.java @@ -58,8 +58,6 @@ import org.apache.maven.cli.event.ExecutionEventLogger; import org.apache.maven.cli.internal.BootstrapCoreExtensionManager; import org.apache.maven.cli.internal.extension.io.CoreExtensionsStaxReader; import org.apache.maven.cli.internal.extension.model.CoreExtension; -import org.apache.maven.cli.jline.JLineMessageBuilderFactory; -import org.apache.maven.cli.jline.MessageUtils; import org.apache.maven.cli.logging.Slf4jConfiguration; import org.apache.maven.cli.logging.Slf4jConfigurationFactory; import org.apache.maven.cli.logging.Slf4jLoggerManager; @@ -81,6 +79,8 @@ import org.apache.maven.execution.scope.internal.MojoExecutionScope; import org.apache.maven.execution.scope.internal.MojoExecutionScopeModule; import org.apache.maven.extension.internal.CoreExports; import org.apache.maven.extension.internal.CoreExtensionEntry; +import org.apache.maven.jline.JLineMessageBuilderFactory; +import org.apache.maven.jline.MessageUtils; import org.apache.maven.lifecycle.LifecycleExecutionException; import org.apache.maven.logwrapper.LogLevelRecorder; import org.apache.maven.logwrapper.MavenSlf4jWrapperFactory; diff --git a/maven-embedder/src/main/java/org/fusesource/jansi/Ansi.java b/maven-embedder/src/main/java/org/fusesource/jansi/Ansi.java index 8cf2051511..9c9184bc38 100644 --- a/maven-embedder/src/main/java/org/fusesource/jansi/Ansi.java +++ b/maven-embedder/src/main/java/org/fusesource/jansi/Ansi.java @@ -160,7 +160,7 @@ public class Ansi implements Appendable { } public static boolean isEnabled() { - return org.apache.maven.cli.jline.MessageUtils.isColorEnabled() && org.jline.jansi.Ansi.isEnabled(); + return org.apache.maven.jline.MessageUtils.isColorEnabled() && org.jline.jansi.Ansi.isEnabled(); } public static Ansi ansi() { diff --git a/maven-embedder/src/test/java/org/apache/maven/cli/MavenCliTest.java b/maven-embedder/src/test/java/org/apache/maven/cli/MavenCliTest.java index ebd57c7609..40e15ac382 100644 --- a/maven-embedder/src/test/java/org/apache/maven/cli/MavenCliTest.java +++ b/maven-embedder/src/test/java/org/apache/maven/cli/MavenCliTest.java @@ -35,7 +35,6 @@ import org.apache.commons.cli.Option; import org.apache.commons.cli.Options; import org.apache.commons.cli.ParseException; import org.apache.maven.Maven; -import org.apache.maven.cli.jline.MessageUtils; import org.apache.maven.cli.transfer.ConsoleMavenTransferListener; import org.apache.maven.cli.transfer.QuietMavenTransferListener; import org.apache.maven.cli.transfer.SimplexTransferListener; @@ -44,6 +43,7 @@ import org.apache.maven.eventspy.internal.EventSpyDispatcher; import org.apache.maven.execution.MavenExecutionRequest; import org.apache.maven.execution.ProfileActivation; import org.apache.maven.execution.ProjectActivation; +import org.apache.maven.jline.MessageUtils; import org.apache.maven.model.root.DefaultRootLocator; import org.apache.maven.project.MavenProject; import org.apache.maven.toolchain.building.ToolchainsBuildingRequest; 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 4ae5326100..4b9351530d 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 @@ -22,10 +22,10 @@ import java.io.File; import com.google.common.collect.ImmutableList; import org.apache.commons.io.FilenameUtils; -import org.apache.maven.cli.jline.JLineMessageBuilderFactory; -import org.apache.maven.cli.jline.MessageUtils; import org.apache.maven.execution.ExecutionEvent; import org.apache.maven.execution.MavenSession; +import org.apache.maven.jline.JLineMessageBuilderFactory; +import org.apache.maven.jline.MessageUtils; import org.apache.maven.project.MavenProject; import org.junit.jupiter.api.AfterAll; import org.junit.jupiter.api.BeforeAll; diff --git a/maven-embedder/src/test/java/org/apache/maven/cli/transfer/ConsoleMavenTransferListenerTest.java b/maven-embedder/src/test/java/org/apache/maven/cli/transfer/ConsoleMavenTransferListenerTest.java index c1d8555a04..b9d9fdfb82 100644 --- a/maven-embedder/src/test/java/org/apache/maven/cli/transfer/ConsoleMavenTransferListenerTest.java +++ b/maven-embedder/src/test/java/org/apache/maven/cli/transfer/ConsoleMavenTransferListenerTest.java @@ -26,7 +26,7 @@ import java.util.concurrent.CountDownLatch; import java.util.concurrent.ExecutorService; import java.util.concurrent.Executors; -import org.apache.maven.cli.jline.JLineMessageBuilderFactory; +import org.apache.maven.jline.JLineMessageBuilderFactory; import org.eclipse.aether.DefaultRepositorySystemSession; import org.eclipse.aether.transfer.TransferCancelledException; import org.eclipse.aether.transfer.TransferEvent; diff --git a/maven-jline/pom.xml b/maven-jline/pom.xml new file mode 100644 index 0000000000..a254bbcb64 --- /dev/null +++ b/maven-jline/pom.xml @@ -0,0 +1,61 @@ +<?xml version="1.0" encoding="UTF-8"?> +<!-- +Licensed to the Apache Software Foundation (ASF) under one +or more contributor license agreements. See the NOTICE file +distributed with this work for additional information +regarding copyright ownership. The ASF licenses this file +to you under the Apache License, Version 2.0 (the +"License"); you may not use this file except in compliance +with the License. You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, +software distributed under the License is distributed on an +"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +KIND, either express or implied. See the License for the +specific language governing permissions and limitations +under the License. +--> +<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> + <modelVersion>4.0.0</modelVersion> + <parent> + <groupId>org.apache.maven</groupId> + <artifactId>maven</artifactId> + <version>4.0.0-alpha-13-SNAPSHOT</version> + </parent> + + <artifactId>maven-jline</artifactId> + <name>Maven JLine integration</name> + <description>Provides the JLine integration in Maven</description> + + <dependencies> + <dependency> + <groupId>org.apache.maven</groupId> + <artifactId>maven-api-core</artifactId> + </dependency> + <dependency> + <groupId>org.jline</groupId> + <artifactId>jline</artifactId> + </dependency> + <dependency> + <groupId>javax.inject</groupId> + <artifactId>javax.inject</artifactId> + </dependency> + <dependency> + <groupId>javax.annotation</groupId> + <artifactId>javax.annotation-api</artifactId> + </dependency> + <dependency> + <groupId>org.codehaus.plexus</groupId> + <artifactId>plexus-interactivity-api</artifactId> + <exclusions> + <exclusion> + <groupId>org.codehaus.plexus</groupId> + <artifactId>plexus-container-default</artifactId> + </exclusion> + </exclusions> + </dependency> + </dependencies> + +</project> diff --git a/maven-embedder/src/main/java/org/apache/maven/cli/jline/JLineMessageBuilderFactory.java b/maven-jline/src/main/java/org/apache/maven/jline/JLineMessageBuilderFactory.java similarity index 98% rename from maven-embedder/src/main/java/org/apache/maven/cli/jline/JLineMessageBuilderFactory.java rename to maven-jline/src/main/java/org/apache/maven/jline/JLineMessageBuilderFactory.java index 139b9bf4a4..de47d4b753 100644 --- a/maven-embedder/src/main/java/org/apache/maven/cli/jline/JLineMessageBuilderFactory.java +++ b/maven-jline/src/main/java/org/apache/maven/jline/JLineMessageBuilderFactory.java @@ -16,7 +16,7 @@ * specific language governing permissions and limitations * under the License. */ -package org.apache.maven.cli.jline; +package org.apache.maven.jline; import javax.annotation.Priority; import javax.inject.Named; @@ -40,8 +40,6 @@ import org.jline.utils.AttributedStringBuilder; import org.jline.utils.AttributedStyle; import org.jline.utils.StyleResolver; -import static org.jline.utils.AttributedStyle.DEFAULT; - @Experimental @Named @Singleton @@ -223,7 +221,7 @@ public class JLineMessageBuilderFactory implements MessageBuilderFactory, Prompt @Override public MessageBuilder resetStyle() { - builder.style(DEFAULT); + builder.style(AttributedStyle.DEFAULT); return this; } diff --git a/maven-embedder/src/main/java/org/apache/maven/cli/jline/MessageUtils.java b/maven-jline/src/main/java/org/apache/maven/jline/MessageUtils.java similarity index 98% rename from maven-embedder/src/main/java/org/apache/maven/cli/jline/MessageUtils.java rename to maven-jline/src/main/java/org/apache/maven/jline/MessageUtils.java index d1fb0f94e3..a0e8cc338c 100644 --- a/maven-embedder/src/main/java/org/apache/maven/cli/jline/MessageUtils.java +++ b/maven-jline/src/main/java/org/apache/maven/jline/MessageUtils.java @@ -16,7 +16,7 @@ * specific language governing permissions and limitations * under the License. */ -package org.apache.maven.cli.jline; +package org.apache.maven.jline; import java.io.IOError; import java.io.IOException; diff --git a/maven-slf4j-provider/pom.xml b/maven-slf4j-provider/pom.xml index 366c4bd0d7..b89628a91e 100644 --- a/maven-slf4j-provider/pom.xml +++ b/maven-slf4j-provider/pom.xml @@ -47,7 +47,7 @@ under the License. </dependency> <dependency> <groupId>org.apache.maven</groupId> - <artifactId>maven-embedder</artifactId> + <artifactId>maven-jline</artifactId> </dependency> </dependencies> diff --git a/maven-slf4j-provider/src/main/java/org/apache/maven/slf4j/MavenSimpleLogger.java b/maven-slf4j-provider/src/main/java/org/apache/maven/slf4j/MavenSimpleLogger.java index 5b234b1524..46a794b160 100644 --- a/maven-slf4j-provider/src/main/java/org/apache/maven/slf4j/MavenSimpleLogger.java +++ b/maven-slf4j-provider/src/main/java/org/apache/maven/slf4j/MavenSimpleLogger.java @@ -19,11 +19,12 @@ package org.apache.maven.slf4j; import java.io.PrintStream; +import java.util.function.Consumer; import org.apache.maven.api.services.MessageBuilder; -import org.slf4j.simple.SimpleLogger; +import org.slf4j.simple.ExtSimpleLogger; -import static org.apache.maven.cli.jline.MessageUtils.builder; +import static org.apache.maven.jline.MessageUtils.builder; /** * Logger for Maven, that support colorization of levels and stacktraces. This class implements 2 methods introduced in @@ -31,7 +32,7 @@ import static org.apache.maven.cli.jline.MessageUtils.builder; * * @since 3.5.0 */ -public class MavenSimpleLogger extends SimpleLogger { +public class MavenSimpleLogger extends ExtSimpleLogger { private final String traceRenderedLevel = builder().trace("TRACE").build(); private final String debugRenderedLevel = builder().debug("DEBUG").build(); @@ -39,6 +40,12 @@ public class MavenSimpleLogger extends SimpleLogger { private final String warnRenderedLevel = builder().warning("WARNING").build(); private final String errorRenderedLevel = builder().error("ERROR").build(); + static Consumer<String> logSink; + + public static void setLogSink(Consumer<String> logSink) { + MavenSimpleLogger.logSink = logSink; + } + MavenSimpleLogger(String name) { super(name); } @@ -60,6 +67,16 @@ public class MavenSimpleLogger extends SimpleLogger { } } + @Override + protected void doWrite(StringBuilder buf, Throwable t) { + Consumer<String> sink = logSink; + if (sink != null) { + sink.accept(buf.toString()); + } else { + super.doWrite(buf, t); + } + } + @Override protected void writeThrowable(Throwable t, PrintStream stream) { if (t == null) { diff --git a/maven-slf4j-provider/src/main/java/org/slf4j/simple/ExtSimpleLogger.java b/maven-slf4j-provider/src/main/java/org/slf4j/simple/ExtSimpleLogger.java new file mode 100644 index 0000000000..973f75a7e8 --- /dev/null +++ b/maven-slf4j-provider/src/main/java/org/slf4j/simple/ExtSimpleLogger.java @@ -0,0 +1,39 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + */ +package org.slf4j.simple; + +/** + * Class inheriting SimpleLogger to work around the fact that the {@link #write(StringBuilder, Throwable)} + * method is package private. + */ +public class ExtSimpleLogger extends SimpleLogger { + + public ExtSimpleLogger(String name) { + super(name); + } + + @Override + void write(StringBuilder buf, Throwable t) { + doWrite(buf, t); + } + + protected void doWrite(StringBuilder buf, Throwable t) { + super.write(buf, t); + } +} diff --git a/maven-slf4j-provider/src/test/java/org/apache/maven/slf4j/MavenSimpleLoggerTest.java b/maven-slf4j-provider/src/test/java/org/apache/maven/slf4j/MavenSimpleLoggerTest.java index b8d276ef8f..bd2e1dd4a9 100644 --- a/maven-slf4j-provider/src/test/java/org/apache/maven/slf4j/MavenSimpleLoggerTest.java +++ b/maven-slf4j-provider/src/test/java/org/apache/maven/slf4j/MavenSimpleLoggerTest.java @@ -24,7 +24,7 @@ import java.util.Arrays; import java.util.List; import java.util.NoSuchElementException; -import org.apache.maven.cli.jline.MessageUtils; +import org.apache.maven.jline.MessageUtils; import org.junit.jupiter.api.AfterEach; import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.Test; diff --git a/pom.xml b/pom.xml index 95bf360858..1a2f2853a0 100644 --- a/pom.xml +++ b/pom.xml @@ -107,6 +107,7 @@ under the License. <module>maven-model-builder</module> <module>maven-di</module> <module>maven-xml-impl</module> + <module>maven-jline</module> <module>maven-core</module> <module>maven-settings</module> <module>maven-settings-builder</module> @@ -203,6 +204,11 @@ under the License. <artifactId>maven-builder-support</artifactId> <version>${project.version}</version> </dependency> + <dependency> + <groupId>org.apache.maven</groupId> + <artifactId>maven-jline</artifactId> + <version>${project.version}</version> + </dependency> <dependency> <groupId>org.apache.maven</groupId> <artifactId>maven-core</artifactId>