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

时间:2012-08-21 23:10:40

标签: clojure leiningen

这是Is there a standalone Clojure package within Leiningen?

之后的第二个问题

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

运行它

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

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

lein

lein script hello_world.clj

4 个答案:

答案 0 :(得分: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

答案 1 :(得分:25)

使用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 :(得分:7)

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

lein uberjar

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

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

e.g。这样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

答案 3 :(得分:0)

我喜欢为此使用inlein

#!/usr/bin/env inlein

'{:dependencies [[org.clojure/clojure "1.8.0"]
                 [com.hypirion/primes "0.2.1"]]}

(require '[com.hypirion.primes :as p])

(when-not (first *command-line-args*)
  (println "Usage:" (System/getProperty "$0") "prime-number")
  (System/exit 1))

(-> (first *command-line-args*)
    (Long/parseLong)
    (p/get)
    println)

然后仅运行chmod +x script.clj即可!

或者,您也可以inlein script.clj my args here