2013-03-19 73 views
2

我是clojure的初學者& emacs。 我正在使用clojure & emacs在clojure-doc.org上的教程。 當我用lein創建了我的測試項目之後,在emacs中啓動了nrepl,並且編輯了core_test.clj,我嘗試編譯了 。emacs&clojure編譯錯誤

然後我得到這個:

Loading /home/jakov/dev/PROJECTS/clojure/test1/test/test1/core_test.clj... 
FileNotFoundException Could not locate test1/core__init.class or test1/core.clj on  
classpath: clojure.lang.RT.load (RT.java:432) 

我的項目是用leiningen 2中創建,通過lein new test1。 我正在使用emacs24

這裏有什麼問題?

編輯: 這裏是我的項目的文件結構:

. 
./doc 
./doc/intro.md 
./.gitignore 
./README.md 
./project.clj 
./src 
./src/test1 
./src/test1/core.clj 
./test 
./test/test1 
./test/test1/core_test.clj 

編輯:

這裏是我的文件:

core_test.clj

(ns test1.core-test 
    (:use clojure.test 
     test1.core)) 

(deftest pairs-of-values 
    (let [args ["--server" "localhost" 
       "--port" "8080" 
       "--environment" "production"]] 
     (is (= {:server "localhost" 
       :port "8080" 
       :environment "production"} 
      (parse-args args))))) 

core.clj

(ns test1.core) 

(defn foo 
    "I don't do a whole lot." 
    [x] 
    (println x "Hello, World!")) 

這應該給我一個錯誤,因爲我的理解是, 應該抱怨解析指定參數時,我的理解。 然而,當我加入這core.clj同樣的錯誤發生了:

(defn parse-args [args] 
    {}) 
+0

您是否更改了leiningen放在那裏的文件頂部的命名空間行? – 2013-03-19 23:13:19

+0

不,我通過創建不同的項目多次嘗試過。 我遵循clojure-doc.org上的步驟 http://clojure-doc.org/articles/tutorials/emacs.html – 2013-03-19 23:16:10

+0

我編輯了我的問題。 – 2013-03-19 23:24:39

回答

1

讓我給你,以供參考,是什麼工作對我來說:

$ lein new test1 
Generating a project called test1 based on the 'default' template. 
To see other templates (app, lein plugin, etc), try `lein help new`. 
$ cd test1 
$ lein repl 
nREPL server started on port 4001 
REPL-y 0.1.9 
Clojure 1.4.0 
    Exit: Control+D or (exit) or (quit) 
Commands: (user/help) 
    Docs: (doc function-name-here) 
      (find-doc "part-of-name-here") 
    Source: (source function-name-here) 
      (user/sourcery function-name-here) 
Javadoc: (javadoc java-object-or-class-here) 
Examples from clojuredocs.org: [clojuredocs or cdoc] 
      (user/clojuredocs name-here) 
      (user/clojuredocs "ns-here" "name-here") 
user=> 

在Emacs中:

  • M-x nrepl<RET>
  • 打開文件test/test1/core_test.clj
  • C-c C-k

*Messages*緩衝說:

Loading /Users/marko/dev/clj/test1/src/test1/core.clj... 
#'test1.core/foo 

你執行完全相同的步驟,並得到不良的結果?

+0

你的腳步給了我這個: '加載/home/jakov/dev/PROJECTS/clojure/test1/test/test1/core_test.clj ... #'test1.core測試/ A-test' 然而,我必須按照您的示例將emacs nrepl連接到在終端中運行的repl的確切端口。 這是否意味着需要單獨的終端repl運行? 在給定頁面的教程使用nrepl插孔沒有外部進程..我想得到那個工作。 – 2013-03-20 11:00:27

+0

這是否與我啓動emacs,然後是'M-x nrepl-jack-in'這個事實有關,我並沒有告訴emacs我的項目路徑(我之後只打開了項目文件)? – 2013-03-20 11:09:21

+0

是的,這似乎是問題。我需要首先打開一個項目文件,所以nrepl知道路徑和環境。 – 2013-03-20 11:13:18

2

這就是問題所在:

Emacs是需要事先與nrepl-jack-in開始nrepl知道項目的路徑。 但是,如果你只用nrepl啓動nrepl並將其連接到在單獨的終端窗口中啓動的repl進程的端口,那麼emacs將從它連接的repl進程中知道ab out路徑等。

所以,爲了事情與nrepl-jack-in工作,你需要的是先打開一個項目文件,像core.cljcore_test.clj,然後開始nrepl-jack-in。在github上

Nrepl頁面添加此: 替代你可以使用C-u M-x nrepl-jack-in指定雷音項目的名稱,而不必訪問任何文件在裏面。

+1

nrepl-jack-in對我來說不是很有吸引力,我更喜歡提前啓動repl。順便說一句,你不需要每次都進入端口,你可以在〜/ .lein/profiles.clj中配置一個默認端口:'{:user {:repl-options {:port 4001} ...}}' – 2013-03-20 11:57:05

+0

如果可能的話,我總喜歡把它全部放在一個窗口中。 – 2013-03-20 12:14:22

+0

輸出也存在問題。如果你沒有在普通的終端窗口中啓動repl,那麼你將無法監視輸出到'System.out/err'的輸出,例如控制檯日誌記錄,'e.printStackTrace()'等。從長遠來看,您終於可以進入終端窗口。 – 2013-03-20 12:17:49