web-dev-qa-db-ja.com

leningenを使用して.cljファイルをスクリプトとして実行するにはどうすればよいですか?

これは2番目の質問です Leiningen内にスタンドアロンのClojureパッケージはありますか?

たとえば、ファイルhello_world.clj、そして私はそれを使用してそれを実行することができます

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

leinには既にClojureが含まれているため(lein repl直接)、同じようなことをする方法はありますか

lein script hello_world.clj by lein?

36
Hanfei Sun

lein-exec プラグイン、readme.mdの例を使用(「lein2」ではなく「lein」で更新)

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
26
number23_cn

_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_
30
Ming

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)

-mainclj-scratch.core namespace関数を呼び出します

実行した場合:

Java -jar target/clj-scratch-1.0.0-SNAPSHOT-standalone.jar
8
sw1nn