我正在使用Leiningen和Ring通过命令行对我正在制作的项目reagent_test
进行调试,我遇到了一个问题:
C:/...reagent_test>lein ring server
... huge chunk of errors
Caused by: java.io.FileNotFoundException: Could not locate reagent_test/core__init.class or reagent_test/core.clj on classpath. Please check that namespaces with dashes use underscores in the Clojure file name.
... more errors
如果有人想要解决这个问题,我会在需要时制作一个。
问题是,文件都在正确的位置。这是我的project.clj
:
(defproject reagent-test "0.1.0-SNAPSHOT"
:description "FIXME: write description"
:url "http://example.com/FIXME"
:license {:name "Eclipse Public License"
:url "http://www.eclipse.org/legal/epl-v10.html"}
:plugins [[lein-cljsbuild "1.1.5"]
[lein-ring "0.10.0"]]
:dependencies [[org.clojure/clojure "1.8.0"]
[org.clojure/clojurescript "1.9.456"]
[ring "1.4.0"]
[leiningen "2.7.1"]
[reagent "0.6.0"]
[garden "1.3.2"]]
:cljsbuild {:builds {:app {:source-paths ["src/cljs"]}
:compiler {:output-to "resources/public/main.js"
:pretty-print true}}}
:ring {:handler reagent-test.core/-main})
我的项目结构是这样的(至少对于相关文件):
src:
clj:
reagent_test:
core.clj
cljs:
reagent_test:
core.cljs
project.clj
在core.clj
和core.cljs
中,我将此作为我的命名空间:
(ns reagent-test.core)
注意:文件夹有冒号而文件没有。
答案 0 :(得分:0)
在文件顶部的名称空间声明中,您应该使用短划线:
(ns reagent-test.core)
而文件(以及文件上方的所有目录)应使用下划线。因此,文件名应为whatever/reagent_test/core.clj
或whatever/reagent_test/core.cljs
。
答案 1 :(得分:0)
正如克里斯墨菲在他的回答评论中所指出的那样。由于您稍微更改了项目目录结构,因此需要修改project.clj
文件:
(defproject reagent-test "0.1.0-SNAPSHOT"
:description "FIXME: write description"
:url "http://example.com/FIXME"
:license {:name "Eclipse Public License"
:url "http://www.eclipse.org/legal/epl-v10.html"}
:plugins [[lein-cljsbuild "1.1.5"]
[lein-ring "0.10.0"]]
:source-paths ["src/clj"]
:dependencies [[org.clojure/clojure "1.8.0"]
[org.clojure/clojurescript "1.9.456"]
[ring "1.4.0"]
[leiningen "2.7.1"]
[reagent "0.6.0"]
[garden "1.3.2"]]
:cljsbuild {:builds {:app {:source-paths ["src/cljs"]}
:compiler {:output-to "resources/public/main.js"
:pretty-print true}}}
:ring {:handler reagent-test.core/-main})
添加是:source-paths
键,它应指定Clojure代码的目录。默认情况下,lein使用src
目录作为Clojure源文件的根目录。