在一个新的leiningen项目中,其core.clj包含
(defn show-cmd
[]
(-> (shell/sh "ls")
:out
println))
(defn -main
[]
(.start (Thread. show-cmd)))
有关完整图片,请参阅https://gist.github.com/1183753。
因此,当我在上述项目中执行lein run
时,会抛出RejectedExecutionException。完整的堆栈跟踪在主旨中。
但是,当放入.clj
文件并直接使用clojure运行时,上述工作正常,在工作流程中没有leiningen。这是leiningen / clojure中的一个错误还是仅仅是我?
如果是一个错误,请告诉我如何让有关人员知道,因为这是我第一次发现错误:)
感谢。
更新以@skuro的建议为例,我尝试了leiningen的主分支克隆的例子,但我仍然得到同样的错误,如图所示
答案 0 :(得分:1)
这是Leiningen的一个已知问题,不幸的是won't be fixed soon。修复它会导致其他东西破裂。解决方法是强制主函数永不返回:
(defn -main
[]
(.start (Thread. show-cmd))
@(promise))
在这里,由于承诺永远不会实现,主要将永远等待,从而阻止雷宁根关闭经营代理人,期货等的执行人员。
答案 1 :(得分:0)
您需要升级到最新且最好的leiningen版本,可能是从源代码编译的。 leiningen有known bug,可以防止线程被正确执行。关于该主题还有other questions,搜索可能有所帮助。
答案 2 :(得分:0)
我已经看到这与通过leiningen运行时无法打开标准输入和错误有关。为了解决这个问题,我使用了
lein uberjar && java -jar projectstandalone.jar args.
它有点慢但工作