2017-01-29 49 views
0
我目前使用Leiningen並通過環上的一個項目,我做叫 reagent_test命令行

,我遇到了一個問題:FileNotFoundException異常與Leiningen和環

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.cljcore.cljs我有這個作爲我的命名空間:

(ns reagent-test.core) 

注意:文件夾有一個冒號,文件沒有。

回答

0

在該文件的頂部,你應該使用一個破折號空間聲明:

(ns reagent-test.core) 

儘管文件(上述文件中的所有目錄)應使用下劃線。所以文件名應該是whatever/reagent_test/core.cljwhatever/reagent_test/core.cljs

+0

這就是我在'core.clj'和'core.cljs'中所做的 - 抱歉,我應該包含它。我應該使用'namespace'代碼段來編輯帖子嗎?此外,請參閱文件結構的東西 - 「reagent_test」位使用下劃線而不是破折號。 –

+0

另一件事你的依賴關係括號不對齊:'[[org.clojure/clojure「1.8.0」]]' - 似乎最後的括號在那裏太早了。 –

+0

啊,很好!謝謝!這是Visual Studio Code很糟糕的結果,會解決這個問題。 –

0

正如Chris Murphy在他的回答中所指出的那樣。既然你已經改變了你的項目的目錄結構一點,你將需要修改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}) 

加入是應指定目錄中的Clojure代碼:source-paths關鍵。默認情況下,lein使用src目錄作爲Clojure源文件的根目錄。

相關問題