clojure.java.shell/sh создает исключение RejectedExecutionException при запуске в новом потоке - PullRequest
2 голосов
/ 31 августа 2011

В новом новом проекте leiningen, в котором core.clj содержит

(defn show-cmd
  []
  (-> (shell/sh "ls")
    :out
    println))

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

См. https://gist.github.com/1183753 для полной картины.

Итак, я получаю исключение RejectedExecutionExceptionкогда я делаю lein run на вышеуказанном проекте.Полная трассировка стека находится в сущности.

Тем не менее, вышеприведенное прекрасно работает, когда помещается в файл .clj и запускается непосредственно с clojure, без использования leiningen в рабочем процессе.Это ошибка в leiningen / clojure или это только у меня?

Если это ошибка, пожалуйста, дайте мне знать, как я могу сообщить об этом заинтересованным, поскольку это будет первый раз, когда я обнаружу ошибку:)

Спасибо.

Обновление Принимая предложение @ skuro, я попробовал мой пример с клоном master ветки leiningen, но все равно получаю ту же ошибку, как показаноздесь

Leiningen error

Ответы [ 3 ]

1 голос
/ 03 сентября 2011

Это известная проблема с Leiningen, которая, к сожалению, не будет исправлена ​​в ближайшее время . Исправление может привести к поломке других вещей. Обходной путь должен заставить основную функцию никогда не возвращаться:

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

Здесь, так как обещание никогда не выполняется, main будет ждать вечно, тем самым не позволяя Leiningen закрывать исполнителей, которые запускают агентов, фьючерсы и т. Д.

0 голосов
/ 01 сентября 2011

Я видел, что это связано с невозможностью открыть стандартный ввод и ошибка при запуске через leiningen.чтобы обойти нас, я использовал

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

это было немного медленнее, но работало

0 голосов
/ 31 августа 2011

Вам необходимо выполнить обновление до последней и самой лучшей версии leiningen, возможно, скомпилированной из исходных текстов.Существует известная ошибка с leiningen, которая препятствует правильному выполнению потоков.Есть также другие вопросы по теме, поиск может помочь.

...