lein 导致 jline3 终端变笨
lein causes jline3 terminal to be dumb
我通过 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
Leiningen 启动自己的 JVM 以读取 project.clj 等,然后 lein run
为您的项目启动一个新的 JVM; lein JVM 然后委托给你的。我怀疑 JLine 正确地检测到它的标准输入并不是真正的终端,而是来自 lein JVM 的管道。
如果你想让莱恩让开,你可以使用lein trampoline run
。 trampoline
的工作是 pre-compute 所有需要完成的任务,并将这些任务写入 shell 脚本,在关闭 lein JVM 后执行。
我通过 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
Leiningen 启动自己的 JVM 以读取 project.clj 等,然后 lein run
为您的项目启动一个新的 JVM; lein JVM 然后委托给你的。我怀疑 JLine 正确地检测到它的标准输入并不是真正的终端,而是来自 lein JVM 的管道。
如果你想让莱恩让开,你可以使用lein trampoline run
。 trampoline
的工作是 pre-compute 所有需要完成的任务,并将这些任务写入 shell 脚本,在关闭 lein JVM 后执行。