【问题标题】:lein causes jline3 terminal to be dumblein 导致 jline3 终端变笨
【发布时间】:2019-06-02 15:06:27
【问题描述】:

我通过 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

【问题讨论】:

    标签: clojure leiningen jline3


    【解决方案1】:

    Leiningen 启动自己的 JVM 来读取 project.clj 等,然后lein run 为您的项目启动一个新的 JVM; lein JVM 然后委托给你的。我怀疑 JLine 正确检测到它的标准输入并不是真正的终端,而是来自 lein JVM 的管道。

    如果你想让 lein 让开,你可以使用lein trampoline runtrampoline 的工作是预先计算所有需要完成的任务,并将它们写入一个 shell 脚本,在关闭 lein JVM 后执行。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2018-11-17
      • 2021-11-13
      • 2019-05-15
      • 2019-02-23
      • 1970-01-01
      • 2021-10-17
      • 1970-01-01
      • 2018-05-16
      相关资源
      最近更新 更多