JLine — это библиотека Java для работы с консольным вводом. По функционалу она похожа на BSD editline и GNU readline, но имеет дополнительные возможности, которые делают её сравнимой с редактором строк ZSH. Пользователи, знакомые с возможностями readline/editline для современных оболочек (таких как bash и tcsh), найдут большинство функций редактирования команд JLine знакомыми.
JLine 3.x является развитием JLine 2.x.
Лицензия
JLine распространяется под лицензией BSD, что означает, что вы можете свободно распространять, модифицировать или продавать его практически без ограничений.
Документация
Форумы
Артефакты
JLine можно использовать с одним пакетом или более мелкими специализированными jar-файлами. Пакет содержит все jar-файлы, кроме jline-groovy, который должен быть включён в classpath, если вы хотите использовать возможности сценариев. Большой пакет называется:
jline-${jline.version}.jar
Зависимости минимальны: вы можете использовать JLine без каких-либо зависимостей на *nix системах, но для поддержки Windows или более продвинутого использования вам потребуется добавить либо библиотеку Jansi, либо библиотеку JNA.
Вы также можете использовать специализированные jar-файлы:
JANSI
Проект JANSI был объединён с JLine. Доступны следующие артефакты:
Поддерживаемые платформы
JLine поддерживает следующие платформы:
FFM против JNI против Jansi против JNA против Exec
Для выполнения необходимых операций JLine должен взаимодействовать со слоем ОС. Выбор провайдера в JLine осуществляется через интерфейс TerminalProvider.
На платформе Windows обязательно полагаться на собственные вызовы, поэтому необходимо зарегистрировать реальный провайдер (jar-файл jline-terminal-xxx) и иметь доступными его зависимости (обычно это библиотека Jansi или JNA). В противном случае будет создан «тупой» терминал без расширенных возможностей.
По умолчанию будет использоваться следующий порядок:
Провайдер FFM доступен с JLine 3.24 и при работе на JDK >= 22. Он очень лёгкий и не требует дополнительных зависимостей. С JLine 3.26 провайдеру FFM требуется JDK 22 с опцией JVM --enable-native-access=ALL-UNNAMED
. Обратите внимание, что JLine 3.24 и 3.25 используют предварительную версию поддержки FFM, поставляемую в JDK 21, которая несовместима с окончательной версией в JDK 22.
С JLine 3.24.0 JLine предоставляет собственный провайдер на основе JNI и собственные библиотеки. Это лучший выбор по умолчанию, не требующий дополнительных зависимостей. Одним из требований является то, что JLine загрузит собственную библиотеку: обычно это не проблема, но может быть ограничением в определённых средах.
Библиотека Jansi — это специализированная библиотека для поддержки последовательностей ANSI в терминалах. Исторически сложилось так, что методы JNI, используемые JLine, предоставлялись Jansi. Чтобы минимизировать затраты на обслуживание, Jansi была объединена с JLine в версии 3.25. Этот провайдер был объявлен устаревшим в версии 3.26 в пользу провайдера JNI.
Библиотека JNA стремится предоставить альтернативный способ доступа к собственным методам без необходимости написания полной собственной библиотеки JNI. Если JNA находится в загрузчике классов JLine, можно использовать этот провайдер. JNA не поддерживается на архитектурах Apple M2. Этот провайдер также был объявлен устаревшим в версии 3.26 в пользу провайдера FFM.
Провайдер exec доступен в системах Posix и в Windows при работе под Cygwin или MSys2. Этот провайдер запускает дочерние процессы всякий раз, когда обращается к терминалу (используя Terminal.getAttributes, Terminal.setAttributes, Terminal.getSize, Terminal.setSize).
Этот провайдер также не поддерживает внешние терминалы (например, при создании терминала для входящего соединения) и не поддерживает среду Windows native.
Используйте следующее определение, чтобы использовать JLine в своём проекте Maven:
<dependency>
<groupId>org.jline</groupId>
<artifactId>jline</artifactId>
<version>${jline.version}</version>
</dependency>
JLine также можно использовать с более низкоуровневыми jar-файлами:
<dependency>
<groupId>org.jline</groupId>
<artifactId>jline-terminal</artifactId>
<version>${jline.version}</version>
</dependency>
<dependency>
<groupId>org.jline</groupId>
<artifactId>jline-terminal-jni</artifactId>
<version>${jline.version}</version>
</dependency>
<dependency>
<groupId>org.jline</groupId>
<artifactId>jline-reader</artifactId>
<version>${jline.version}</version>
</dependency>
Все jar-файлы и релизы доступны в Maven Central, так что вы найдёте всё по следующему адресу: https://repo1.maven.org/maven2/org/jline/.
Проверьте и соберите:
git clone git://github.com/jline/jline3.git
cd jline3
./build rebuild
Сборка Graal native-image demo:
./build rebuild -Pnative-image
Создаются следующие артефакты:
Большой пакет включает в себя всё (кроме jline-groovy) и находится по адресу: jline/target/jline-${jline.version}.jar
Пакет jansi находится по адресу: jansi/target/jansi-${jline.version}.jar
Мелкозернистые пакеты находятся по адресу: terminal/target/jline-terminal-${jline.version}.jar terminal-jansi/target/jline-jansi-${jline.version}.jar terminal-jna/target/jline-jna-${jline.version}.jar reader/target/jline-reader-${jline.version}.jar style/target/jline-style-${jline.version}.jar remote-telnet/target/jline-remote-telnet-${jline.version}.jar remote-ssh/target/jline-remote-ssh-${jline.version}.jar builtins/target/jline-builtins-${jline.version}.jar console/target/jline-console-${jline.version}.jar groovy/target/jline-groovy-${jline.version}.jar jansi-core/target/jansi-core-${jline.version}.jar
В Maven есть концепция SNAPSHOT
. Во время разработки версия jline всегда будет заканчиваться на -SNAPSHOT
, что означает, что версия находится в разработке и не является релизом.
Обратите внимание, что все эти артефакты также устанавливаются в локальный репозиторий maven, поэтому вы обычно найдёте их в следующей папке: ~/.m2/repository/org/jline/
.
Чтобы запустить демо, просто используйте одну из следующих команд после сборки JLine:
# Gogo terminal
./build demo
# Groovy REPL
./build repl
# Graal native-image
./build graal
Вы можете оставить комментарий после Вход в систему
Неприемлемый контент может быть отображен здесь и не будет показан на странице. Вы можете проверить и изменить его с помощью соответствующей функции редактирования.
Если вы подтверждаете, что содержание не содержит непристойной лексики/перенаправления на рекламу/насилия/вульгарной порнографии/нарушений/пиратства/ложного/незначительного или незаконного контента, связанного с национальными законами и предписаниями, вы можете нажать «Отправить» для подачи апелляции, и мы обработаем ее как можно скорее.
Комментарии ( 0 )