簡體   English   中英

Clojure:如何從jar運行我的主程序?

[英]Clojure: How to run my main from jar?

我把我的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

使用

(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

如果您使用leiningens uberjar任務打包您的應用程序,那么您需要做的就是運行,

java -jar name-of-your-app.jar

如果您可以生成正確的類路徑(例如來自Leiningen),現在可以[1]:

java -cp $(lein classpath)clojure.main -e“(do'(require'[clojure.string])(println(clojure.string / join \\”\\“[1 2 3])))”

或者來自一個uberjar:

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]不確定何時引入

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM