Форматирование текста не применяется в CLI - с использованием PICOCLI java

Я пытался отображать форматированные тексты в CLI. Я попробовал тот же код, что и в picocli docs (ссылка на документ), но форматирование не применяется.

Пожалуйста, помогите мне определить мою ошибку.

Ожидаемый результат

Пример форматирования

Мой код

import java.util.concurrent.Callable;
import picocli.CommandLine;
import picocli.CommandLine.Command;
import picocli.CommandLine.Help.Ansi;

@Command(name = "test", mixinStandardHelpOptions = true, version = "test 1.0",
   description = "Custom @|bold,underline styles|@ and @|fg(red) colors|@.")
public class Interpreter  implements Callable<Integer> {
    @Override
    public Integer call() throws Exception { // your business logic goes here...
        String str = Ansi.AUTO.string("@|red Hello, colored world!|@");
        System.out.println(str);
        return 0;
    }

    public static void main (String[] args) {
            
        CommandLine prompt = new CommandLine(new Interpreter());
        int exitCode = prompt.execute(args);
        
        System.exit(exitCode);
    }

Мой вывод (форматирование не применяется)

мой вывод

PS. Я использую picocli v 4.5.2, экспортирую проект как runnable jar и создаю его в .exe, используя Запуск4j. Выполнение результата exe в командной строке Windows 10.


person curiousredoC    schedule 11.11.2020    source источник


Ответы (1)


Чтобы получить цвета ANSI в Windows, вам нужно проделать дополнительную работу. Лучше всего добавить библиотеку Jansi в путь к классам.

Чтобы использовать Jansi, вам нужно включить его в своем приложении:

import org.fusesource.jansi.AnsiConsole;
// ...
public static void main(String[] args) {
    AnsiConsole.systemInstall(); // enable colors on Windows
    new CommandLine(new Interpreter()).execute(args);
    AnsiConsole.systemUninstall(); // cleanup when done
}

Если вы заинтересованы в создании собственного исполняемого файла командной строки Windows с помощью GraalVM (вместо использования Launch4j), имейте в виду что Jansi сам по себе недостаточен для отображения цветов. Это отчасти потому, что GraalVM требует настройки, а отчасти потому, что Jansi внутренне зависит от нестандартных системных свойств, без изящного отката, если эти свойства отсутствуют (как в случае с GraalVM).

Возможно, вам будет интересно объединить Jansi с picocli-jansi-graalvm, пока эта проблема не будет устранена. . Пример использования:

import picocli.jansi.graalvm.AnsiConsole; // not org.fusesource.jansi.AnsiConsole
// ...
public static void main(String[] args) {
    int exitCode;
    try (AnsiConsole ansi = AnsiConsole.windowsInstall()) {
        exitCode = new CommandLine(new Interpreter()).execute(args);
    }
    System.exit(exitCode);
}

См. также раздел руководства пользователя picocli, посвященный цветам ANSI в Windows.

person Remko Popma    schedule 11.11.2020