2

在一个新的 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 的 master 分支克隆的示例,但我仍然得到相同的错误,如此处所示

莱宁根错误

4

3 回答 3

1

这是 Leiningen 的一个已知问题,很遗憾不会很快解决。修复它会导致其他东西损坏。解决方法是强制主函数永不返回:

(defn -main
  []
  (.start (Thread. show-cmd))
  @(promise))

在这里,由于承诺永远不会实现,因此 main 将永远等待,从而防止 Leiningen 关闭运行代理、期货等的执行程序。

于 2011-09-03T15:00:16.067 回答
0

You need to upgrade to the latest and greatest leiningen version, possibly compiling from sources. There's a known bug with leiningen that prevents threads to be correctly executed. There are also other questions on the topic, a search might help.

于 2011-08-31T15:09:24.270 回答
0

我已经看到这与运行 leiningen 时无法打开标准输入和错误有关。为了解决这个问题,我使用了

lein uberjar && java -jar projectstandalone.jar args.

它有点慢但有效

于 2011-08-31T21:44:26.677 回答