如何使用leningen将.clj文件作为脚本运行?

Han*_*Sun 36 clojure leiningen

这是继Leiningen之后是否有独立的Clojure包装之后的第二个问题

例如,我有一个文件hello_world.clj,我可以使用它来运行它

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

由于lein已经包含了Clojure(因为我可以lein repl直接运行),有没有办法做同样的事情

lein script hello_world.clj 莱恩?

Min*_*ing 29

有几种方法lein repl:

  • 非常慢: cat your_file.clj | lein repl
  • 慢: echo '(load-file "your_file.clj")' | lein repl
  • 快速:
    1. lein repl
    2. (load-file "your_file.clj")
    3. 重复 2


num*_*_cn 26

使用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
Run Code Online (Sandbox Code Playgroud)


sw1*_*1nn 7

leiningen可以为你创造一个'uberjar'与你的所有依赖....

lein uberjar
Run Code Online (Sandbox Code Playgroud)

将在target子目录中为您创建一个jar.jar将包含您列出的所有依赖项project.clj,因此您无需担心构造复杂的类路径来调用您的代码.

您可以以正常方式将此uberjar作为java类路径中的单个条目引用,或者在将其project.clj调用为可执行jar时指定main-class .

比如project.clj这样:

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

将调用该-main函数clj-scratch.core namespace

如果你跑:

java -jar target/clj-scratch-1.0.0-SNAPSHOT-standalone.jar
Run Code Online (Sandbox Code Playgroud)