Подтвердить что ты не робот

Как запустить файл .clj как script с помощью leningen?

Это второй вопрос после Есть ли в Leiningen автономный пакет Clojure?

Например, у меня есть файл hello_world.clj, и я могу запустить его с помощью

java -cp clojure.jar clojure.main hello_world.clj.

Поскольку лейн уже содержит Clojure (потому что я могу запустить lein repl напрямую), есть ли способ сделать то же самое, что и

lein script hello_world.clj by lein?

4b9b3361

Ответ 1

использовать lein-exec плагин, пример из readme.md(обновлен с помощью "lein" вместо "lein2" )

cat foo.clj | lein exec
lein exec -e '(println "foo" (+ 20 30))'
lein exec -ep "(use 'foo.bar) (pprint (map baz (range 200)))"
lein exec -p script/run-server.clj -p 8088
lein exec ~/common/delete-logs.clj

Ответ 2

Существует несколько способов с lein repl:

  • Очень медленно: cat your_file.clj | lein repl
  • Slow: echo '(load-file "your_file.clj")' | lein repl
  • Быстро:
    • lein repl
    • (load-file "your_file.clj")
    • repeat 2

Ответ 3

leiningen может создать "uberjar" для вас со всеми вашими зависимостями.

lein uberjar

создаст банку для вас в целевом подкаталоге. В jar будут указаны все зависимости, перечисленные в вашем project.clj, поэтому вам не нужно беспокоиться о создании сложного пути к классам для вызова вашего кода.

Вы можете ссылаться на этот uberjar как на одну запись в пути класса java обычным способом или указать основной класс в project.clj, вызывать его как исполняемую банку.

например. a project.clj следующим образом:

(defproject clj-scratch "1.0.0-SNAPSHOT"
 :description "FIXME: write description"
 :dependencies [[org.clojure/clojure "1.4.0"]                     
 :main clj-scratch.core)

будет вызывать функцию -main в clj-scratch.core namespace

если вы запустите:

java -jar target/clj-scratch-1.0.0-SNAPSHOT-standalone.jar