我把我的Clojure应用程序装在一个罐子里。我发布它:
java -cp lib/clojure-1.2.0.jar:my-app.jar clojure.main -e "(use 'foo.main)(-main)"
这是从这个jar启动我的应用程序的唯一方法吗?具体来说,我希望看到一些简单的事情:
java -cp lib/clojure-1.2.0.jar:my-app.jar clojure.main foo.main
答案 0 :(得分:13)
使用
(ns foo.main
(:gen-class)
在主源中生成命名空间包限定类文件。添加
:main foo.main
:manifest {"Class-Path" "lib/clojure-1.2.0.jar"}
到您的Leiningen项目文件。在“lein jar”之后,您可以使用JAR嵌入的Manifest文件中的元数据启动应用程序:
java -jar foo-YOURVERSION.jar
答案 1 :(得分:4)
如果您使用leiningens uberjar任务打包您的应用程序,那么您需要做的就是运行,
java -jar name-of-your-app.jar
答案 2 :(得分:1)
如果您可以生成正确的类路径(例如来自Leiningen),则现在可以[1]:
java -cp $(lein classpath)clojure.main -e“(do'(需要 '[clojure.string])(println(clojure.string / join \“ \” [1 2 3])))“
或者通过超级jar包:
java -cp my_uberjar.jar clojure.main -e“(do'(require '[clojure.string])(println(clojure.string / join \“ \” [1 2 3])))“
您还可以使用此库https://github.com/clojure/java.classpath
从另一个Clojure进程本身(例如repl)执行类似的操作(clojure.java.shell/sh "java" "-cp" (clojure.string/join ":" (map #(.toString %) (clojure.java.classpath/classpath) "clojure.main" :in (pr-str '(do (require '[my.namespace]) ([my.namespace/my-main)))))
[1]不确定何时引入