leiningen多个大类(leiningen with multiple main classes

2019-07-29 22:10发布

我想有两大类(或更多)leiningen,然后可以选择在java命令行哪一个。 例如,我有:

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

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

对于具有project.clj:

(defproject my-jar "0.0.1"
 :description "test"
 :dependencies [
 ]
 :main abc)

然后,我建立与lein uberjar ,并运行:

java -cp my-jar-0.0.1-standalone.jar abc
java -cp my-jar-0.0.1-standalone.jar def

我明白了,当我指定:main abc在project.clj有人打电话说出来的清单中的主类,但我不能让它不把东西运行。 但是,当我尝试运行“高清”主要无论哪种方式,我得到找不到类:

Exception in thread "main" java.lang.NoClassDefFoundError: def

Answer 1:

这个工程至少有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"]})

然后你就可以像这样运行的每个主:

lein main-a
lein main-b

它可以扩展成这样:

lein with-profile main-a run
lein with-profile main-b run

我在我的项目之一使用这一点,它完美的作品。



Answer 2:

我说:aot [abc def]到project.clj来生成编译后的代码和它的工作。



Answer 3:

什么在这两个雷音2.7.0的运行任务以及从产生uberjar工作对我来说是如下...

project.clj:

(defproject many-mains "0.1.0-SNAPSHOT"
  :description "Project containing multiple main methods"
  :dependencies [[org.clojure/clojure "1.8.0"]]
  :main nil
  :target-path "target/%s"
  :profiles {:main-abc {:main many-mains.abc}
             :main-def {:main many-mains.def}
             :main-ghi {:main org.rekdev.mm.ghi}
             :core {:main many-mains.core}
             :uberjar {:aot :all}})

对于源像...

$ cat src/many_mains/abc.clj
(ns many-mains.abc
  (:gen-class))

(defn -main
  ""
  [& args]
  (println "Hello, from many-mains.abc!"))

这让像雷音运行工作...

$ lein with-profile main-abc run
Hello, from many-mains.abc!

在命令行中的“ - ”在许多-电源都要成为“_”这使它成为一个合法的Java类名。

$ java -cp target/uberjar/many-mains-0.1.0-SNAPSHOT-standalone.jar many_mains.abc
Hello, from many-mains.abc!

似乎已经雷音2.7.0之间的效果之前,周围的一些行为的变化:主要零的MANIFEST.MF。 我在这里得到了就像在雷音2.7.0一个冠军。 完整的源代码是在https://github.com/robertkuhar/many-mains



文章来源: leiningen with multiple main classes