代わりに、プログラムを uberjar としてコンパイルすることをお勧めしますか? jar は、ラッパー スクリプトと同じように名前で実行できますが、この方法では追加のラッパーは必要ありません。
leiningen の最新バージョンをダウンロードしてプロジェクトを作成$ lein new foo
し、ディレクトリに移動します。コードを開発中の場合は、おそらく repl() を使用するか、コマンド ラインから実行するために$ lein repl
呼び出します。$ lein run
src/foo/core.clj を編集: AOT コンパイル用の gen-class と main 関数を追加します。
(ns foo.core
(:gen-class))
(defn -main [& [a]]
(println (format "Hello, %s World!" a)))
project.clj を編集して、これをメイン クラスにします。
(defproject foo "0.0.1"
:description "FIXME: write description"
:dependencies [[org.clojure/clojure "1.4.0"]]
:main foo.core)
次に、uberjar をコンパイルして実行可能にします。
$ lein do clean, compile, uberjar ; chmod +x ./target/foo-0.0.1-standalone.jar
実行可能 jar は target/ ディレクトリにあり、他の実行可能ファイルと同様に名前で呼び出すことができます。
$ cd target
$ mv foo-0.0.1-standalone.jar foo
$ ./foo crazy
Hello, crazy World!
$ ./foo
Hello, null World!
その他のアプローチ
シバンとライニンゲン
leiningen シバン スタイルを使用http://charsequence.blogspot.com/2012/04/scripting-clojure-with-leiningen-2.html
ClojureScript + V8 -> js with shebang
Clojure は、JVM のウォームアップに時間がかかるため、コマンドライン スクリプト作成に最適な選択肢ではありません。ClojureScript + V8 エンジンは、(Rich Hickey による ClojureScript の最初の発表で) スクリプト作成のためのより優れたソリューションとして提唱されました。詳細な例を含むブログ記事は次のとおりですhttp://mmcgrana.github.com/2011/09/clojurescript-nodejs.htmlそして、シバンでノードを使用する方法を示すStackOverflowの回答があります: Is it possible to run Node.js 「ノード」を呼び出さずにスクリプトを実行しますか?
ただし、コンパイル手順がないように見えるため、実行する前にcljsからjsを構築するシバンで使用するスクリプトを作成することをお勧めします。この場合、同じ JVM 起動時間の問題が再び発生するため、上記のリンクにある Debasish のより単純なアプローチを使用する方がよい場合があります。