38

这是在 Leiningen 中是否有独立的 Clojure 包之后的第二个问题?

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

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

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

lein script hello_world.clj莱因?

4

4 回答 4

39

有几种方法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
于 2015-01-29T11:23:28.860 回答
27

使用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
于 2012-08-22T00:45:48.150 回答
8

leiningen 可以为您创建一个包含所有依赖项的“uberjar”....

lein uberjar

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

您可以以正常方式将此 uberjar 作为 Java 类路径中的单个条目引用,或者在project.clj调用它时指定一个主类作为可执行 jar。

例如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
于 2012-08-21T23:12:57.150 回答
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

于 2020-11-05T11:03:57.070 回答