- usable with jdk 17 and above
 - usable via Jvm hotspot and java9
 
- 
command system
- references to CommandArguments
 - no command register, it will be registered by Reflection
 
 - 
custom exception
- references to RuntimeException
 
 - 
log system
- references to FileWriter
 - can be activated or deactivated
 - log path
 - log filename
 
 - 
event system
- input
- thread able - by set thread size
 - period - set as long
 - messages will be written into log file
 
 - output
- output stream will be written into log file
 
 - error
- error stream will be written into log file
 
 
 - input
 - 
builder system
- terminal can be created by builder principle
 
 - 
string color system
- native Jline3 AttributedStringBuilder , AttributedStyle integration
 
 
public class Test {
    public static void main(final String[] args) {
        final JlineExecutor jlineExecutor =
                JlineBuilder.getJlineBuilder()
                        .setThreadSize(3)
                        .setPrompt(Test.prompt())
                        .setCommandArgumentNotAvailable("The arguments are not available")
                        .setCommandNotAvailable("The command is not available")
                        .setPrefix("de.mint.consoleline")
                        .setLog(true)
                        .build();
        jlineExecutor.buildTerminal();
    }
    private static String prompt() {
        return new AttributedStringBuilder()
                .style(AttributedStyle.DEFAULT.foreground(AttributedStyle.CYAN))
                .append("@prompt")
                .style(AttributedStyle.DEFAULT)
                .append("> ")
                .toAnsi();
    }
}public static void main(final String[]args){
final JlineExecutor jlineExecutor=
        JlineBuilder.getJlineBuilder()
        .setThreadSize(3)
        .setPrompt("@prompt> ")
        .setCommandArgumentNotAvailable("The arguments are not available")
        .setCommandNotAvailable("The command is not available")
        .setPrefix("de.mint.consoleline")
        .setLog(true)
        .setLogFilename("Sample.txt")
        .setLogPath("sample/")
        .build();
        jlineExecutor.buildTerminal();
        }public class TestCommand implements CommandArguments {
    public TestCommand() {
    }
    @Override
    public @NotNull String commandName() {
        return "test";
    }
    @Override
    public void onCommand(final String[] arguments) {
        switch (arguments[0]) {
            case "print":
                if (arguments.length > 1) {
                    final String[] message = Arrays.copyOfRange(arguments, 1, arguments.length);
                    System.out.println("TestCommand: " + String.join(" ", message));
                } else {
                    System.out.println("Test output");
                }
        }
    }
}