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/clojureのバグですか、それとも私だけですか?

バグがある場合は、バグを見つけたのはこれが初めてなので、関係者に知らせる方法を教えてください:)

ありがとう。

更新@skuroの提案を受けて、leiningenのマスターブランチクローンを使用して例を試しましたが、ここに示すように、同じエラーが発生します。

ライニンゲンエラー

4

3 に答える 3

1

これはLeiningenの既知の問題であり、残念ながらすぐには修正されません。それを修正すると、他のものが壊れてしまいます。回避策は、main関数が決して戻らないようにすることです。

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

ここでは、約束が果たされないため、mainは永久に待機し、Leiningenがエージェントや先物などを実行するエグゼキュータをシャットダウンするのを防ぎます。

于 2011-09-03T15:00:16.067 に答える
0

これは、leiningenを実行したときに標準の入力を開くことができないこととエラーに関連していることを確認しました。それを回避するために私は使用しました

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

少し遅いですが、動作しました

于 2011-08-31T21:44:26.677 に答える
0

おそらくソースからコンパイルして、最新かつ最高のライニンゲンバージョンにアップグレードする必要があります。スレッドが正しく実行されないようにするleiningenの既知のバグがあります。このトピックに関する他の質問もあります。検索が役立つ場合があります。

于 2011-08-31T15:09:24.270 に答える