我正在编写一个框架。希望我能够实现项目以使用框架的主要方法。
在我的演示项目中,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方法更改为项目中未定义的命名空间?