This is the second question after Is there a standalone Clojure package within Leiningen?
For example, I have a file hello_world.clj
, and I can run it u
leiningen can create an 'uberjar' for you with all your dependencies....
lein uberjar
will create a jar for you in the target subdirectory. The jar will contain all the dependencies listed in your project.clj
, so you don't need to worry about constructing a complex classpath to invoke your code.
You can reference this uberjar as a single entry in your java classpath in the normal way or, specify a main-class in the project.clj
invoke it as an executable jar.
e.g. a project.clj
like this:
(defproject clj-scratch "1.0.0-SNAPSHOT"
:description "FIXME: write description"
:dependencies [[org.clojure/clojure "1.4.0"]
:main clj-scratch.core)
will invoke the -main
function in clj-scratch.core namespace
if you run:
java -jar target/clj-scratch-1.0.0-SNAPSHOT-standalone.jar
There are several ways with lein repl
:
cat your_file.clj | lein repl
echo '(load-file "your_file.clj")' | lein repl
lein repl
(load-file "your_file.clj")
2
I like to use inlein for that.
#!/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)
Then just chmod +x script.clj
and run it!
Alternatively you can just inlein script.clj my args here
as well.
use lein-exec plugin, example from readme.md (updated with "lein" instead of "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