莱宁根有多个主要班级

Kev*_*vin 15 clojure leiningen

我希望有两个主要类(或更多)与leiningen,然后能够在java命令行中选择哪一个.例如,我有:

(ns abc (:gen-class))
(defn -main [] (println "abc"))

(ns def (:gen-class))
(defn -main [] (println "def"))
Run Code Online (Sandbox Code Playgroud)

使用project.clj:

(defproject my-jar "0.0.1"
 :description "test"
 :dependencies [
 ]
 :main abc)
Run Code Online (Sandbox Code Playgroud)

然后我构建lein uberjar,并运行:

java -cp my-jar-0.0.1-standalone.jar abc
java -cp my-jar-0.0.1-standalone.jar def
Run Code Online (Sandbox Code Playgroud)

我得到它,当我:main abc在project.clj中指定它是作为清单中的主类调用它,但我不能让它运行而不放东西.但无论哪种方式,当我尝试运行'def'主要时,我得到一个未找到的类:

Exception in thread "main" java.lang.NoClassDefFoundError: def
Run Code Online (Sandbox Code Playgroud)

小智 14

这至少适用于leiningen 2.0+

(defproject my-jar "0.0.1"
 :description "test"
 :dependencies [
 ]
 :profiles {:main-a {:main abc}
           {:main-b {:main def}}
 :aliases {"main-a" ["with-profile" "main-a" "run"]
           "main-b" ["with-profile" "main-b" "run"]})
Run Code Online (Sandbox Code Playgroud)

然后你可以这样运行每个主要:

lein main-a
lein main-b
Run Code Online (Sandbox Code Playgroud)

其中扩展到:

lein with-profile main-a run
lein with-profile main-b run
Run Code Online (Sandbox Code Playgroud)

我在我的一个项目中使用它,它完美无缺.


Kev*_*vin 9

我添加:aot [abc def]到project.clj以生成编译代码并且它工作正常.