我遇到了通过:gen-class
生成的类的引用问题。
最简单的示例是:
(defproject test-proj
:dependencies [[org.clojure/clojure "1.8.0"]]
:aot [test-proj.test])
(ns test-proj.test
(:gen-class))
(defn -main []
(println test_proj.test)) ; Error here
问题是,这会在标记行产生一个
ClassNotFoundException
错误。(我尝试了上面文件中所有不同的
-
和_
的组合,在project.clj
中。我仍然不完全理解什么需要下划线,什么可以容忍短划线。有些东西似乎可以接受短划线并根据需要将其转换,而我从试验中知道,在-main
中,我需要使用下划线来引用test_proj.test
。)如果我进入项目根目录文件,就没有
target
文件夹,所以它不会生成类。如果我进入终端并运行lein compile
,它会在target
下生成所需的类,上述代码将无错误地运行。这虽然是一个不好的解决方法。如果我修改文件并忘记手动重新编译它怎么办?每次执行clean
后手动编译也很麻烦。作为一次孤注一掷,我尝试在
ns
宏正下方使用compile
:(compile 'test-proj.test)
如果我使用破折号,
compile
似乎什么也没有做。我可能误解了它的用法,但是它不会在target
下生成类文件。如果我使用下划线,则会出现异常,指出找不到命名空间。有没有一种方法可以自动生成类,这样我就不需要每次运行
lein compile
了?我以为这就是project.clj
中:aot
的作用。
:aot :all
后,仍然出现相同的错误。仍未创建target
文件夹。 - Carcigenicatelein compile
来编译它。”似乎指定AOT实际上并不会导致编译;它只是标记后续应该编译的内容。 - Carcigenicate