我可以从另一个Leiningen项目获得主要方法吗?

时间:2016-09-06 18:10:30

标签: clojure namespaces leiningen

我正在编写一个框架。希望我能够实现项目以使用框架的主要方法。

在我的演示项目中,definition.clj我有:

(ns definition
  (:gen-class))

(def widget
  {:this :that})

(defn -main [& args] (prn "MAIN"))

在我的project.clj文件中,我有:main ^:skip-aot definition。当我lein run时,我得到了预期的

lein run
"MAIN"

当我lein repl时,我可以看到widget-main函数:

definition=> definition/-main
#object[definition$_main 0x3ce2a73f "definition$_main@3ce2a73f"]
definition=> definition/widget
{:this :that}

当我致电(all-ns)时,我可以看到名称空间为#object[clojure.lang.Namespace 0x64965348 "definition"]

问题在于:如果我将main方法更改为另一个项目中定义的方法(这是一个依赖项):

:main ^:skip-aot the-framework.core

主要方法有效。但命名空间不再可见:

the-framework.core=> definition/widget

CompilerException java.lang.RuntimeException: No such namespace: definition, compiling:(/private/var/folders/gc/_1drfv2n2m588qnq5xz35g080000gn/T/form-init8820469930602256143.clj:1:1325)

唯一改变的是Leiningen :main定义中的project.clj值。

有没有办法在不破坏项目中的命名空间的情况下将main方法更改为项目中未定义的命名空间?

0 个答案:

没有答案