lein делает терминал jline3 немым - PullRequest
2 голосов
/ 02 июня 2019

Я получаю тупой терминал через lein, тогда как я получаю не тупой терминал через uberjar.Что lein делает, чтобы вызвать это и как это исправить?Это происходит на терминале Win 10

зависимости моего проекта:

:dependencies [[org.clojure/clojure "1.9.0"]
               [org.jline/jline "3.11.0"]
               [org.fusesource.jansi/jansi "1.18"]]

основная функция:

(defn -main
  [& args]
  (let [term (.. (TerminalBuilder/builder)
                 (system true)
                 (build))
        reader (.. LineReaderBuilder
                   (builder)
                   (terminal term)
                   (build))]
    (println (.getName term) (.getType term))
    (let [line (.readLine reader "hello world> ")]
      (.. term (writer) (println (str "====> " line)))
      (.flush term))))

через lein run Я получаю тупой терминал:

> lein run
Jun 02, 2019 11:58:20 AM org.jline.utils.Log logr
WARNING: Unable to create a system terminal, creating a dumb terminal (enable debug logging for more information)
JLine terminal dumb
hello world> hi
====> hi

через Uberjar терминал не тупой:

> lein uberjar
...

> java -jar target\uberjar\terminal-0.1.0-SNAPSHOT-standalone.jar
JLine terminal windows-vtp
hello world> hi
====> hi

1 Ответ

1 голос
/ 03 июня 2019

Leiningen запускает собственную JVM для чтения project.clj и т. Д., А затем lein run запускает новую JVM для вашего проекта; тогда lein JVM делегирует ваше. Я подозреваю, что JLine правильно определяет, что его стандартный вывод - это не терминал, а канал из lev JVM.

Если вы хотите, чтобы лейн ушел с дороги, вы можете использовать lein trampoline run. Задача trampoline состоит в том, чтобы предварительно вычислить все задачи, которые необходимо выполнить, и записать их в сценарий оболочки, который будет выполнен после закрытия JVM lein.

...