【问题标题】:JLine3 "Unable to create a system terminal" after build构建后JLine3“无法创建系统终端”
【发布时间】:2018-11-17 04:03:27
【问题描述】:

我刚刚尝试使用 Jansi 实现 JLine,但它总是抛出相同的 UnsupportedOperationException 指的是 org.jline.terminal.impl.jansi.JansiSupportImpl#winSysTerminal。检查这个方法,只有一个简单的if 决定了这个异常。

所以版本号一定是问题...为了检查它们,我将检测版本的代码复制到我的源代码

public static void main(String[] args) throws Exception {

    String v = Ansi.class.getPackage().getImplementationVersion();
    System.out.println(Ansi.class.getPackage());
    if (v != null) {
        Matcher m = Pattern.compile("([0-9]+)\\.([0-9]+)([\\.-]\\S+)?").matcher(v);
        if (m.matches()) {
            System.out.println("Major: " + Integer.parseInt(m.group(1)));
            System.out.println("Minor: " + Integer.parseInt(m.group(2)));
        }
    }

    //System.setProperty("jansi.passthrough", "true");
    AnsiConsole.systemInstall();

    String prompt = Ansi.ansi()
            .eraseScreen()
            .fg(Ansi.Color.BLUE).bold().a("Console")
            .fgBright(Ansi.Color.BLACK).bold().a(" > ")
            .reset().toString();

    Terminal terminal = TerminalBuilder.builder()
            .system(true)
            .dumb(false)
            .encoding(Charset.forName("UTF-8"))
            .name("Terminal")
            .jna(false)
            .jansi(true)
            .build();

    LineReader reader = LineReaderBuilder.builder()
            .terminal(terminal)
            .build();

    String line;

    while ((line = reader.readLine(prompt)) != null) {
        System.out.println(line);
    }

}

结果让我吃惊: 虽然它在 IntelliJ 中返回 package org.fusesource.jansi, jansi, version 1.17.1, Major: 1, Minor: 17,但控制台不起作用,因为 intellijs 虚拟控制台,当我在构建后从命令行运行它时,它只返回 package org.fusesource.jansi。这一定是由于 intellij 删除了包含信息的清单造成的。它们无法打包,因为它们与运行 jar 文件所需的清单名称相同。

你们知道任何解决方案或解决方法吗?你如何处理这个异常?还是有什么我失败了?

【问题讨论】:

    标签: java intellij-idea jline jline3 jansi


    【解决方案1】:

    您似乎将 Jansi 嵌入到您自己的 jar 中。 如果是你,你应该能够破解 MANIFEST.MF 的 jar 以包含 Jansi 的相关信息。

    Manifest-Version: 1.0
    Created-By: peter
    ...
    
    Name: org/fusesource/jansi/
    Implementation-Version: 1.17.1
    

    【讨论】:

    • 你这个小黑客 - 但它有效 ^^ 让我知道是否有一个解决方案而不会有危险,我将随时在清单中为自己需要这些属性
    猜你喜欢
    • 2021-11-13
    • 2021-08-22
    • 1970-01-01
    • 1970-01-01
    • 2019-05-17
    • 1970-01-01
    • 1970-01-01
    • 2020-07-28
    • 1970-01-01
    相关资源
    最近更新 更多